据我了解,每个支持AVX2的CPU都支持AVX,每个支持AVX的CPU都支持SSE4.2。 这是否意味着仅指定
-mavx2
就足够了,还是有区别:
-msse4.2 -mavx -mavx2
和
-mavx2
我在 GCC 文档中找到的就是这个(AVX SSE 关系):
使用 -mavx 时,GCC 会抑制 SSEx 指令。相反,它会在需要时为所有 SSEx 指令生成新的 AVX 指令或 AVX 等效项。
我认为这只是意味着 GCC 将使用更好的 AVX 指令而不是 SSE 指令,所以我想这意味着当你有 -mavx 时 msse4.2 是无用的,但我找不到任何
-mavx2
-mavx
关系。
我还查阅了 clang 文档,但找不到任何东西。
注意:我正在编译 C++ 代码,但我认为 C 和 C++ 编译器的答案是相同的。
您可以通过在命令行中添加
-Q --help=target
来查看 gcc 的活动标志。
通过管道传输到文件中,进行比较。两组选项为我提供了相同的设置。