필자는 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 명령어를 실행할 수 있습니까?
도움 주셔서 감사합니다.
'_mm256_and_si256'은 AVX2 명령입니다. Sandy Bridge에는 AVX 만 있습니다. – Mysticial
아, 이미 알고 있지 않다면 AVX는 정수가 아닌 부동 소수점에 대한 256 비트 명령어를 가지고 있습니다. 따라서 256 비트 정수형 명령어를 원한다면 프로세서에없는 AVX2가 필요합니다. – Mysticial
감사합니다. 이것은 나에게 새로운 것이다. 나는 AVX가 int와 double을 지원한다고 생각했다. – CarcaraH