我无法加载或存储AVX2内在指令,因为我之前在AVX中已经完成了。没有错误,只是警告,并且它不会在运行时执行加载/存储指令。其他AVX2指令正常工作但我无法从内存加载。
如下。
AVX:
float t[MAX][MAX];
row0 = _mm256_load_ps(&t[i][j]);
_mm256_store_ps(&t[j][i], row0);
AVX2:
const int32_t a[MAX][MAX]; // I tried int, long, global and local and many other things...
a0_i =_mm256_stream_load_si256 (&a[0][0]);
mm256_store_si256(&a[0][0], a0_i);
那么,问题/区别是什么?有什么想法或解决方案吗?
答案 0 :(得分:1)
如果你看一下_mm256_stream_load_si256的原型:
__m256i _mm256_stream_load_si256 (__m256i const* mem_addr);
您可以看到需要将其转换为正确的类型,即:
a0_i =_mm256_stream_load_si256 ((__m256i *)&a[0][0]);
^^^^^^^^^ ^
您也忘记了获取数组第一个元素的地址,并且您在后续商店中还有一些错误:
_mm256_store_si256((__m256i *)&a[0][0], a0_i);
^ ^^^^^^^^^
请注意,当您编译好之后,您的下一个问题可能是运行时的内存对齐。