2014-09-10 1 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' (분명히 오타를 제외하고)으로 이미 이것을하고있는 것처럼 보입니다. 실제 문제에 대해 더 구체적으로 설명 할 수 있습니까? –

+0

잘 컴파일 오류가 발생합니다. GCC 사용. -mavx 및 -march = native가 CFLAGS로 설정되었습니다 ...... 오류 : 'int'유형을 사용하여 '__m256i'유형을 초기화 할 때 호환되지 않는 유형 – raddirad

+0

OK - 아래 답변보기 ... –

답변

5

이 라인은 오타를 가지고 캐스트 누락되었습니다

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

그것은해야한다 :

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

을 데이터를 추가로 처리하려면 AVX2를 사용해야합니다 (예 : 정수 연산 등)이므로 -mavx2으로 컴파일해야합니다.

+0

이 트릭을 수행했습니다. – raddirad