将整数数组加载到AVX寄存器中

rad*_*rad 3 c simd avx

我目前正在研究AVX Intrinsics以并行化我的代码.至于现在我想写一个基准,看看我可以获得多少加速.

void randomtable (uint32_t crypto[4][64])
{
    int k = 1;
    for (int i=0;i<4;i++)
    {
        k++;
        for (int j=0;j<64;j++)
        { crypto[i][j]= (k+j)%64; }
    }
}
int main (void)
{
uint32_t crypt0[4][64];
randomtable(crypt0);
__m256i ymm0 = _m256_load_si256(&crypt0[0][0]);
}
Run Code Online (Sandbox Code Playgroud)

我的问题和问题是如何将数组的前8个元素加载到ymm0中?

我正在使用gcc -mavx -march = native -g -O0 -std = c99进行编译

编译错误:错误:使用类型'int'初始化类型'__m256i'时不兼容的类型

Pau*_*l R 5

这一行有一个拼写错误并且缺少一个演员:

__m256i ymm0 = _m256_load_si256(&crypt0[0][0]);
Run Code Online (Sandbox Code Playgroud)

它应该是:

__m256i ymm0 = _mm256_load_si256((__m256i *)&crypt0[0][0]);
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想对数据做进一步的操作(即整数运算等),您可能需要使用AVX2,因此您应该使用-mavx2.