-1

我一直在使用 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 指令吗?

谢谢你的帮助。

4

1 回答 1

4

Sandy Bridge 仅支持 AVX。除非您购买 Haswell CPU,否则您将不走运。

Bochs从v2.5开始支持 AVX2 仿真,但速度会慢得多,您只能测试代码的正确性。

于 2014-04-07T06:55:58.687 回答