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

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

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

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

【问题讨论】:

标签: c++ visual-studio-2008 optimization 64-bit sse2


【解决方案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 编译时会设置或更低的选项。
    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多