Visual C++ (x64) 中的 SSE2 选项

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1067630/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 18:40:16  来源:igfitidea点击:

SSE2 option in Visual C++ (x64)

c++visual-studio-2008optimization64-bitsse2

提问by Kirill V. Lyadvinsky

I've added x64 configuration to my C++ project to compile 64-bit version of my app. Everything looks fine, but compiler gives the following warning:

我已将 x64 配置添加到我的 C++ 项目以编译我的应用程序的 64 位版本。一切看起来都很好,但编译器给出了以下警告:

`cl : Command line warning D9002 : ignoring unknown option '/arch:SSE2'`

Is there SSE2 optimization really not available for 64-bit projects?

是否真的有 SSE2 优化不适用于 64 位项目?

回答by Kirill V. Lyadvinsky

Seems to be all 64-bit processors has SSE2. Since compiler option always switched on by default no need to switch it on manually.

似乎所有 64 位处理器都有 SSE2。由于编译器选项在默认情况下始终处于打开状态,因此无需手动打开它。

From Wikipedia:

来自维基百科

SSE instructions: The original AMD64 architecture adopted Intel's SSE and SSE2 as core instructions. SSE3 instructions were added in April 2005. SSE2 replaces the x87 instruction set's IEEE 80-bit precision with the choice of either IEEE 32-bit or 64-bit floating-point mathematics. This provides floating-point operations compatible with many other modern CPUs. The SSE and SSE2 instructions have also been extended to operate on the eight new XMM registers. SSE and SSE2 are available in 32-bit mode in modern x86 processors; however, if they're used in 32-bit programs, those programs will only work on systems with processors that have the feature. This is not an issue in 64-bit programs, as all AMD64 processors have SSE and SSE2, so using SSE and SSE2 instructions instead of x87 instructions does not reduce the set of machines on which x64 programs can be run.SSE and SSE2 are generally faster than, and duplicate most of the features of the traditional x87 instructions, MMX, and 3DNow!.

SSE指令:原AMD64架构采用Intel的SSE和SSE2作为核心指令。SSE3 指令于 2005 年 4 月添加。SSE2 替换了 x87 指令集的 IEEE 80 位精度,可选择 IEEE 32 位或 64 位浮点数学。这提供了与许多其他现代 CPU 兼容的浮点运算。SSE 和 SSE2 指令也已扩展为对八个新的 XMM 寄存器进行操作。SSE 和 SSE2 在现代 x86 处理器中以 32 位模式提供;但是,如果它们在 32 位程序中使用,则这些程序只能在具有该功能的处理器的系统上运行。这在 64 位程序中不是问题,由于所有 AMD64 处理器都有 SSE 和 SSE2,因此使用 SSE 和 SSE2 指令而不是 x87 指令不会减少可以运行 x64 程序的机器集。SSE 和 SSE2 通常比传统 x87 指令、MMX 和 3DNow! 的速度更快,并复制了它们的大部分功能。

回答by Ian

I understand the warning appearing if you choose SSE2, althought its still silly. However you still get the warning if you select /arch:AVX. I'm sure it'll get fixed with SP1. Its just a bit spammy and an annoyance.

我理解如果您选择 SSE2 会出现警告,尽管它仍然很愚蠢。但是,如果您选择 /arch:AVX,您仍然会收到警告。我相信它会在 SP1 中得到修复。它只是有点垃圾邮件和烦恼。

回答by Adam Spalek

The compiler option /arch:AVX will not work on old CPUs hence you need to ensure your CPU supports it. I ran into this issues when I had to re-compile the 1.12 tensorflow package for my old Xeon CPU which does not support.

编译器选项 /arch:AVX 不适用于旧 CPU,因此您需要确保您的 CPU 支持它。当我不得不为不支持的旧至强 CPU 重新编译 1.12 tensorflow 包时,我遇到了这个问题。

I have switched on /arch:SSE2 (as Kirill) posted above but getting exactly same issue. The Microsoft compiler issues a warning (INFO) that this option will be ignored.

我已经打开了上面发布的 /arch:SSE2(如 Kirill),但遇到了完全相同的问题。Microsoft 编译器会发出警告 (INFO),指出将忽略此选项。

Command line warning D9002 : ignoring unknown option '/arch:SSE2'

From the Microsoft documentation my understanding is that this option is only available on x86 and that does not make sense to me either.

从 Microsoft 文档中,我的理解是此选项仅在 x86 上可用,这对我来说也没有意义。

However on MSDN says:

然而在 MSDN 上说:

/arch:SSE and /arch:SSE2 are only available when you compile for the x86 platform.

and that SSE is used on x64 anyways. Hence I just removed the option now.

并且无论如何都在 x64 上使用了 SSE。因此,我现在只是删除了该选项。