我目前正在研究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]);
}
我的问题和疑问是如何将数组的前8个元素加载到ymm0?
我正在使用gcc编译-mavx -march = native -g -O0 -std = c99
编译错误:错误:初始化类型时不兼容的类型&#39; __ m256i&#39;使用类型&#39; int&#39;
答案 0 :(得分:5)
此行有拼写错误并且缺少演员:
__m256i ymm0 = _m256_load_si256(&crypt0[0][0]);
应该是:
__m256i ymm0 = _mm256_load_si256((__m256i *)&crypt0[0][0]);
请注意,如果您想对数据做进一步的操作(即整数运算等),您可能需要使用AVX2,因此您应该使用-mavx2
进行编译。