37

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

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

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

4

3 回答 3

48

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

来自维基百科

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

于 2009-07-01T07:52:48.820 回答
3

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

于 2013-08-23T16:05:07.883 回答
2

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

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

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

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

然而在 MSDN 上说:

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

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

于 2018-11-04T10:00:56.387 回答