/arch:AVX是否启用AVX2?

8
/arch:AVX是否在Visual Studio 2012 Update 4上启用了AVX2(具有256位整数SIMD指令和一些新的FP随机洗牌)?
思路:
  • 是的,它启用了AVX,因为VS没有提到AVX2。但我认为VS可以使用AVX2,因为我的内在工作。

  • 不是,它不支持,因为AVX和AVX2是单独的CPU功能(Sandybridge vs. Haswell,或Excavator/Zen vs. Bulldozer),就像SSE和SSE2是单独的一样。

AVX2


3
VS 2012拥有AVX2内嵌函数,因此您可以直接使用它们。您只需使用/arch:AVX来启用VEX编码即可。如果/arch:AVX2存在,则允许编译器自动使用它们 - 但我怀疑这将成为可能,因为Visual Studio一直落后于自动向量化方面的发展历程。 - Mysticial
@Mysticial "忽略未知选项 '/arch:AVX2'" :-( - Mikhail
1
请注意,对于“/arch:AVX2”的支持已包含在Visual Studio 2013 Update 2或更高版本Visual Studio 2015 Technical Preview中。 - Chuck Walbourn
AVX具有256位寄存器,但只有FP指令(包括FP洗牌)扩展到256b。 AVX2添加了整数指令的256b版本,以及一些新的跨通道洗牌(用于FP和整数)。 - Peter Cordes
3个回答

3

这里提到的是 AVX 而不是 AVX2。根据微软的说法,这主要适用于浮点运算。 无论此标志如何,VS2012都支持 AVX2 内部函数。 AVX 可在 SandyBridge 和 IvyBridge 的 i3、i5 和 i7 变种上使用。 AVX2 是从 Haswell 开始使用的。


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

1
这是真的吗?几篇之前的帖子说AVX开关无法打开针对AVX2的自动向量化功能? - Mikhail
@Mikhail:我非常确定这个答案是在说,如果你使用/arch:AVX,AVX2 intrinsics的代码生成将会更好。而不是它将让编译器自己发明AVX2指令的用途;这需要/arch:AVX2。(旧版MSVC在没有使用/arch:AVX的情况下使用AVX或AVX2 intrinsics会创建SSE/AVX转换停顿。我IRC现代MSVC更好)。 - Peter Cordes

0

我已经确认了,当启用/arch:AVX时,Visual Studio 2013 Update 5仍会将代码的某些部分编译为AVX2,目前还没有选项可以只编译为AVX,希望微软能够修复这个问题。


如果是真的,这可能是一个大问题,你有任何参考或例子吗? - Mikhail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接