我已将 x64 配置添加到我的 C++ 项目以编译我的应用程序的 64 位版本。一切看起来都很好,但是编译器给出了以下警告:
`cl : Command line warning D9002 : ignoring unknown option '/arch:SSE2'`
SSE2 优化真的不适用于 64 位项目吗?
我已将 x64 配置添加到我的 C++ 项目以编译我的应用程序的 64 位版本。一切看起来都很好,但是编译器给出了以下警告:
`cl : Command line warning D9002 : ignoring unknown option '/arch:SSE2'`
SSE2 优化真的不适用于 64 位项目吗?
似乎所有 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! 更快,并且复制了大部分功能。
如果您选择 SSE2,我理解出现的警告,尽管它仍然很愚蠢。但是,如果您选择 /arch:AVX,您仍然会收到警告。我相信它会得到修复与 SP1。它只是有点垃圾邮件和烦恼。
编译器选项 /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 上使用。因此,我现在刚刚删除了该选项。