我编译一个简单的测试程序用于测试gcc自动向量化使用的是何种指令集,发现当编译参数为
-O1 -ftree-vectorize -fopt-info-vec-optimized
编译器提示如下
gccvectortest.c:16:13: optimized: loop vectorized using 16 byte vectors
由此可以看出编译器默认使用的是128位的向量(SSE指令集)
当编译参数为
-O1 -fopenmp -ftree-vectorize -fopt-info-vec-optimized -march=native
或者
-O1 -fopenmp -ftree-vectorize -fopt-info-vec-optimized -march=skylake-avx512
编译器提示如下
gccvectortest.c:16:13: optimized: loop vectorized using 32 byte vectors
gccvectortest.c:10:5: optimized: loop vectorized using 32 byte vectors
由此可以看出编译器使用的是256位的向量(AVX指令集),并非AVX512
环境:
CPU : Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz (支持avx512)
编译器:gcc 9.3.0
OS:Linux version 3.10.0-957.el7.x86_64
我使用的CPU架构为skyLake,是支持avx512的,但是编译器似乎无法使用avx512进行向量处理,我想知道如何让编译器使用avx512指令集进行自动向量化处理?