고급 벡터 확장
Advanced Vector ExtensionsAVX(Advanced Vector Extensions)는 인텔 및 AMD(Advanced Micro Devices)의 마이크로프로세서용 x86 명령 세트 아키텍처의 확장입니다.2008년 3월에 인텔에 의해 제안되어 2011년 1분기에 출하된 Sandy[1] Bridge 프로세서와 2011년 3분기에 출하된 불도저[2] 프로세서를 탑재한 AMD에 의해 처음 지원되었습니다.AVX는 새로운 기능, 새로운 명령 및 새로운 코딩 방식을 제공합니다.
AVX2(Haswell New Instructions라고도 함)는 대부분의 정수 명령을 256비트로 확장하고 새로운 명령을 도입합니다.2013년에 출하된 Haswell 프로세서에서 인텔이 최초로 지원했습니다.
AVX-512는 2013년 7월에 인텔이 제안하고 2016년에 [3][4]출하된 나이츠 랜딩 공동 프로세서를 통해 인텔이 최초로 지원하는 새로운 EVEX 프리픽스 인코딩을 사용하여 AVX를 512비트까지 지원합니다.기존 프로세서에서 AVX-512는 2017년 스카이레이크 서버와 HEDT 프로세서와 함께 도입됐다.
고급 벡터 확장
AVX는 16개의 YMM 레지스터를 사용하여 여러 데이터에 대해 단일 명령을 수행합니다(SIMD 참조). 각 YMM 레지스터는 다음을 유지 및 동시 연산(연산)할 수 있습니다.
- 8개의 32비트 싱글 소켓 부동소수점 번호 또는
- 4개의 64비트 더블소켓 부동소수점 번호
SIMD 레지스터의 폭이 128비트에서 256비트로 증가하여 XMM0–XM7에서 YMM0–YMM7로 이름이 변경되었습니다(x86-64 모드에서는 XM0–XM15에서 YMM0–YM15로).기존의 SSE 명령은 VEX 프리픽스를 통해 YMM 레지스터의 하위 128비트로 동작할 수 있습니다.
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
AVX 에서는, VEX 부호화 방식이라고 불리는 3 오퍼랜드 SIMD 명령 형식이 도입되고 있습니다.여기서, 행선지 레지스터는 2개의 소스 오퍼랜드와 구별됩니다.예를 들어, 기존의 2연산자 형식 a ← a + b를 사용하는 SSE 명령은 이제 두 소스 피연산자를 보존하면서 비파괴 3연산자 형식 c ← a + b를 사용할 수 있습니다.원래 AVX의 3연산자 형식은 SIMD 피연산자(YMM)를 사용하는 명령어로 제한되었고 범용 레지스터(예: EAX)를 사용하는 명령어는 포함되지 않았습니다.이것은 나중에 BMI와 같이 나중에 확장되는 범용 레지스터의 새로운 명령어 코딩에 사용되었습니다.VEX 코딩은 AVX-512에서 도입된 k0-k7 마스크 레지스터에서 작동하는 명령어에도 사용됩니다.
SIMD 메모리 오퍼랜드의 정렬 요건은 [5]완화됩니다.비 VEX 부호화 벡터 명령과 달리 대부분의 VEX 부호화 벡터 명령에서는 메모리 오퍼랜드를 벡터 크기에 맞출 필요가 없습니다.특히,VMOVDQA
명령에서는 메모리 오퍼랜드를 정렬해야 합니다.
새로운 VEX 부호화 방식에서는 opcode 공간을 확장하고 명령어를 3개 이상의 오퍼랜드를 가질 수 있으며 SIMD 벡터 레지스터를 128비트보다 길게 할 수 있는 새로운 코드프리픽스 세트가 도입되었습니다.VEX 프리픽스는 기존의 SSE 명령에서도 사용할 수 있습니다.이것에 의해, 3개의 오퍼랜드 형식이 제공되어 AVX 명령과 보다 효율적으로 대화할 수 있습니다.VZEROUPPER
그리고.VZEROALL
.
AVX 명령에서는 128비트 SIMD와 256비트 SIMD가 모두 지원됩니다.128비트 버전은 벡터화 범위를 넓힐 필요 없이 오래된 코드를 개선하는 데 도움이 될 수 있으며 SSE에서 AVX로 이행해야 하는 단점을 피할 수 있습니다.또한 일부 AMD의 초기 AVX 구현에서도 더 빠릅니다.이 모드는,[6] AVX-128이라고도 불립니다.
새로운 순서
이러한 AVX 명령어는 레거시 128비트 SSE 명령의 256비트 확장 명령어에 추가되어 있습니다.대부분의 명령어는 128비트 오퍼랜드와 256비트 오퍼랜드 모두에서 사용할 수 있습니다.
설명 | 묘사 |
---|---|
VBROADCASTSS ,VBROADCASTSD ,VBROADCASTF128 | 32비트, 64비트 또는 128비트 메모리 오퍼랜드를 XMM 또는 YMM 벡터 레지스터의 모든 요소에 복사합니다. |
VINSERTF128 | 256비트 YMM 레지스터의 아래쪽 절반 또는 위쪽 절반 중 하나를 128비트 소스 오퍼랜드 값으로 바꿉니다.수신처의 나머지 절반은 변경되지 않습니다. |
VEXTRACTF128 | 256비트 YMM 레지스터의 하반 또는 상반을 추출하여 128비트 수신처 오퍼랜드에 값을 복사합니다. |
VMASKMOVPS ,VMASKMOVPD | 조건부로 SIMD 벡터 메모리 오퍼랜드로부터 임의의 수의 요소를 행선지 레지스터에 읽어, 나머지 벡터 요소는 읽지 않은 채로 해, 행선지 레지스터내의 대응하는 요소를 0으로 설정합니다.또는 SIMD 벡터 레지스터 피연산자에서 벡터 메모리 피연산자에 조건부로 임의의 수의 요소를 쓰고 메모리 피연산자의 나머지 요소는 변경하지 않는다.AMD Jaguar 프로세서 아키텍처에서는 마스크가 제로일 때 메모리소스 오퍼랜드를 사용한 이 명령에는 300클럭 이상의 클럭 사이클이 소요됩니다.이 경우 명령에서는 아무것도 실행되지 않습니다.이것은 설계상의 [7]결함으로 보입니다. |
VPERMILPS ,VPERMILPD | 차선 내를 허가합니다.하나의 입력 오퍼랜드의 32비트 또는 64비트 벡터 요소를 혼합합니다.이것들은 레인 내 256비트 명령입니다.즉, 2개의 독립된 128비트 셔플을 사용하여 256비트 모두에서 동작하기 때문에 128비트 레인을 [8]셔플할 수 없습니다. |
VPERM2F128 | 256비트 소스 오퍼랜드 2개의 128비트 벡터 요소 4개를 256비트 수신처 오퍼랜드에 셔플하고 즉시 상수를 셀렉터로 합니다. |
VTESTPS ,VTESTPD | 패킹된 단정밀 또는 2정밀 부동소수점 부호 비트의 패킹비트 테스트 AND 및 CF 플래그를 기반으로 ZF 플래그를 설정 또는 클리어합니다. |
VZEROALL | 모든 YMM 레지스터를 0으로 설정하고 미사용으로 태그 붙입니다.128비트 사용과 256비트 사용 사이에서 전환할 때 사용됩니다. |
VZEROUPPER | 모든 YMM 레지스터의 상부를 0으로 설정합니다.128비트 사용과 256비트 사용 사이에서 전환할 때 사용됩니다. |
AVX 탑재 CPU
- 인텔(R)
- Sandy Bridge 프로세서, 2011년 1분기[9]
- Sandy Bridge E 프로세서, 2011년 4분기[10]
- Ivy Bridge 프로세서, 2012년 1분기
- Ivy Bridge E 프로세서, 2013년 3분기
- Haswell 프로세서, 2013년 2분기
- Haswell E 프로세서, 2014년 3분기
- Broadwell 프로세서, 2014년 4분기
- Skylake 프로세서, 2015년 3분기
- Broadwell E 프로세서, 2016년 2분기
- Kaby Lake 프로세서, 2016년 3분기(ULV 모바일)/2017년 1분기(데스크탑/모바일)
- Skylake-X 프로세서, 2017년 2분기
- Coffee Lake 프로세서, 2017년 4분기
- Cannon Lake 프로세서, 2018년 2분기
- 위스키 레이크 프로세서, 2018년 3분기
- 캐스케이드 레이크 프로세서, 2018년 4분기
- 아이스레이크 프로세서, 2019년 3분기
- Comet Lake 프로세서(Core 및 Xeon 브랜드만), 2019년 3분기
- Tiger Lake (Core, Pentium 및 Celeron 브랜드[11]) 프로세서, 2020년 3분기
- Rocket Lake 프로세서, 2021년 1분기
- Alder Lake (Xeon, Core, Pentium 및 Celeron 브랜드)프로세서, 2021년 4분기Golden Cove P-cores와 Gracemont E-cores 모두에서 지원됩니다.
리스트 되고 있는 패밀리의 모든 CPU가 AVX를 서포트하고 있는 것은 아닙니다.일반적으로 상용 명칭 Core i3/i5/i7/i9의 CPU는 이러한 CPU를 지원하지만, Tiger[12] Lake 이전의 Pentium 및 Celeron CPU는 지원하지 않습니다.
- AMD:
인텔 프로세서와 AMD 프로세서의 호환성에 관한 문제는 XOP 명령어 세트로 설명합니다.
컴파일러 및 어셈블러 지원
- Absoft는 -mavx 플래그를 지원합니다.
- Free Pascal 컴파일러는 버전 2.7.1 이후의 -CfAVX 및 -CfAVX2 스위치와 함께 AVX 및 AVX2를 지원합니다.
- RAD studio(v11.0 Alexandria)는 AVX2 및 AVX512를 [15]지원합니다.
- GNU 어셈블러(GAS) 인라인 어셈블리 함수는 이러한 명령(GCC 경유로 액세스 가능)을 서포트합니다.인라인 코드 내의 로컬레퍼런스의 처리에 있어서는 GAS와 밀접하게 호환됩니다.
- 버전 4.6 이후의 GCC (일부 지원 대상 4.3 브랜치가 있었지만)및 버전 11.1 이후의 인텔 컴파일러 스위트는 AVX 를 서포트하고 있습니다.
- Open64 컴파일러 버전 4.5.1은 -mavx 플래그가 있는 AVX를 지원합니다.
- PathScale은 -mavx 플래그를 통해 지원됩니다.
- Vector Pascal 컴파일러는 -cpuAVX32 플래그를 통해 AVX를 지원합니다.
- Visual Studio 2010/2012 컴파일러는 intrential 및 /arch를 통해 AVX를 지원합니다.AVX 스위치
- MASM VS2010 버전, YASM,[16] FASM, NASM 및 JWASM과 같은 기타 어셈블리.
운영 체제 지원
AVX는 256비트 와이드 YMM 레지스터 파일을 통해 새로운 레지스터 상태를 추가하므로 컨텍스트 스위치 간에 AVX의 확장 레지스터를 적절히 저장 및 복원하려면 명시적인 운영 체제 지원이 필요합니다.다음의 operating system 버전은, AVX 를 서포트합니다.
- Dragon Fly BSD: 2013년 초에 지원이 추가되었습니다.
- FreeBSD: 2012년 [17]1월 21일에 제출된 패치에 지원이 추가되었습니다.이 패치는 9.1 안정[18] 릴리스에 포함되어 있습니다.
- Linux:[20] 2009년 6월 9일에 출시된 커널 버전 2.6.[19]30 이후 지원.
- macOS: 2011년 6월 23일에 출시된 10.6.8(Snow Leopard) 업데이트에서[21][unreliable source?] 지원이 추가되었습니다.
- OpenBSD: 2015년 [22]3월 21일에 지원이 추가되었습니다.
- Solaris: Solaris 10 Update 10 및 Solaris 11에서 지원
- Windows: Windows 7 SP1, Windows Server 2008 R2 SP1,[23] Windows 8, Windows 10에서 지원
- Hyper-V를 탑재한 Windows Server 2008 R2 SP1에서는 AMD AVX(Operon 6200 및 4200 시리즈) 프로세서 KB2568088을 지원하려면 핫픽스가 필요합니다.
고급 벡터 확장 2
Haswell New [24]Instructions라고도 불리는 Advanced Vector Extensions 2 (AVX2)는 인텔의 Haswell 마이크로아키텍처에 도입된 AVX 명령 세트를 확장한 것입니다.AVX2 에서는, 다음의 추가가 행해집니다.
- 대부분의 벡터 정수 SSE 및 AVX 명령을 256비트로 확장
- 비인접 메모리 위치에서 벡터 요소를 로드할 수 있는 지원 수집
- DWORD 및 QWORD 입도 any-to-any 파마
- 벡터 이동
인텔이 같은 프로세서 마이크로아키텍처(architecture)로 도입했기 때문에, 3 오퍼랜드의 FMA3 확장이 AVX2의 일부라고 생각되는 경우가 있습니다.이것은 독자적인 CPUID 플래그를 사용한 별개의 확장으로, 아래에 기재되어 있지 않은 독자적인 페이지에 기재되어 있습니다.
새로운 순서
설명 | 묘사 |
---|---|
VBROADCASTSS ,VBROADCASTSD | 32비트 또는 64비트 레지스터 오퍼랜드를 XMM 또는 YMM 벡터 레지스터의 모든 요소에 복사합니다.이것들은, AVX1 의 같은 명령의 레지스터 버전입니다.128비트 버전은 없지만 VINSERTF128을 사용하면 동일한 효과를 얻을 수 있습니다. |
VPBROADCASTB ,VPBROADCASTW ,VPBROADCASTD ,VPBROADCASTQ | 8, 16, 32 또는 64비트 정수 레지스터 또는 메모리 오퍼랜드를 XMM 또는 YMM 벡터 레지스터의 모든 요소에 복사합니다. |
VBROADCASTI128 | 128비트 메모리 오퍼랜드를 YMM 벡터 레지스터의 모든 요소에 복사합니다. |
VINSERTI128 | 256비트 YMM 레지스터의 아래쪽 절반 또는 위쪽 절반 중 하나를 128비트 소스 오퍼랜드 값으로 바꿉니다.수신처의 나머지 절반은 변경되지 않습니다. |
VEXTRACTI128 | 256비트 YMM 레지스터의 하반 또는 상반을 추출하여 128비트 수신처 오퍼랜드에 값을 복사합니다. |
VGATHERDPD ,VGATHERQPD ,VGATHERDPS ,VGATHERQPS | 32비트 또는 64비트 인덱스와 스케일을 사용하여 단일 또는 이중 정밀 부동 소수점 값을 수집합니다. |
VPGATHERDD ,VPGATHERDQ ,VPGATHERQD ,VPGATHERQQ | 32비트 또는 64비트 인덱스와 스케일을 사용하여 32비트 또는 64비트 정수 값을 수집합니다. |
VPMASKMOVD ,VPMASKMOVQ | 조건부로 SIMD 벡터 메모리 오퍼랜드로부터 임의의 수의 요소를 행선지 레지스터에 읽어, 나머지 벡터 요소는 읽지 않은 채로 해, 행선지 레지스터내의 대응하는 요소를 0으로 설정합니다.또는 SIMD 벡터 레지스터 피연산자에서 벡터 메모리 피연산자에 조건부로 임의의 수의 요소를 쓰고 메모리 피연산자의 나머지 요소는 변경하지 않는다. |
VPERMPS ,VPERMD | 레지스터 또는 메모리 피연산자를 선택기로 하여 256비트 소스 피연산자의 8개의 32비트 벡터 요소를 256비트 수신처 피연산자로 섞습니다. |
VPERMPD ,VPERMQ | 레지스터 또는 메모리 피연산자를 선택기로 하여 256비트 소스 피연산자의 64비트 벡터 요소 4개를 256비트 수신처 피연산자로 섞습니다. |
VPERM2I128 | 2개의 256비트 소스 오퍼랜드의 4개의 128비트 벡터 요소를 256비트 수신처 오퍼랜드에 셔플(중 2개)하고 즉시 상수를 셀렉터로 합니다. |
VPBLENDD | SSE4의 PBLEND 명령의 더블워드 버전입니다. |
VPSLLVD ,VPSLLVQ | 좌회전 논리.패킹된 입력에 따라 각 요소가 이동되는 가변 이동을 허용합니다. |
VPSRLVD ,VPSRLVQ | 논리적으로 오른쪽으로 이동합니다.패킹된 입력에 따라 각 요소가 이동되는 가변 이동을 허용합니다. |
VPSRAVD | 산술적으로 오른쪽으로 이동해패킹된 입력에 따라 각 요소가 이동되는 가변 이동을 허용합니다. |
AVX2 탑재 CPU
- 인텔(R)
- Haswell 프로세서 (Core 및 Xeon 브랜드만), 2013년 2분기
- Haswell E 프로세서, 2014년 3분기
- Broadwell 프로세서, 2014년 4분기
- Broadwell E 프로세서, 2016년 3분기
- Skylake 프로세서, 2015년 3분기
- Kaby Lake 프로세서, 2016년 3분기(ULV 모바일)/2017년 1분기(데스크탑/모바일)
- Skylake-X 프로세서, 2017년 2분기
- Coffee Lake 프로세서, 2017년 4분기
- Cannon Lake 프로세서, 2018년 2분기
- 캐스케이드 레이크 프로세서, 2019년 2분기
- 아이스레이크 프로세서, 2019년 3분기
- Comet Lake 프로세서, 2019년 3분기
- Tiger Lake (Core, Pentium 및 Celeron 브랜드[11]) 프로세서, 2020년 3분기
- Rocket Lake 프로세서, 2021년 1분기
- Alder Lake (Xeon, Core, Pentium 및 Celeron 브랜드[11])프로세서, 2021년 4분기Golden Cove P-cores와 Gracemont E-cores 모두에서 지원됩니다.
- AMD
- VIA:
- 나노 쿼드코어
- 에덴 X4
AVX-512
AVX-512는 인텔이 2013년 7월에 제안한x86 명령어 세트 아키텍처용 256비트 Advanced Vector Extensions SIMD 명령어의 512비트 확장으로 인텔의 나이츠 랜딩 [3]프로세서에서 지원됩니다.
AVX-512 명령어는 새로운 EVEX 프리픽스로 인코딩됩니다.4개의 오퍼랜드, 8개의 새로운 64비트 opmask 레지스터, 자동 브로드캐스트가 있는 스칼라 메모리 모드, 명시적 반올림 제어 및 압축된 변위 메모리 주소 지정 모드를 사용할 수 있습니다.x86-64 모드에서는 레지스터 파일의 폭이 512비트로 증가하고 총 레지스터 수가 32(ZMM0-ZM31)로 증가합니다.
AVX-512는, 복수의 확장 기능을 실장하고 있는 모든 프로세서에서 서포트되는 것은 아닙니다.명령 세트는 다음과 같이 구성됩니다.
- AVX-512 Foundation – 몇 가지 새로운 명령어가 추가되어 대부분의 32비트 및 64비트 부동소수점 SSE-SSE 4.1 및 AVX/AVX2 명령어가 EVEX 코딩 스킴으로 확장되어 512비트 레지스터, 동작 마스크, 파라미터 브로드캐스트 및 임베디드드 반올림 및 예외 제어를 지원합니다.
- AVX-512 컨플릭트 검출 명령(CD)– 효율적인 컨플릭트 검출을 통해 더 많은 루프를 벡터화할 수 있으며 나이츠[3] 랜딩 지원
- AVX-512 지수 및 상호 명령(ER) – 나이츠[3] 랜딩이 지원하는 초월적 운용 구현에 도움이 되는 지수 및 상호 운용
- AVX-512 프리페치 명령(PF)– 나이츠[3] 랜딩에 의해 지원되는 새로운 프리페치 기능
- AVX-512 VL(Vector Length Extensions) – 대부분의 AVX-512 동작을 확장하여 XMM(128비트) 및 YMM(256비트) 레지스터(x86-64 [25]모드의 XM16-XM31 및 YMM16-YM31 포함)에서도 동작 가능
- AVX-512 바이트 및 워드 명령(BW)– AVX-512를 확장하여 8비트 및 16비트 정수 조작에[25] 대응
- AVX-512 Double Word and Quadword Instructions (DQ; 더블워드 및 쿼드워드 명령)– 확장 32비트 및 64비트 정수 조작[25]
- AVX-512 Integer Fused Multi Add(IFMA) – 512비트 [26]: 746 정수의 경우 퓨전 다중 추가.
- AVX-512 Vector Byte Manipulation Instructions(VBMI; 벡터바이트 조작 명령)는 AVX-512BW에는 없는 벡터바이트 치환 명령을 추가합니다.
- AVX-512 Vector Neural Network Instructions Word 가변 정밀도(4VNNIW) – 딥 러닝을 위한 벡터 명령.
- AVX-512 Fused Multiply Agulation Packed Single Precision (4FMAPS) – 딥 러닝을 위한 벡터 지침.
- VPOPCNTDQ – 비트 수가 [27]1로 설정됩니다.
- VPCLMULQDQ – 4단어를 [27]캐리어리스로 증식.
- AVX-512 VNNI(Vector Neural Network Instructions) – 딥 [27]러닝을 위한 벡터 명령.
- AVX-512 Galois Field New Instructions(GFNI; 갈로아 필드 신규 명령)– 갈로아 [27]필드 계산을 위한 벡터 명령.
- AVX-512 Vector AES 명령어(VAES)– AES [27]코딩용 벡터 명령어
- AVX-512 Vector Byte Manipulation Instructions 2(VBMI2) – 바이트/워드 로드, 저장 및 [27]시프트와의 연결.
- AVX-512 비트 알고리즘(BITALG) – VPOPCNTDQ를 [27]확장하는 바이트/워드 비트 조작 명령.
- AVX-512 Bfloat16 부동소수점 지침(BF16) – AI 가속용 벡터 지침.
- AVX-512 반정밀 부동소수점 명령(FP16)– 부동소수점 및 복소수점에서의 조작에 관한 벡터 명령으로 정밀도가 저하됩니다.
모든 실장에서는 코어 확장 AVX-512F(AVX-512 Foundation)만 필요합니다.다만, 현재의 모든 프로세서는 CD(컨플릭트 검출)를 서포트하고 있습니다.컴퓨팅 코프로세서는 ER, PF, 4VNNIW, 4FMAPS, 및 VPOPCNTDQ 프로세서를 서포트합니다.
AVX-512F의 업데이트된 SSE/AVX 명령은 AVX 버전과 동일한 니모닉을 사용합니다. 512비트 ZMM 레지스터에서 작동할 수 있으며 128/256비트 XMM/YM 레지스터(AVX-512VL 포함) 및 바이트, 워드, 더블워드 및 쿼드워드(AVAND 정수)를 지원합니다.
AVX-512 탑재 CPU
AVX-512 서브셋 | F | CD | 음.정말 | PF | 4FMAPS | 4 VNNIW | VPOPCNTDQ | VL | DQ | 대역폭 | IFMA | VBMI | VBMI2 | 바이탈 | VNNI | BF16 | VPCLMULQDQ | GFNI | VAES | VP2 인터섹트 | FP16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
인텔 나이트 랜딩 (2016) | 네. | 네. | 아니요. | ||||||||||||||||||
인텔 나이츠 밀 (2017) | 네. | 아니요. | |||||||||||||||||||
인텔 Skylake-SP, Skylake-X (2017) | 아니요. | 아니요. | 네. | 아니요. | |||||||||||||||||
인텔 Cannon Lake (2018) | 네. | 아니요. | |||||||||||||||||||
인텔 캐스케이드 레이크-SP(2019) | 아니요. | 네. | 아니요. | ||||||||||||||||||
Intel Cooper Lake (2020) | 아니요. | 네. | 아니요. | ||||||||||||||||||
인텔 아이스레이크 (2019) | 네. | 아니요. | 네. | 아니요. | |||||||||||||||||
인텔 Tiger Lake (2020) | 네. | 아니요. | |||||||||||||||||||
인텔 로켓 레이크 (2021) | 아니요. | ||||||||||||||||||||
인텔 올더 호수 (2021) | 정식 지원되지는 않지만 일부 BIOSNote 1 버전을 사용하는 메인보드에서 사용 가능 | ||||||||||||||||||||
AMD Zen 4 (2022) | 네. | 네. | 아니요. |
^주 1 : AVX-512는 Alder Lake 프로세서에서는 디폴트로 비활성화되어 있습니다.일부 BIOS 버전이 설치된 메인보드에서는 AVX-512를 BIOS에서 활성화할 수 있지만, 이를 위해서는 E-core를 [29]비활성화해야 합니다.
AVX-512를 지원하는 컴파일러
AVX-VNNI
AVX-VNNI는, AVX512-VNNI 명령 세트 확장의 VEX 코드 배리언트입니다.동일한 연산 세트를 제공하지만 256비트 벡터로 제한되며 브로드캐스트, opmask 레지스터 또는 16개 이상의 벡터 레지스터에 액세스하는 등 EVEX 인코딩의 추가 기능을 지원하지 않습니다.이 확장 기능에 의해, AVX-512 의 완전한 서포트가 프로세서에 실장되어 있지 않은 경우에서도, VNNI 의 동작을 서포트할 수 있습니다.
AVX-VNNI 탑재 CPU
적용들
- 멀티미디어, 과학 및 재무 애플리케이션의 부동 소수점 집약적인 계산에 적합합니다(AVX2는 정수 연산을 지원합니다).
- 부동 소수점 SIMD 계산에서 병렬 처리 및 처리량을 높입니다.
- 비파괴 명령으로 인한 레지스터 부하를 줄입니다.
- Linux RAID 소프트웨어의 퍼포먼스 향상(필수 AVX2, AVX로는 불충분)[34]
소프트웨어
- 블렌더는 Cycles 렌더링 [35]엔진에서 AVX, AVX2 및 AVX-512를 사용합니다.
- Bloombase는 Bloombase Cryptographic Module(BCM)에서 AVX, AVX2 및 AVX-512를 사용합니다.
- Botan은 ChaCha와 같은 일부 알고리즘을 가속화하기 위해 AVX와 AVX2를 모두 사용합니다.
- Crypto++는 AVX와 AVX2를 모두 사용하여 Salsa 및 ChaCha와 같은 일부 알고리즘을 가속화합니다.
- OpenSSL은 버전 1.0.[36]2 이후 AVX 및 AVX2에 최적화된 암호화 기능을 사용합니다.AVX-512 지원은 버전 3.0.[37]0에서 추가되었습니다.이 지원의 일부는 LibreSSL과 같은 다양한 클론 및 포크에도 있습니다.
- GIMPS에 사용되는 소프트웨어인 Prime95/MPRime은 버전 27.1부터, AVX2는 28.6부터, AVX-512는 29.[38]1부터 AVX 명령을 사용하기 시작했습니다.
- dav1d AV1 디코더는,[39][40] 서포트되고 있는 CPU로 AVX2 및 AVX-512 를 사용할 수 있습니다.
- SVT-AV1 인코더는, AVX2 및 AVX-512 를 사용해 비디오 [41]부호화를 고속화할 수 있습니다.
- distributed.net에 의해 사용되는 소프트웨어인 dnetc는 RC5 프로젝트에 사용할 수 있는 AVX2 코어를 가지고 있으며, 곧 OGR-28 프로젝트에 사용할 AVX2 코어를 출시할 예정입니다.
- 아인슈타인은 @집은 중력파를 찾는다 그들의 분산 응용 프로그램의 전용 AVX를 사용한다.[42]
- @ 집 접는 의자는 계산 중심부 GROMACS 도서관이 구현되에 전용 AVX를 사용한다.
- 헬리오스 64비트 x86하드웨어에 전용 AVX와 AVX2 하드웨어 가속을 사용한다.[43]
- 수평선:제로 새벽의 Decima 게임 엔진에 전용 AVX를 사용한다.
- RPCS3, 오픈 소스 플레이 스테이션 3에뮬레이터, PS3게임을 모방하는 것 AVX2과 AVX-512 지침을 사용한다.
- 네트워크 장치 인터페이스, IPvideo/audio 프로토콜 NewTek로 라이브 방송 생산용으로 개발되는 증가된 공연을 위해 전용 AVX와 AVX2을 사용한다.
- TensorFlow 이후 버전 위 버전 1.6과 tensorflow CPU를 지원하는 적어도 전용 AVX가 필요하다.[44]
- X264, x265과 VTM 비디오 인코더 인코딩 속도를 높이기 위해 AVX2 또는 AVX-512 사용할 수 있다.
- 임의의 길이와 scrypt 포함(비트 코인과 Litecoin에 pooler의 cpuminer처럼)다양한cryptography-related 정해진 일들을 위해 전용 AVX와 AVX2을 사용한다 다양한CPU-based cryptocurrency 광부들,.
- Libsodium 스칼라 곱의 구현에 Curve25519과 Ed25519 알고리즘, AVX2 BLAKE2b, Salsa20, ChaCha20, AVX2과 AVX-512 Argon2 알고리즘의 구현에 전용 AVX를 사용한다.
- 때 사용할 수 VP8/VP9 코덱의 Libvpx 오픈 소스 참조 구현, AVX2 또는 AVX-512을 사용한다.
- 때 사용할 수 FFTW 전용 AVX, AVX2과 AVX-512을 활용할 수 있다.
- 때 사용할 수 LLVMpipe, 메사의 소프트웨어 OpenGL렌더러 갈륨과 LLVM 기반 시설을 이용해서, AVX2을 사용한다.
- Glibc 다양한 수학적(i.e.을 최적화 구현을 위해 AVX2(필리핀 무술과)과 AVX-512을 사용한다
expf
,sinf
,powf
,atanf
,atan2f
)과(memmove
,memcpy
, 등)는 libc로 기능합니다. - Linux 커널은 AES-GCM 암호화 알고리즘의 최적화된 구현으로 AES-NI와 함께 AVX 또는 AVX2를 사용할 수 있습니다.
- Linux 커널은 다른 여러 암호화 암호(Camelia, CAST5, CAST6, Sepent, Twofish, MORUS-1280 및 기타 원시)를 최적화하기 위해 AVX 또는 AVX2를 사용합니다.Poly1305, SHA-1, SHA-256, SHA-512, ChaCha20.
- OpenCL을 구현하는 휴대용 컴퓨팅 언어인 POCL은 가능하면 AVX, AVX2, AVX-512를 사용합니다.
- .NET 및.NET Framework 에서는, AVX, AVX2 를 사용할 수 있습니다.
System.Numerics.Vectors
네임스페이스. - .NET Core는 버전 2.1 이후 버전 3.0 이후를 통해 모든 AVX, AVX2 내장 기능을 직접 사용할 수 있습니다.
System.Runtime.Intrinsics.X86
네임스페이스. - EmEditor 19.0 이상에서는,[45] AVX2 를 사용해 처리 속도를 높입니다.
- 네이티브 인스트루먼트의 매시브 X 소프트 싱스는 AVX가 [46]필요합니다.
- Microsoft 팀은,[47] AVX2 의 지시에 따라서, 화상 채팅 참가자의 배후에 흐릿한 배경이나 커스텀 배경을 작성해, 백그라운드 노이즈를 [48]억제합니다.
- Pale Moon 커스텀 윈도 빌드는 AVX2의 사용으로 브라우징 속도를 크게 향상시킵니다.
- JSON 해석 라이브러리인 simdjson은 AVX2 및 AVX-512를 사용하여 디코딩 [49][50]속도를 향상시킵니다.
- Teseract OCR 엔진은 AVX, AVX2, AVX-512를 사용하여 문자 인식을 [51]가속화합니다.
다운클럭
AVX 명령어는 폭이 넓어 발열이 증가하므로 일부 인텔 프로세서는 이러한 명령어를 실행할 때 터보 부스트 주파수 제한을 줄일 수 있습니다.Skylake 및 그 파생 모델에서는 스로틀링이 세 가지 [52][53]레벨로 나뉩니다.
- L0(100%) :정상적인 터보 부스트 한계.
- L1(~85%까지):「AVX 부스트」한계.256비트 "heavy"(부동소수점 단위: FP 연산 및 정수 곱셈) 명령에 의해 소프트 트리거됩니다."라이트" (기타 모든) 512비트 명령에 의해 하드 트리거됩니다.
- L2(~60%)[dubious ] :「AVX-512 부스트」의 제한.512비트 헤비 명령에 의해 소프트 트리거됩니다.
주파수 전환은 부드럽거나 어려울 수 있습니다.하드 천이는 명령이 발견되면 즉시 주파수가 감소함을 의미하며 소프트 천이는 일치하는 명령의 임계값 수에 도달한 후에만 주파수가 감소함을 의미합니다.제한은 스레드 [52]단위입니다.
- L0(100%) :정상적인 터보 부스트 한계.
- L1(~97%) :512비트 명령에 의해 트리거되지만 싱글코어 부스트가 활성화되어 있는 경우에만 트리거되며, 여러 코어가 로드되어 있는 경우에는 트리거되지 않습니다.
Rocket Lake 프로세서는 벡터 [54]크기에 관계없이 벡터 명령을 실행해도 주파수 감소를 트리거하지 않습니다.단, 열이나 전력 제한에 도달하는 등 다른 이유로 다운클럭이 발생할 수 있습니다.
다운클럭이란 인텔 프로세서가 혼재된 워크로드에서 AVX를 사용하면 "순수한" 컨텍스트에서는 고속이지만 주파수 패널티가 발생할 수 있음을 의미합니다.광범위하고 무거운 명령을 사용하지 않도록 하면 이러한 경우에 미치는 영향을 최소화할 수 있습니다.AVX-512VL에서는 256비트 또는 128비트의 오퍼랜드를 사용할 수 있기 때문에 혼합 [55]부하에 적합한 디폴트입니다.
지원되는 프로세서와 잠금 해제된 프로세서의 경우 비율은 조정 가능하며 인텔의 오버클럭/튜닝 유틸리티 또는 BIOS(지원하는 경우)[56]를 통해 완전히 비활성화(0x로 설정)할 수 있습니다.
「 」를 참조해 주세요.
- 메모리 보호 확장
- Scalable Vector Extension for ARM - AVX-512와 유사한 새로운 벡터 명령 세트(VFP 및 NEON 지원)에 몇 가지 기능이 추가되어 있습니다.
레퍼런스
- ^ Kanter, David (September 25, 2010). "Intel's Sandy Bridge Microarchitecture". www.realworldtech.com. Retrieved February 17, 2018.
- ^ Hruska, Joel (October 24, 2011). "Analyzing Bulldozer: Why AMD's chip is so disappointing - Page 4 of 5 - ExtremeTech". ExtremeTech. Retrieved February 17, 2018.
- ^ a b c d e James Reinders (July 23, 2013), AVX-512 Instructions, Intel, retrieved August 20, 2013
- ^ "Intel Xeon Phi Processor 7210 (16GB, 1.30 GHz, 64 core) Product Specifications". Intel ARK (Product Specs). Retrieved March 16, 2018.
- ^ "14.9". Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF) (-051US ed.). Intel Corporation. p. 349. Retrieved August 23, 2014.
Memory arguments for most instructions with VEX prefix operate normally without causing #GP(0) on any byte-granularity alignment (unlike Legacy SSE instructions).
- ^ "i386 and x86-64 Options - Using the GNU Compiler Collection (GCC)". Retrieved February 9, 2014.
- ^ "The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers" (PDF). Retrieved October 17, 2016.
- ^ "Chess programming AVX2". Archived from the original on July 10, 2017. Retrieved October 17, 2016.
- ^ "Intel Offers Peek at Nehalem and Larrabee". ExtremeTech. March 17, 2008.
- ^ "Intel Core i7-3960X Processor Extreme Edition". Retrieved January 17, 2012.
- ^ a b c "Intel® Celeron® 6305 Processor (4M Cache, 1.80 GHz, with IPU) Product Specifications". ark.intel.com. Retrieved November 10, 2020.
- ^ "Does a Processor with AVX2 or AVX-512 Support AVX Instructions?". ark.intel.com. Retrieved April 27, 2022.
- ^ Dave Christie (May 7, 2009), Striking a balance, AMD Developer blogs, archived from the original on November 9, 2013, retrieved January 17, 2012
- ^ New "Bulldozer" and "Piledriver" Instructions (PDF), AMD, October 2012
- ^ "What's New - RAD Studio". docwiki.embarcadero.com. Retrieved September 17, 2021.
- ^ "YASM 0.7.0 Release Notes". yasm.tortall.net.
- ^ Add support for the extended FPU states on amd64, both for native 64bit and 32bit ABIs, svnweb.freebsd.org, January 21, 2012, retrieved January 22, 2012
- ^ "FreeBSD 9.1-RELEASE Announcement". Retrieved May 20, 2013.
- ^ x86: add linux kernel support for YMM state, retrieved July 13, 2009
- ^ Linux 2.6.30 - Linux Kernel Newbies, retrieved July 13, 2009
- ^ Twitter, retrieved June 23, 2010
- ^ Add support for saving/restoring FPU state using the XSAVE/XRSTOR., retrieved March 25, 2015
- ^ Floating-Point Support for 64-Bit Drivers, retrieved December 6, 2009
- ^ Haswell New Instruction Descriptions Now Available, Software.intel.com, retrieved January 17, 2012
- ^ a b c James Reinders (July 17, 2014). "Additional AVX-512 instructions". Intel. Retrieved August 3, 2014.
- ^ a b "Intel Architecture Instruction Set Extensions Programming Reference" (PDF). Intel. Retrieved January 29, 2014.
- ^ a b c d e f g "Intel® Architecture Instruction Set Extensions and Future Features Programming Reference". Intel. Retrieved October 16, 2017.
- ^ "Intel® Software Development Emulator Intel® Software". software.intel.com. Retrieved June 11, 2016.
- ^ Cutress, Ian; Frumusanu, Andrei. "The Intel 12th Gen Core i9-12900K Review: Hybrid Performance Brings Hybrid Complexity". AnandTech. Retrieved November 5, 2021.
- ^ "GCC 4.9 Release Series — Changes, New Features, and Fixes – GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. Retrieved April 3, 2017.
- ^ "LLVM 3.9 Release Notes — LLVM 3.9 documentation". releases.llvm.org. Retrieved April 3, 2017.
- ^ "Intel® Parallel Studio XE 2015 Composer Edition C++ Release Notes Intel® Software". software.intel.com. Retrieved April 3, 2017.
- ^ "Microsoft Visual Studio 2017 Supports Intel® AVX-512".
- ^ "Linux RAID". LWN. February 17, 2013. Archived from the original on April 15, 2013.
- ^ https://www.ixpug.org/documents/1520629330Jaros-IXPUG-CINECABlender5.pdf[베어 URL PDF]
- ^ "Improving OpenSSL Performance". May 26, 2015. Retrieved February 28, 2017.
- ^ "OpenSSL 3.0.0 release notes". September 7, 2021.
- ^ "Prime95 release notes". Retrieved July 10, 2022.
- ^ "dav1d: performance and completion of the first release". November 21, 2018. Retrieved November 22, 2018.
- ^ "dav1d 0.6.0 release notes". March 6, 2020.
- ^ "SVT-AV1 0.7.0 release notes". September 26, 2019.
- ^ "Einstein@Home Applications".
- ^ "FAQ, Helios". Helios. Retrieved July 5, 2021.
- ^ "Tensorflow 1.6".
- ^ 버전 19.0의 신기능– EmEditor (텍스트 에디터)
- ^ "MASSIVE X Requires AVX Compatible Processor". Native Instruments. Retrieved November 29, 2019.
- ^ "Hardware requirements for Microsoft Teams". Microsoft. Retrieved April 17, 2020.
- ^ "Reduce background noise in Teams meetings". Microsoft Support. Retrieved January 5, 2021.
- ^ Langdale, Geoff; Lemire, Daniel (2019). "Parsing Gigabytes of JSON per Second". The VLDB Journal. 28 (6): 941–960. arXiv:1902.08318. doi:10.1007/s00778-019-00578-5. S2CID 67856679.
- ^ "simdjson 2.1.0 release notes". June 30, 2022.
- ^ Larabel, Michael (July 7, 2022). "Tesseract OCR 5.2 Engine Finds Success With AVX-512F". Phoronix.
- ^ a b Lemire, Daniel. "AVX-512: when and how to use these new instructions". Daniel Lemire's blog.
- ^ BeeOnRope. "SIMD instructions lowering CPU frequency". Stack Overflow.
- ^ a b Downs, Travis. "Ice Lake AVX-512 Downclocking". Performance Matters blog.
- ^ "x86 - AVX 512 vs AVX2 performance for simple array processing loops". Stack Overflow.
- ^ "Intel® Extreme Tuning Utility (Intel® XTU) Guide to Overclocking : Advanced Tuning". Intel. Retrieved July 18, 2021.
See image in linked section, where AVX2 ratio has been set to 0.