2016-03-03 86 views
0

我无法加载或存储AVX2内在函数指令,就像我之前在AVX中所做的那样。没有错误,只是警告,并且它在运行时不执行加载/存储指令。其他AVX2指令正常工作,但无法从内存加载。AVX2 __m256i const * mem_addr在加载指令中对比AVX

如下。

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

_can无法从memory_加载意味着什么?你检查过堆栈中阵列的对齐了吗? –

+0

它如何以及它在哪里失败?在编译还是运行时?你观察到的错误是什么? – mindriot

回答

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); 
^     ^^^^^^^^^ 

请注意,当您编译好时,您的下一个问题可能是运行时的内存对齐问题。

+0

非常感谢你现在的工作 – ADMS