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

Kir*_*sky 31 c++ optimization 64-bit visual-studio-2008 sse2

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

`cl : Command line warning D9002 : ignoring unknown option '/arch:SSE2'`
Run Code Online (Sandbox Code Playgroud)

SSE2优化真的不适用于64位项目吗?

Kir*_*sky 42

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

来自维基百科:

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

  • 是的,SSE2是64位模式中唯一的选择.旧的x87 FPU不再可用. (4认同)
  • 这不是一个错误,它是一个警告,它会在那里警告你,旗帜没有做你认为它正在做的事情. (4认同)

小智 6

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

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

Command line warning D9002 : ignoring unknown option '/arch:SSE2'
Run Code Online (Sandbox Code Playgroud)

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

然而 MSDN 上说:

/arch:SSE and /arch:SSE2 are only available when you compile for the x86 platform.
Run Code Online (Sandbox Code Playgroud)

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

  • SSE2 是 x86-64 的基准,因此显然 MSVC 在编译 x86-64 时会关闭任何设置该值或更低的选项。 (2认同)