我一直在使用 Intel 的 SSE 指令并获得良好的性能提升,最近,我尝试使用 AVX 指令。
问题是:我可以编译我的 avx 指令,但我无法运行它们。指令是:
__m256i* avx1 = (__m256i*)vct1;
__m256i* avx2 = (__m256i*)vct2;
__m256i* avx3 = (__m256i*)vct3;
__m256i va0, va1, va2;
va2 = _mm256_and_si256(va0, va1);
我可以编译这些指令的唯一方法是使用 -mavx2 标志。没有这个标志,我无法编译代码,我收到了这个错误:
"sseAND.cpp:124:33: error: ‘_mm256_and_si256’ was not declared in this scope
va2 = _mm256_and_si256(va0, va1);
"
好的,在使用 -mavx2 编译并运行代码后,我收到了以下错误消息:
"Illegal Instruction
”。
运行/proc/cpuinfo
,我看到我的 Sandy Bridge CPU 只支持 AVX 指令,不支持 AVX2。
问题是:我的代码或我的 gcc 标志有什么问题吗?
我可以运行我在 Sandybridge 中放置的 avx 指令吗?
谢谢你的帮助。