2014-09-10 47 views
3

我目前正在研究AVX Intrinsics来并行化我的代码。 至于现在我想写一个基准,看看我能得到多少加速。将整数数组装入AVX寄存器

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 =天然-g -O0 -std = C99

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

+0

你似乎已经用'_mm256_load_si256'(除了显而易见的错字)已经这样做了 - 你能更具体地说明实际问题吗? – 2014-09-10 12:01:08

+0

以及我得到一个编译错误。使用GCC。 -mavx和-march = native被设置为CFLAGS ......错误:使用类型'int'初始化类型'__m256i'时的不兼容类型 – raddirad 2014-09-10 12:03:06

+0

确定 - 请参阅下面的答案... – 2014-09-10 12:04:25

回答

5

这行有一个错字,并缺少强制:

__m256i ymm0 = _m256_load_si256(&crypt0[0][0]); 

它应该是:

__m256i ymm0 = _mm256_load_si256((__m256i *)&crypt0[0][0]); 

请注意,如果您想对数据做进一步处理,您可能需要使用AVX2。整数算术等),所以你应该编译-mavx2

+0

这样做的诀窍 – raddirad 2014-09-10 12:07:33