2014-09-10 51 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