基本上,我的程序就像:
#include <immintrin.h>
...
int* buf = (int*)_mm_malloc(sizeof(int) * 8, 32);
__m256i vi;
//some operations on vi
...
_mm256_store_epi32(buf, vi);
_mm_free(buf)
编译器抱怨“错误:未在此作用域中声明”_mm256_store_epi32“。。。注意:生成程序时(使用标志-mavx-mavx2
),建议的替代方案:”_mm256_store_epi64“。 让我感到困惑的是,当它被_mm256_store_epi64
替换时,它就编译成功了。 我的gcc版本是7.5.0.
在这里发布了一个类似的问题,但没有帮助。 有谁能给我提供一些解决办法吗?
根据intrinsics指南(https://software.intel.com/sites/landingpage/intrinsicsguide/#text=_mm256_store_epi32&expand=5573,5567,5567,5567),_mm256_store_epi32
intrinsic需要这些CPUID标志:AVX512VL+AVX512F。
如果您使用-mavx512vl-mavx512f
使其内在可用(前提是您的硬件目标支持它),则可能是这样。