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

Posted

技术标签:

【中文标题】Visual C++ (x64) 中的 SSE2 选项【英文标题】:SSE2 option in Visual C++ (x64) 【发布时间】:2009-07-01 06:53:00 【问题描述】:

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

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

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

【问题讨论】:

你知道了吗?对我来说,这绝对是奇怪的。 docs.microsoft.com/en-us/previous-versions/visualstudio/… 和 docs.microsoft.com/en-us/previous-versions/visualstudio/… - 文档太差了。我完全误解了如何打开 SSE2、SSE3、SSE4.1、SSE4.2(在 GCC 中可以通过 -m*** 完成) 我在本主题中问了问题,因为我不知道如何指定使用的 SSE* 版本进行代码编译:***.com/questions/52969655/… 【参考方案1】:

似乎所有 64 位处理器都有 SSE2。由于编译器选项默认开启,无需手动开启。

来自Wikipedia:

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 是 64 位模式下的唯一选项。旧的 x87 FPU 不再可用。 这不是错误,而是警告,它会警告您该标志没有按照您认为的那样做。 如果 VS IDE 有这个选项,那么对于 x64 项目来说,如果它是一个“未知选项”,这有点奇怪。它仍然存在于 VS2015 中。 @Ela782: 可能是因为在将项目从 32 位迁移到 64 位时不强制人进行更改。【参考方案2】:

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

【讨论】:

【参考方案3】:

编译器选项 /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 上使用。因此,我现在只是删除了该选项。

【讨论】:

SSE2 是 x86-64 的基线,因此显然 MSVC 会关闭任何在为 x86-64 编译时会设置或更低的选项。

以上是关于Visual C++ (x64) 中的 SSE2 选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2017 15.5 中禁用 AVX?

Visual C++ 2010 Express 是不是包含 x64 编译器?

即使在安装 Visual C++ 2008 Express 和 Windows SDK 后也无法为 x64 编译

如何在 Windows 10 上使用 Visual Studio 2015 x64 配置和构建 Tesseract OCR C++

在 Visual Studio 中检测 SSE/SSE2 指令集的可用性

在多个平台的解决方案中构建 Visual Studio C++ 项目