将__m256i存储为整数

如何将__m256i数据类型存储为整数?

我知道浮子有:

_mm256_store_ps(float *a, __m256 b) 

其中第一个参数是输出数组。

对于整数我只发现:

 _mm256_store_si256(__m256i *a, __m256i b) 

其中两个参数都是__m256i数据类型。

做这样的事情就足够了:

 int * X = (int*) _mm_malloc( N * sizeof (*X) ,32 ); 

(我使用它作为函数的参数,我想获得它的值)

内部function:

 __m256i * Xmmtype = (__m256i*) X; //fill output _mm256_store_si256( &Xmmtype[ i ] , T ); //T is __m256i 

这个可以吗?

– – -更新 – – – – – – – – – – – –

好的,如果我有:

 __m256i T; for ( y = 0; y < h; y++ ) { for ( x = 0; x < w; x++ ) { for ( int i = 0; i < N; i+=8 ) { //calculate here the T } //write result _mm256_store_si256( &Xmmtype[ x + y * w ] , T ); } } 

你所做的就是OK,但你不需要创建一个临时指针 – 你可以直接应用演员,例如:

 _mm256_store_si256( (__m256i *)X, T ); 

要么:

 _mm256_store_si256( (__m256i *)&X[i], T ); 

根据您问题的最新修改进行更新:

看起来您正在以不符合AVX对齐要求的方式索引X ,即X[i]不保证是32字节对齐,因此您应该使用未对齐的存储:

 _mm256_storeu_si256( (__m256i *)&X[i], T );