如果-O3开启,icC语言 xCORE-AVX2是否强制不使用Xeon Gold上的AVX512指令?



根据标题,

下使用intel编译器编译的程序icc -O3 -xCORE-AVX2 program.cpp

在Xeon Gold 61XX上生成AVX512指令?我们的汇编分析似乎没有找到,但这不能保证。

谢谢!

在ICC经典,不,你可以使用intrinsic任何指令没有告诉编译器启用它。(不像GCC或clang,你必须启用指令集来使用它们的内在特性,像基于llvm的Intel OneAPI编译器。)

但是编译器不会发出AVX-512指令,除非来自intrinsic(或内联asm),而不启用-march=skylake-avx512-march=native(又称-xHOST)或暗示-mavx512f的类似选项。或一个pragma或__attribute__((target("string")))来启用AVX-512单个功能。

对于所有主要的x86编译器都是如此,AVX-512默认情况下是不开启的。

使用-O3 -march=native,如果你想让代码为你运行的机器进行优化,就像使用GCC或clang一样。


在ICC经典中,您还可以让编译器在每个函数的基础上使用某些指令集,_allow_cpu_features(_FEATURE_AVX512F|_FEATURE_BMI);的工作方式更像一个编译器,影响编译时的代码生成。参考文档

还相关:架构对使用SSE/AVX的影响:gcc/clang vs. MSVC vs. ICC.