2014-04-07 6 views
-2

필자는 Intel의 SSE 명령어를 사용하여 성능을 향상 시켰으며 최근에는 AVX 명령어를 사용하려고했습니다.AVX 계산 문제 : avx2 코드를 실행할 수 있습니까?

문제점 : avx 명령어를 컴파일 할 수는 있지만 실행할 수 없습니다. 지침은 다음과 같습니다 : I는이 지침을 컴파일 할 수 있습니다

__m256i* avx1 = (__m256i*)vct1; 
__m256i* avx2 = (__m256i*)vct2; 
__m256i* avx3 = (__m256i*)vct3; 

__m256i va0, va1, va2;    

va2 = _mm256_and_si256(va0, va1); 

있는 유일한 방법은 -mavx2 플래그를 가진 것입니다. 이 플래그가 없으면 나는 코드를 컴파일 할 수 없으며이 오류 접수 :

"sseAND.cpp:124:33: error: ‘_mm256_and_si256’ was not declared in this scope 
    va2 = _mm256_and_si256(va0, va1); 
" 
좋아, -mavx2와 compilling하고 코드를 실행 한 후, 나는이 오류 messagem받은

:.

"Illegal Instruction을 "

/proc/cpuinfo 실행, 내 샌디 브릿지 CPU는 만 AVX 지침은하지 AVX2를 지원하고있다 보았다

질문은 다음과 같습니다.? 내 코드 또는 내 GCC 플래그와 아무 잘못이

Sandybridge에 아래에 입력 한 avx 명령어를 실행할 수 있습니까?

도움 주셔서 감사합니다.

+2

'_mm256_and_si256'은 AVX2 명령입니다. Sandy Bridge에는 AVX 만 있습니다. – Mysticial

+1

아, 이미 알고 있지 않다면 AVX는 정수가 아닌 부동 소수점에 대한 256 비트 명령어를 가지고 있습니다. 따라서 256 비트 정수형 명령어를 원한다면 프로세서에없는 AVX2가 필요합니다. – Mysticial

+0

감사합니다. 이것은 나에게 새로운 것이다. 나는 AVX가 int와 double을 지원한다고 생각했다. – CarcaraH

답변

3

샌디 브리지는 AVX 만 지원합니다. Haswell CPU를 구입하지 않으면 운이 없어집니다.

Bochsv2.5부터 AVX2 에뮬레이션을 지원하지만 훨씬 느려질 수 있습니다. 코드의 정확성 만 테스트 할 수 있습니다.

+0

Bochs는 정말 멋지다! VirtualBox는 심지어 AVX가있는 시스템에서도 AVX를 지원하지 않습니다. –

+0

감사합니다! 나는 Bochs에 대해 몰랐다. 나는 그것을 시도 할 것이다. – CarcaraH

+0

귀하의 질문에 대한 답변이 있으면이 질문에 답을 표시하십시오. – Mathias