【问题标题】:Does /arch:AVX enable AVX2?/arch:AVX 是否启用 AVX2?
【发布时间】:2013-12-08 18:17:14
【问题描述】:

/arch:AVX 是否在 Visual Studio 2012 Update 4 上启用 AVX2(带有 256 位整数 SIMD 指令和一些新的 FP shuffle)?

思路:

  • 是的,它启用了 AVX,因为 VS 没有提到 AVX2。但我认为VS可以做AVX2,因为我的内在工作。

  • 不,不是因为 AVX 和 AVX2 是独立的 CPU 功能
    (Sandybridge vs. Haswell,或挖掘机/Zen vs. Bulldozer),
    就像 SSE 和 SSE2 是分开的一样

【问题讨论】:

  • VS 2012 具有 AVX2 内在函数。所以你可以使用它们。您只需要/arch:AVX 即可启用 VEX 编码。因此,如果 /arch:AVX2 甚至存在,那是为了让编译器自动使用它们——我怀疑它是否能够做到,因为 VS 在自动矢量化方面有落后的历史。
  • @Mysticial ignoring unknown option '/arch:AVX2' :-(
  • 请注意,/arch:AVX2 的支持包含在 Visual Studio 2013 Update 2 or later 和 Visual Studio 2015 Technical Preview 中。
  • AVX 有 256 位寄存器,但只有 FP 指令(包括 FP shuffle)扩展为 256b。 AVX2 添加了 256b 版本的整数指令,以及一些新的车道交叉洗牌(针对 FP 和整数)。

标签: c++ visual-c++ visual-studio-2012 vectorization avx2


【解决方案1】:

它指的是 AVX 而不是 AVX2。根据微软的说法,这(主要)适用于浮点运算。 无论此标志如何,VS2012 都支持 AVX2 内在函数。 AVX 可用于 SandyBridge 和 IvyBridge 的 i3、i5 和 i7 变体。 AVX2 始于 Haswell。

【讨论】:

    【解决方案2】:

    使用“/arch:AVX”编译器选项可以更有效地使用 AVX2 整数指令。如果禁用此选项,则使用 AVX2 指令的代码可能比使用 SSE2 的代码慢(因为 SSE2 和 AVX2 之间有很多切换)。

    【讨论】:

    • 这是真的吗,之前的几篇帖子都说AVX开关不会开启针对AVX2的autovectorizaiton功能?
    • @Mikhail:我很确定这个答案是说如果您使用/arch:AVX,AVX2 intriniscs 的代码生成会更好。并不是说它会让编译器自己发明 AVX2 指令的用途;这将需要/arch:AVX2。 (如果您在没有 /arch:AVX 的情况下使用 AVX 或 AVX2 内在函数,则当时的旧 MSVC 会创建 SSE/AVX 转换停止。IIRC 现代 MSVC 更好)。
    【解决方案3】:

    我已经确认 Visual Studio 2013 Update 5,当 /arch:AVX 已启用,仍将代码的某些部分编译成 AVX2,目前 没有选项只能说 AVX,我希望微软能解决这个问题。

    【讨论】:

    • 如果属实这可能是个大问题,你有任何参考或例子吗?
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2016-07-29
    • 2022-06-13
    • 2016-09-25
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多