개요
고급 벡터 확장(Advanced Vector Extensions,약어:AVX)은 2008년 4월 춘계 인텔 개발자 포럼에서 발표된 x86 명령어 집합의 확장으로 SIMD명령어 집합중의 하나이다. SIMD 레지스터의 폭이 128비트에서 256비트로 확장돼서, 최대 2배까지 부동소수점 연산 처리 능력이 향상된다. 또한 기존의 2 피연산자 구조에서 3 피연산자 구조로 변경됨으로 인하여 프로그래밍이 더 효율적이고 성능이 더 뛰어나게 된다. 인텔은 2010년 1월에 발표한 샌디 브리지 마이크로아키텍처기반 프로세서부터 지원을 시작했으며 AMD는 불도저(Bulldozer) 프로세서에서 선보였다. AVX에 관련된 백서가 인텔 소프트웨어 네트워크에 있으며 또한 온라인상에 참조 매뉴얼이 있다.
SSE4부터 시작하여 Sandy Bridge XMM -> Haswell YMM -> Xeon ZMM까지 발전하며 128, 256, 512처럼 점차 레지스터의 크기가 증가하였다. AVX, AVX2, AVX512는 서로 공유할 수 없지만, 아래 단계의 명령어를 지원하여 확장성이 있다.
컴파일러에서 (gcc 에서) -O3 -mavx -mavx2와 같은 명령을 내리면 AVX최적화를 시키게 된다. 예를 들어서 256개의 숫자를 더하고 빼는 loop와 같은 경우 한방에 AVX를 이용하여 풀게 되는 것이다. 즉 사용자는 생각할 필요도 없이 한방에 AVX를 사용하게 할 수도 있다.
혹은 Intel SIMD Intrinsics처럼 C function이나 다른 라이브러리로 주어지는 함수를 사용하여 명시적으로 AVX를 사용할 수도 있다. 예를 들어서 _m256(a,b,c)와 같은 경우에는 d[i] = a[i]*b[i] + c[i]의 계산을 한방에 해주도록 AVX명령어로 적절히 변환한다. AVX 명령어참고.
특징
개요
- 부동소수점 계산이 많은 작업에 유용
- 멀티미디어 처리
- 3D 모델링
- 과학 모의실험
- 재무 분석
- 최대 256비트 넓이의 벡터 부동소수점 데이터
- 2 피연산자 명령어구조에서 3 피연산자 명령어 구조지원
- 전력 효율성이 뛰어나고 유휴 소비전력이 미미함
- 더 폭넓은 벡터의 지원으로 이전과 비교 최대 2배 높은 FLOPS
- 스레드와 코어들 그리고 상호 연결의 증가에 따라 성능 향상
- 프로그래밍의 유연성
- AVX로부터 기존과 새로운 애플리케이션의 성능 향상
명령어
- 200개 이상의 기존 인텔 SSE명령어들은 유연한 메모리 정렬과 분명한 소스 연산자를 처리하기 위해 갱신됨.
- 100개 이내의 기존 인텔 SSE명령어들은 256비트 벡터를 지원하기 위해 갱신됨
- 100개 이내의 새로운 명령어들
- 살포(Broadcast), 치환(permute), 곱하기와 더하기가 합쳐진 명령어들
- 4 연산자 명령어들은 다음을 포함 : 일반화된 셔플(shuffle), 그리고 변수들의 혼합
미래
- 미래 확장성을 고려하여 설계
- 256- 과 512비트 벡터 정수
- 512- 와 1024비트 벡터 부동소수점