AVX-512

AVX-512는 고급 벡터 확장의 256비트 SIMD 명령어 집합을 512비트로 확장한 것으로, 인텔이 2013년 7월에 x86 명령어 집합(명령어 집합 아키텍처 (ISA))으로 제안했으며, 2016년 인텔 제온 파이 x200(나이츠 랜딩)에 처음 구현되었고, 이후 많은 AMD 및 다른 인텔 CPU에 구현되었다(아래 목록 참조). AVX-512는 독립적으로 구현될 수 있는 여러 확장 기능으로 구성된다. 이 정책은 전체 명령어 블록을 구현해야 했던 이전 요구 사항에서 벗어난 것이다. 핵심 확장인 AVX-512F(AVX-512 재단)만이 모든 AVX-512 구현에 필요하다.

대부분의 256비트 명령어를 확장하는 것 외에도, 이 확장 기능은 새로운 데이터 변환, 스캐터(scatter) 작업 및 순열과 같은 다양한 새로운 연산을 도입한다. AVX 레지스터의 개수는 16개에서 32개로 증가하고, 새로운 "마스크 레지스터" 8개가 추가되어 명령어 결과의 변수 선택 및 혼합이 가능하다. 벡터 길이(VL) 확장 기능이 포함된 CPU(대부분의 AVX-512 지원 프로세서에 포함되어 있다.  참조)에서는 이러한 명령어를 128비트 및 256비트 벡터 크기에도 사용할 수 있다.

AVX-512는 인텔이 프로세서에 도입한 첫 번째 512비트 SIMD 명령어 집합이 아니다. 인텔의 라라비 프로젝트에서 파생된 1세대 제온 파이 코프로세서에서 사용된 이전 512비트 SIMD 명령어는 유사하지만 바이너리 호환성이 없으며 소스 호환성이 부분적으로만 있다.

AVX-512의 후속은 2023년 7월에 발표된 AVX10이다. AVX10은 지원되는 명령어 감지를 간소화하기 위해 명령어 집합 버전을 도입했으며, 후속 버전은 이전 버전의 모든 명령어를 포함한다. 초기 AVX10 사양 수정에서는 512비트 벡터 지원이 선택 사항으로 지정되어 E-코어에서 지원할 수 있도록 했다. 이후 수정에서는 인텔이 512비트 벡터를 필수로 지정하여 P-코어와 E-코어 모두에서 512비트 벡터를 지원할 의도를 나타냈다. 초기 버전 1의 AVX10은 AVX-512에 비해 새로운 명령어를 추가하지 않으며, 512비트 벡터를 지원하는 프로세서의 경우 AVX-512와 동일하다(사파이어 래피즈 프로세서에서 인텔이 지원하는 집합 기준). 이후 AVX10 버전에서는 새로운 기능을 도입할 예정이다.

 명령어 집합 
AVX-512 명령어 집합은 각각 고유한 CPUID 기능 비트를 갖는 여러 개별 집합으로 구성된다. 그러나 일반적으로 이러한 명령어 집합은 구현하는 프로세서 세대에 따라 그룹화된다.

F, CD, ER, PF:   제온 파이 x200 (나이츠 랜딩) 및 제온 스케일러블(스카이레이크 SP "펄리")에서 도입되었으며, 마지막 두 개(ER 및 PF)는 나이츠 랜딩 및 나이츠 밀에 특화되어 있다.
 AVX-512 재단(F)은 대부분의 32비트 및 64비트 기반 AVX 명령어를 EVEX 코딩 체계로 확장하여 512비트 레지스터, 연산 마스크, 매개변수 브로드캐스팅, 내장 반올림 및 예외 제어를 지원하며, 나이츠 랜딩 및 스카이레이크 제온에 의해 구현되었다.
 AVX-512 충돌 감지 명령어(CD)는 효율적인 충돌 감지를 통해 더 많은 루프가 벡터화될 수 있도록 하며, 나이츠 랜딩 및 스카이레이크 X에 의해 구현되었다.
 AVX-512 지수 및 역수 명령어(ER)는 초월함수 연산을 구현하는 데 도움이 되는 지수 및 역수 연산을 포함하며, 나이츠 랜딩에 의해 구현되었다.
 AVX-512 프리페치 명령어(PF)는 새로운 프리페치 기능을 포함하며, 나이츠 랜딩에 의해 구현되었다.

4VNNIW, 4FMAPS:   나이츠 밀에 도입되었으며 특화되어 있다.
 AVX-512 벡터 신경망 명령어 단어 가변 정밀도(4VNNIW) – 딥 러닝을 위한 벡터 명령어, 향상된 단어, 가변 정밀도.
 AVX-512 융합 곱셈 누적 압축 단정밀도(4FMAPS) – 딥 러닝을 위한 벡터 명령어, 부동 소수점, 단정밀도.

VL, DQ, BW:   스카이레이크-X/SP 및 캐넌 레이크에 도입되었다.
 AVX-512 벡터 길이 확장(VL)은 대부분의 AVX-512 연산을 XMM(128비트) 및 YMM(256비트) 레지스터에서도 작동하도록 확장한다.
 AVX-512 더블워드 및 쿼드워드 명령어(DQ)는 새로운 32비트 및 64비트 AVX-512 명령어를 추가한다.
 AVX-512 바이트 및 워드 명령어(BW)는 AVX-512를 8비트 및 16비트 정수 연산으로 확장한다.

IFMA, VBMI:   캐넌 레이크에 도입되었다.
 AVX-512 정수 융합 곱셈 덧셈 (IFMA) – 52비트 정밀도를 사용하는 정수의 융합 곱셈 덧셈.
 AVX-512 벡터 바이트 조작 명령어(VBMI)는 AVX-512BW에 없었던 벡터 바이트 순열 명령어를 추가한다.

VNNI:   캐스케이드 레이크에 도입되었다.
 AVX-512 벡터 신경망 명령어(VNNI) – 딥 러닝을 위한 벡터 명령어.

VPOPCNTDQ:   벡터 개수 명령어. 나이츠 밀 및 아이스레이크에 도입되었다.

VBMI2, BITALG:   아이스레이크에 도입되었다.
 AVX-512 벡터 바이트 조작 명령어 2(VBMI2) – 바이트/워드 로드, 저장 및 시프트와 연결.
 AVX-512 비트 알고리즘(BITALG) – VPOPCNTDQ를 확장하는 바이트/워드 비트 조작 명령어.

VP2INTERSECT:   타이거 레이크에 도입되었다.
 AVX-512 벡터 쌍 교차를 마스크 레지스터 쌍으로(VP2INTERSECT).

GFNI, VPCLMULQDQ, VAES:   아이스레이크에 도입되었다.
 이들은 AVX-512 기능 자체는 아니다. AVX-512와 함께, 이들은 EVEX 인코딩된 GFNI, PCLMULQDQ 및 AES 명령어 버전을 활성화한다.

 인코딩 및 기능 
AVX 및 AVX2에서 사용되는 VEX 접두사는 유연하지만, 인텔이 AVX-512에 추가하려 했던 기능을 위한 공간이 충분하지 않았다. 이로 인해 인텔은 EVEX라는 새로운 접두사를 정의하게 되었다.

VEX와 비교하여 EVEX는 다음과 같은 이점을 추가한다.
 32개의 512비트 레지스터를 허용하는 확장된 레지스터 인코딩.
 대부분의 AVX-512 명령어를 마스킹하기 위한 새로운 8개의 연산 마스크 레지스터 추가.
 자동으로 브로드캐스트를 수행하는 새로운 스칼라 메모리 모드 추가.
 각 명령어에 명시적인 반올림 제어를 위한 공간 추가.
 새로운 압축된 변위 메모리 주소 지정 방식 추가.

AVX-512의 확장된 레지스터, SIMD 폭 비트 및 연산 마스크 레지스터는 필수이며 OS의 모든 지원이 필요하다.

 SIMD 모드 
AVX-512 명령어는 성능 저하 없이 128/256비트 AVX/AVX2 명령어와 혼합되도록 설계되었다. 그러나 AVX-512VL 확장을 사용하면 AVX-512 명령어를 128/256비트 레지스터 XMM/YMM에서 사용할 수 있으므로 대부분의 SSE 및 AVX/AVX2 명령어는 EVEX 접두사로 인코딩된 새로운 AVX-512 버전을 가지고 있어 연산 마스크 및 추가 레지스터와 같은 새로운 기능에 액세스할 수 있다. AVX-256과 달리 새로운 명령어에는 새로운 니모닉이 없지만 AVX와 네임스페이스를 공유하므로 소스 코드에서 명령어의 VEX 및 EVEX 인코딩된 버전의 구분이 모호하다. AVX-512F는 32비트 및 64비트 값에서만 작동하므로 바이트 또는 워드에서 작동하는 SSE 및 AVX/AVX2 명령어는 AVX-512BW 확장(바이트 및 워드 지원)에서만 사용할 수 있다.

 이름 확장집합 레지스터 유형 레거시 SSE SSE–SSE4.2 xmm0–xmm15 단정밀도 부동소수점SSE2부터: 바이트, 워드, 더블워드, 쿼드워드 및 배정밀도 부동소수점 AVX-128 (VEX) AVX, AVX2 xmm0–xmm15 바이트, 워드, 더블워드, 쿼드워드, 단정밀도 부동소수점 및 배정밀도 부동소수점 AVX-256 (VEX) AVX, AVX2 ymm0–ymm15 단정밀도 부동소수점 및 배정밀도 부동소수점AVX2부터: 바이트, 워드, 더블워드, 쿼드워드 AVX-128 (EVEX) AVX-512VL xmm0–xmm31(k0–k7) 더블워드, 쿼드워드, 단정밀도 부동소수점 및 배정밀도 부동소수점AVX512BW 포함: 바이트 및 워드AVX512-FP16 포함: 하프 부동소수점 AVX-256 (EVEX)  AVX10/256 AVX-512VL ymm0–ymm31(k0–k7) 더블워드, 쿼드워드, 단정밀도 부동소수점 및 배정밀도 부동소수점AVX512BW 포함: 바이트 및 워드AVX512-FP16 포함: 하프 부동소수점   AVX10/512 AVX-512F (k0–k7) 더블워드, 쿼드워드, 단정밀도 부동소수점 및 배정밀도 부동소수점AVX512BW 포함: 바이트 및 워드AVX512-FP16 포함: 하프 부동소수점

 확장 레지스터 
 x64 AVX-512 레지스터 체계는 x64 AVX (YMM0–YMM15) 및 x64 SSE (XMM0–XMM15) 레지스터의 확장이다. 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

SIMD 레지스터 파일의 너비는 256비트에서 512비트로 증가했으며, 16개에서 총 32개의 레지스터 ZMM0–ZMM31로 확장되었다. 이 레지스터는 AVX 확장의 256비트 YMM 레지스터 및 스트리밍 SIMD 확장의 128비트 XMM 레지스터로 주소 지정할 수 있으며, 레거시 AVX 및 SSE 명령어는 EVEX 인코딩 형식을 사용할 때 추가 16개의 레지스터 XMM16-XMM31 및 YMM16-YMM31에서 작동하도록 확장될 수 있다.

 연산 마스크 레지스터 
AVX-512 벡터 명령어는 대상에 기록되는 값을 제어하기 위해 연산 마스크 레지스터를 지정할 수 있다. 명령어 인코딩은 이 필드에 대해 0-7을 지원하지만, 연산 마스크 레지스터 k1-k7(k0-k7 중)만 값 1-7에 해당하는 마스크로 사용할 수 있으며, 값 0은 연산 마스크 레지스터가 사용되지 않음을 나타내기 위해 예약되어 있다. 즉, 마스킹되지 않은 연산을 나타내기 위해 하드 코딩된 상수('k0' 대신)가 사용된다. 특별한 연산 마스크 레지스터 'k0'는 여전히 작동하는 유효한 레지스터이며, 연산 마스크 레지스터 조작 명령어에서 사용하거나 대상 연산 마스크 레지스터로 사용할 수 있다. 플래그는 연산 마스크 동작을 제어하며, 이는 "제로"로 설정되어 마스크에 의해 선택되지 않은 모든 것을 0으로 만들거나, "병합"으로 설정되어 선택되지 않은 모든 것을 그대로 둔다. 병합 동작은 블렌드 명령어와 동일하다.

연산 마스크 레지스터는 일반적으로 16비트 너비이지만, AVX-512BW 확장을 사용하면 최대 64비트까지 가능하다. 하지만 실제로 사용되는 비트 수는 마스킹된 명령어의 벡터 유형에 따라 달라진다. 32비트 단정밀도 또는 더블워드의 경우, 16비트가 512비트 레지스터의 16개 요소를 마스킹하는 데 사용된다. 배정밀도 및 쿼드워드의 경우 최대 8개의 마스크 비트가 사용된다.

연산 마스크 레지스터는 AVX-512에서 요소 너비가 없었던 몇 가지 비트 연산 명령어가 추가된 이유이다. 예를 들어, 비트 AND, OR 또는 128비트 셔플은 이제 최종 마스킹에서만 차이가 나는 더블워드 및 쿼드워드 변형으로 존재한다.

 새로운 연산 마스크 명령어 
연산 마스크 레지스터는 직접 작동하는 새로운 미니 확장 명령어 집합을 가지고 있다. 나머지 AVX-512 명령어와 달리, 이 명령어들은 모두 VEX 인코딩된다. 초기 연산 마스크 명령어는 모두 16비트(워드) 버전이다. AVX-512DQ에는 8 64비트 값의 마스킹 요구 사항을 더 잘 맞추기 위해 8비트(바이트) 버전이 추가되었고, AVX-512BW에는 최대 64 8비트 값을 마스킹할 수 있도록 32비트(더블) 및 64비트(쿼드) 버전이 추가되었다. KORTEST 및 KTEST 명령어는 마스크 레지스터를 기반으로 x86 플래그를 설정하는 데 사용할 수 있으므로 SIMD가 아닌 x86 분기 및 조건부 명령어와 함께 사용할 수 있다.

 명령어 확장집합 설명 KAND F 비트 논리 AND 마스크 KANDN F 비트 논리 AND NOT 마스크 KMOV F 마스크 레지스터 또는 범용 레지스터에서 이동 KUNPCK F 마스크 레지스터 언팩 KNOT F NOT 마스크 레지스터 KOR F 비트 논리 OR 마스크 KORTEST F OR 마스크 및 플래그 설정 KSHIFTL F 마스크 레지스터 왼쪽 시프트 KSHIFTR F 마스크 레지스터 오른쪽 시프트 KXNOR F 비트 논리 XNOR 마스크 KXOR F 비트 논리 XOR 마스크 KADD BW/DQ 두 마스크 추가 KTEST BW/DQ 비트 비교 및 플래그 설정

 AVX-512 재단의 새로운 명령어 
많은 AVX-512 명령어는 단순히 이전 SSE 또는 AVX 명령어의 EVEX 버전이다. 그러나 몇 가지 새로운 명령어가 있으며, 새로운 AVX-512 버전으로 대체된 이전 명령어가 있다. 새롭거나 대폭 수정된 명령어는 아래에 나열되어 있다. 이러한 재단 명령어에는 AVX-512VL 및 AVX-512BW의 확장 기능도 포함되어 있다. 이러한 확장 기능은 새로운 명령어가 아닌 이러한 명령어의 새로운 버전을 추가할 뿐이기 때문이다.

 마스크를 사용한 혼합 
SSE4의 블렌드 명령어에 EVEX 접두사가 붙은 버전은 없다. 대신 AVX-512는 마스크 레지스터를 선택기로 사용하는 새로운 블렌딩 명령어 집합을 가지고 있다. 아래의 일반적인 비교를 마스크로 변환하는 명령어와 함께, 이들은 XOP의 VPCMOV와 유사하게 일반적인 삼항 연산 또는 cmov를 구현하는 데 사용될 수 있다.

블렌딩은 EVEX 인코딩의 필수 부분이므로 이러한 명령어는 기본 이동 명령어로도 간주될 수 있다. 제로화 블렌드 모드를 사용하면 마스킹 명령어로도 사용할 수 있다.

 명령어 확장집합 설명 VBLENDMPD F 연산 마스크 제어를 사용하여 float64 벡터를 혼합 VBLENDMPS F 연산 마스크 제어를 사용하여 float32 벡터를 혼합 VPBLENDMD F 연산 마스크 제어를 사용하여 int32 벡터를 혼합 VPBLENDMQ F 연산 마스크 제어를 사용하여 int64 벡터를 혼합 VPBLENDMB BW 연산 마스크 제어를 사용하여 바이트 정수 벡터를 혼합 VPBLENDMW BW 연산 마스크 제어를 사용하여 워드 정수 벡터를 혼합

 마스크로 비교 
AVX-512F에는 네 가지 새로운 비교 명령어가 있다. 이들은 XOP 명령어와 유사하게 즉시 필드를 사용하여 8가지 다른 비교를 선택한다. 그러나 XOP 명령어와 달리 결과를 마스크 레지스터에 저장하고 처음에는 더블워드 및 쿼드워드 비교만 지원한다. AVX-512BW 확장은 바이트 및 워드 버전을 제공한다. 이 명령어에는 두 개의 마스크 레지스터를 지정할 수 있다는 점에 유의해야 한다. 하나는 쓰기 위한 대상이고 다른 하나는 일반 마스킹을 선언하기 위한 것이다.

 즉시-필드 비교 설명 0 EQ 같음 1 LT 미만 2 LE 이하 3 FALSE 0으로 설정 4 NEQ 같지 않음 5 NLT 이상 6 NLE 초과 7 TRUE 1로 설정

 명령어 확장집합 설명 VPCMPD, VPCMPUD F 부호 있는/없는 더블워드를 마스크로 비교 VPCMPQ, VPCMPUQ F 부호 있는/없는 쿼드워드를 마스크로 비교 VPCMPB, VPCMPUB BW 부호 있는/없는 바이트를 마스크로 비교 VPCMPW, VPCMPUW BW 부호 있는/없는 워드를 마스크로 비교

 논리적 마스크 설정 
마스크를 설정하는 마지막 방법은 논리적 마스크 설정을 사용하는 것이다. 이 명령어는 AND 또는 NAND를 수행한 다음 결과 값이 0 또는 0이 아닌지를 기반으로 대상 연산 마스크를 설정한다. 비교 명령어와 마찬가지로 이 명령어는 두 개의 연산 마스크 레지스터를 사용한다. 하나는 대상이고 다른 하나는 일반 연산 마스크이다.

 명령어 확장집합 설명 VPTESTMD, VPTESTMQ F 32 또는 64비트 정수의 논리적 AND 및 마스크 설정. VPTESTNMD, VPTESTNMQ F 32 또는 64비트 정수의 논리적 NAND 및 마스크 설정. VPTESTMB, VPTESTMW BW 8 또는 16비트 정수의 논리적 AND 및 마스크 설정. VPTESTNMB, VPTESTNMW BW 8 또는 16비트 정수의 논리적 NAND 및 마스크 설정.

 압축 및 확장 
압축 및 확장 명령어는 APL의 동일한 이름의 연산과 일치한다. 이들은 다른 AVX-512 명령어와 약간 다른 방식으로 연산 마스크를 사용한다. 압축은 마스크에 표시된 값만 저장하지만, 표시되지 않은 값에 대한 공간을 건너뛰고 예약하지 않고 압축하여 저장한다. 확장은 반대 방식으로 작동하며, 마스크에 표시된 만큼의 값을 로드한 다음 선택된 위치로 확산시킨다.

 명령어 설명 VCOMPRESSPD, VCOMPRESSPS 희소 압축 배정밀도/단정밀도 부동 소수점 값을 밀집 메모리에 저장 VPCOMPRESSD, VPCOMPRESSQ 희소 압축 더블워드/쿼드워드 정수 값을 밀집 메모리/레지스터에 저장 VEXPANDPD, VEXPANDPS 밀집 메모리에서 희소 압축 배정밀도/단정밀도 부동 소수점 값을 로드 VPEXPANDD, VPEXPANDQ 밀집 메모리/레지스터에서 희소 압축 더블워드/쿼드워드 정수 값을 로드

 순열 
완전한 두 입력 순열을 위한 새로운 순열 명령어 집합이 추가되었다. 이들은 모두 세 개의 인수, 두 개의 소스 레지스터와 하나의 인덱스를 사용한다. 결과는 첫 번째 소스 레지스터 또는 인덱스 레지스터를 덮어쓰는 방식으로 출력된다. AVX-512BW는 명령어를 16비트(워드) 버전으로 확장하며, AVX-512_VBMI 확장은 명령어의 바이트 버전을 정의한다.

 명령어 확장집합 설명 VPERMB VBMI 압축된 바이트 요소 순열. VPERMW BW 압축된 워드 요소 순열. VPERMT2B VBMI 첫 번째 소스를 덮어쓰는 전체 바이트 순열. VPERMT2W BW 첫 번째 소스를 덮어쓰는 전체 워드 순열. VPERMI2PD, VPERMI2PS F 인덱스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열. VPERMI2D, VPERMI2Q F 인덱스를 덮어쓰는 전체 더블워드/쿼드워드 순열. VPERMI2B VBMI 인덱스를 덮어쓰는 전체 바이트 순열. VPERMI2W BW 인덱스를 덮어쓰는 전체 워드 순열. VPERMT2PS, VPERMT2PD F 첫 번째 소스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열. VPERMT2D, VPERMT2Q F 첫 번째 소스를 덮어쓰는 전체 더블워드/쿼드워드 순열. VSHUFF32x4, VSHUFF64x2,VSHUFI32x4, VSHUFI64x2 F 압축된 128비트 라인 네 개 셔플. VPMULTISHIFTQB VBMI 쿼드워드 소스에서 압축된 정렬되지 않은 바이트 선택.

 비트와이즈 삼항 논리 
추가된 두 개의 새로운 명령어는 세 개의 입력 사이에서 가능한 모든 비트와이즈(bit-wise) 연산을 논리적으로 구현할 수 있다. 이들은 세 개의 레지스터를 입력으로 받고 8비트 즉시 필드를 사용한다. 출력의 각 비트는 세 개의 해당 입력 비트를 찾아 8비트 즉시의 8개 위치 중 하나를 선택하는 방식으로 생성된다. 세 개의 비트를 사용하여 가능한 조합은 8개뿐이므로 가능한 모든 3개 입력 비트와이즈 연산을 수행할 수 있다.
이들은 AVX-512F의 유일한 비트와이즈 벡터 명령어이다. AVX-512DQ에서는 두 소스 SSE 및 AVX 비트와이즈 벡터 명령어 AND, ANDN, OR 및 XOR의 EVEX 버전이 추가되었다.

더블워드 및 쿼드워드 버전의 차이는 연산 마스크의 적용뿐이다.

 명령어 설명 VPTERNLOGD, VPTERNLOGQ 비트와이즈 삼항 논리

+ 비트와이즈 삼항 논리 진리표 A0 A1 A2 더블 AND(0x80) 더블 OR(0xFE) 비트와이즈 블렌드(0xCA) 0  0  0  0  0  0 0  0  1  0  1  1 0  1  0  0  1  0 0  1  1  0  1  1 1  0  0  0  1  0 1  0  1  0  1  0 1  1  0  0  1  1 1  1  1  1  1  1

 변환 
많은 변환 또는 이동 명령어가 추가되었다. 이들은 SSE2에서 사용할 수 있는 변환 명령어 집합을 완성한다.
 명령어 확장집합 설명 VPMOVQD, VPMOVSQD, VPMOVUSQD,VPMOVQW, VPMOVSQW, VPMOVUSQW,VPMOVQB, VPMOVSQB, VPMOVUSQB,VPMOVDW, VPMOVSDW, VPMOVUSDW,VPMOVDB, VPMOVSDB, VPMOVUSDB F 쿼드워드 또는 더블워드를 더블워드, 워드 또는 바이트로 다운 변환; 포화되지 않은, 포화된 또는 부호 없는 포화된. SSE4.1의 부호/제로 확장 명령어의 역. VPMOVWB, VPMOVSWB, VPMOVUSWB BW 워드를 바이트로 다운 변환; 포화되지 않은, 포화된 또는 부호 없는 포화된. VCVTPS2UDQ, VCVTPD2UDQ,VCVTTPS2UDQ, VCVTTPD2UDQ F 잘림 유무에 관계없이 변환, 압축된 단정밀도 또는 배정밀도 부동 소수점을 압축된 부호 없는 더블워드 정수로. VCVTSS2USI, VCVTSD2USI,VCVTTSS2USI, VCVTTSD2USI F 잘림 유무에 관계없이 변환, 스칼라 단정밀도 또는 배정밀도 부동 소수점을 부호 없는 더블워드 정수로. VCVTPS2QQ, VCVTPD2QQ,VCVTPS2UQQ, VCVTPD2UQQ,VCVTTPS2QQ, VCVTTPD2QQ,VCVTTPS2UQQ, VCVTTPD2UQQ DQ 잘림 유무에 관계없이 변환, 압축된 단정밀도 또는 배정밀도 부동 소수점을 압축된 부호 있는 또는 부호 없는 쿼드워드 정수로. VCVTUDQ2PS, VCVTUDQ2PD F 압축된 부호 없는 더블워드 정수를 압축된 단정밀도 또는 배정밀도 부동 소수점으로 변환. VCVTUSI2PS, VCVTUSI2PD F 스칼라 부호 없는 더블워드 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환. VCVTUSI2SD, VCVTUSI2SS F 스칼라 부호 없는 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환. VCVTUQQ2PS, VCVTUQQ2PD DQ 압축된 부호 없는 쿼드워드 정수를 압축된 단정밀도 또는 배정밀도 부동 소수점으로 변환. VCVTQQ2PD, VCVTQQ2PS F 압축된 쿼드워드 정수를 압축된 단정밀도 또는 배정밀도 부동 소수점으로 변환.

 부동 소수점 분해 
AVX-512F의 고유한 새로운 기능 중에는 부동 소수점 값을 분해하고 특수 부동 소수점 값을 처리하는 명령어가 포함되어 있다. 이러한 방법은 완전히 새로운 것이므로 스칼라 버전도 존재한다.

 명령어 설명 VGETEXPPD, VGETEXPPS 압축된 fp 값의 지수 성분을 fp 값으로 변환 VGETEXPSD, VGETEXPSS 스칼라 fp 값의 지수를 fp 값으로 변환 VGETMANTPD, VGETMANTPS float32/float64 벡터에서 정규화된 가수의 벡터 추출 VGETMANTSD, VGETMANTSS float32/float64 스칼라에서 정규화된 가수의 float32/float64 추출 VFIXUPIMMPD, VFIXUPIMMPS 특수 압축 float32/float64 값 수정 VFIXUPIMMSD, VFIXUPIMMSS 특수 스칼라 float32/float64 값 수정

 부동 소수점 산술 
이것은 새로운 부동 소수점 방법의 두 번째 집합으로, 새로운 스케일링과 역수 및 제곱근 역수의 근사 계산이 포함되어 있다. 근사 역수 명령어는 상대 오차가 최대 2−14임을 보장한다.

 명령어 설명 VRCP14PD, VRCP14PS 압축된 float32/float64 값의 근사 역수 계산 VRCP14SD, VRCP14SS 스칼라 float32/float64 값의 근사 역수 계산 VRNDSCALEPS, VRNDSCALEPD 압축된 float32/float64 값을 주어진 소수부 비트 수를 포함하도록 반올림 VRNDSCALESS, VRNDSCALESD 스칼라 float32/float64 값을 주어진 소수부 비트 수를 포함하도록 반올림 VRSQRT14PD, VRSQRT14PS 압축된 float32/float64 값의 제곱근의 근사 역수 계산 VRSQRT14SD, VRSQRT14SS 스칼라 float32/float64 값의 제곱근의 근사 역수 계산 VSCALEFPS, VSCALEFPD 압축된 float32/float64 값을 float32/float64 값으로 스케일링 VSCALEFSS, VSCALEFSD 스칼라 float32/float64 값을 float32/float64 값으로 스케일링

 브로드캐스트 
 명령어 확장집합 설명 VBROADCASTSS, VBROADCASTSD F, VL 단정밀도/배정밀도 부동 소수점 값 브로드캐스트 VPBROADCASTB, VPBROADCASTW,VPBROADCASTD, VPBROADCASTQ F, VL, DQ, BW바이트/워드/더블워드/쿼드워드 정수 값 브로드캐스트VBROADCASTI32X2, VBROADCASTI64X2,VBROADCASTI32X4, VBROADCASTI32X8,VBROADCASTI64X4 F, VL, DQ, BW두 개 또는 네 개의 더블워드/쿼드워드 정수 값 브로드캐스트

 기타 
 명령어 확장집합 설명 VALIGND, VALIGNQ F, VL 더블워드 또는 쿼드워드 벡터 정렬 VDBPSADBW BW 부호 없는 바이트에 대한 더블 블록 압축 절대 차이 합계 (SAD) VPABSQ F 압축된 절대값 쿼드워드 VPMAXSQ, VPMAXUQ F 압축된 부호 있는/없는 쿼드워드의 최댓값 VPMINSQ, VPMINUQ F 압축된 부호 있는/없는 쿼드워드의 최솟값 VPROLD, VPROLVD, VPROLQ, VPROLVQ,VPRORD, VPRORVD, VPRORQ, VPRORVQ F 비트와이즈 왼쪽 또는 오른쪽 회전 VPSCATTERDD, VPSCATTERDQ,VPSCATTERQD, VPSCATTERQQ F 부호 있는 더블워드 및 쿼드워드 인덱스를 사용하여 압축된 더블워드/쿼드워드 스캐터 VSCATTERDPS, VSCATTERDPD,VSCATTERQPS, VSCATTERQPD F 부호 있는 더블워드 및 쿼드워드 인덱스를 사용하여 압축된 float32/float64 스캐터

 집합별 새로운 명령어 
 충돌 감지 
AVX-512 충돌 감지(AVX-512CD) 명령어는 일반적으로 안전하게 벡터화할 수 없는 루프에서 요소의 충돌 없는 부분집합을 효율적으로 계산하는 데 도움이 되도록 설계되었다.

 명령어 이름 설명 VPCONFLICTD,VPCONFLICTQ 압축된 더블워드 또는 쿼드워드 값 벡터 내 충돌 감지 첫 번째 소스의 각 요소를 두 번째 소스의 동일하거나 이전 위치의 모든 요소와 비교하고 결과의 비트 벡터를 형성한다. VPLZCNTD,VPLZCNTQ 압축된 더블워드 또는 쿼드워드 값의 선행 0 비트 수 세기 벡터화된 LZCNT 명령어 VPBROADCASTMB2Q,VPBROADCASTMW2D 마스크를 벡터 레지스터로 브로드캐스트 8비트 마스크를 쿼드워드 벡터로 또는 16비트 마스크를 더블워드 벡터로

 지수 및 역수 
AVX-512 지수 및 역수(AVX-512ER) 명령어는 AVX-512 재단에 있는 것보다 더 정확한 근사 역수 명령어를 포함한다. 상대 오차는 최대 2−28이다. 또한 상대 오차가 최대 2−23인 두 가지 새로운 지수 함수를 포함한다.

 명령어 설명 VEXP2PD, VEXP2PS 압축된 단정밀도 또는 배정밀도 부동 소수점 값의 근사 지수 2x 계산 VRCP28PD, VRCP28PS 압축된 단정밀도 또는 배정밀도 부동 소수점 값의 근사 역수 계산 VRCP28SD, VRCP28SS 스칼라 단정밀도 또는 배정밀도 부동 소수점 값의 근사 역수 계산 VRSQRT28PD, VRSQRT28PS 압축된 단정밀도 또는 배정밀도 부동 소수점 값의 제곱근의 근사 역수 계산 VRSQRT28SD, VRSQRT28SS 스칼라 단정밀도 또는 배정밀도 부동 소수점 값의 제곱근의 근사 역수 계산

 프리페치 
AVX-512 프리페치(AVX-512PF) 명령어는 AVX2 및 AVX-512에 도입된 새로운 스캐터 및 gather 기능을 위한 새로운 프리페치 연산을 포함한다. T0 프리페치는 레벨 1 캐시로 프리페치하는 것을 의미하고 T1은 레벨 2 캐시로 프리페치하는 것을 의미한다.

 명령어 설명 VGATHERPF0DPS, VGATHERPF0QPS,VGATHERPF0DPD, VGATHERPF0QPD 부호 있는 dword/qword 인덱스를 사용하여 opmask k1 및 T0 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치 프리페치. VGATHERPF1DPS, VGATHERPF1QPS,VGATHERPF1DPD, VGATHERPF1QPD 부호 있는 dword/qword 인덱스를 사용하여 opmask k1 및 T1 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치 프리페치. VSCATTERPF0DPS, VSCATTERPF0QPS,VSCATTERPF0DPD, VSCATTERPF0QPD 부호 있는 dword/qword 인덱스를 사용하여 writemask k1 및 T0 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치 프리페치 (쓰기 의도 포함). VSCATTERPF1DPS, VSCATTERPF1QPS,VSCATTERPF1DPD, VSCATTERPF1QPD 부호 있는 dword/qword 인덱스를 사용하여 writemask k1 및 T1 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치 프리페치 (쓰기 의도 포함).

 4FMAPS 및 4VNNIW 
두 명령어 집합은 여러 번의 처리 반복을 수행한다. 이들은 일반적으로 Xeon Phi 제품에서만 발견된다.

 명령어 확장집합 설명 V4FMADDPS,V4FMADDSS 4FMAPS 압축된/스칼라 단정밀도 부동 소수점 융합 곱셈 덧셈 (4회 반복) V4FNMADDPS,V4FNMADDSS 4FMAPS 압축된/스칼라 단정밀도 부동 소수점 융합 곱셈 덧셈 및 부정 (4회 반복) VP4DPWSSD 4VNNIW 부호 있는 워드와 더블 워드 누적의 점곱 (4회 반복) VP4DPWSSDS 4VNNIW 부호 있는 워드와 더블 워드 누적 및 포화의 점곱 (4회 반복)

 BW, DQ 및 VBMI 
AVX-512DQ는 새로운 더블워드 및 쿼드워드 명령어를 추가한다. AVX-512BW는 동일한 명령어의 바이트 및 워드 버전을 추가하고, AVX-512F의 더블워드/쿼드워드 명령어의 바이트 및 워드 버전을 추가한다. AVX-512BW에서 워드 형식만 얻는 몇 가지 명령어는 AVX-512_VBMI 확장에서 바이트 형식을 얻는다(VPERMB, VPERMI2B, VPERMT2B, VPMULTISHIFTQB).

마스크 명령어 집합에 두 개의 새로운 명령어가 추가되었다: KADD 및 KTEST (AVX-512DQ에는 B 및 W 형식, AVX-512BW에는 D 및 Q 형식). 워드 형식만 있던 나머지 마스크 명령어는 AVX-512DQ에서 바이트 형식, AVX-512BW에서 더블워드/쿼드워드 형식을 얻었다. KUNPCKBW는 AVX-512BW에 의해 KUNPCKWD 및 KUNPCKDQ로 확장되었다.

AVX-512DQ에 의해 추가된 명령어 중에는 AVX-512F에서 AVX-512 버전을 얻지 못한 몇 가지 SSE 및 AVX 명령어가 포함되어 있다. 이 중에는 모든 두 입력 비트와이즈 명령어 및 정수 추출/삽입 명령어가 있다.

완전히 새로운 명령어는 아래에 설명되어 있다.

 부동 소수점 명령어 
세 가지 새로운 부동 소수점 연산이 도입되었다. 이들은 AVX-512뿐만 아니라 새로운 것이므로 압축/SIMD 및 스칼라 버전 모두 존재한다.

VFPCLASS 명령어는 부동 소수점 값이 8가지 특수 부동 소수점 값 중 하나인지 테스트하며, 8가지 값 중 어떤 값이 출력 마스크 레지스터의 비트를 트리거할지는 즉시 필드의 값에 의해 제어된다. VRANGE 명령어는 즉시 필드의 값에 따라 최소 또는 최대 연산을 수행하며, 이는 연산이 절대적인지 여부와 부호가 별도로 처리되는 방식을 제어할 수 있다. VREDUCE 명령어는 단일 소스에서 작동하며, 소수점 부분에 즉시 필드에 지정된 비트 수를 더한 소스 값의 정수 부분을 뺀다.

 명령어 확장집합 설명 VFPCLASSPS, VFPCLASSPD DQ 압축된 단정밀도 및 배정밀도 부동 소수점 값의 유형 테스트. VFPCLASSSS, VFPCLASSSD DQ 스칼라 단정밀도 및 배정밀도 부동 소수점 값의 유형 테스트. VRANGEPS, VRANGEPD DQ 압축된 부동 소수점 값의 범위 제한 계산. VRANGESS, VRANGESD DQ 스칼라 부동 소수점 값의 범위 제한 계산. VREDUCEPS, VREDUCEPD DQ 압축된 부동 소수점 값에 대한 감소 변환 수행. VREDUCESS, VREDUCESD DQ 스칼라 부동 소수점 값에 대한 감소 변환 수행.

 기타 명령어 
 명령어 확장집합 설명 VPMOVM2D, VPMOVM2Q DQ 마스크 레지스터를 더블워드 또는 쿼드워드 벡터 레지스터로 변환. VPMOVM2B, VPMOVM2W BW 마스크 레지스터를 바이트 또는 워드 벡터 레지스터로 변환. VPMOVD2M, VPMOVQ2M DQ 더블워드 또는 쿼드워드 벡터 레지스터를 마스크 레지스터로 변환. VPMOVB2M, VPMOVW2M BW 바이트 또는 워드 벡터 레지스터를 마스크 레지스터로 변환. VPMULLQ DQ 압축된 쿼드워드 곱셈 낮은 결과 저장. VPMULLD의 쿼드워드 버전.

 VBMI2 
VPCOMPRESS 및 VPEXPAND를 바이트 및 워드 변형으로 확장. 시프트 명령어는 새로운 명령어이다.

 명령어 설명 VPCOMPRESSB, VPCOMPRESSW 희소 압축된 바이트/워드 정수 값을 밀집된 메모리/레지스터에 저장 VPEXPANDB, VPEXPANDW 밀집된 메모리/레지스터에서 희소 압축된 바이트/워드 정수 값을 로드 VPSHLD 압축된 데이터를 왼쪽으로 논리적으로 연결하고 시프트 VPSHLDV 압축된 데이터를 왼쪽으로 논리적으로 연결하고 변수 시프트 VPSHRD 압축된 데이터를 오른쪽으로 논리적으로 연결하고 시프트 VPSHRDV 압축된 데이터를 오른쪽으로 논리적으로 연결하고 변수 시프트

 VNNI 
벡터 신경망 명령어: AVX512-VNNI는 아래 설명된 EVEX 코드화된 명령어를 추가한다. AVX-512F를 사용하면 이 명령어는 512비트 벡터에서 작동할 수 있으며, AVX-512VL은 128비트 및 256비트 벡터에 대한 지원을 추가한다.

이후 AVX-VNNI 확장은 이 명령어에 VEX 인코딩을 추가하여 128비트 또는 256비트 벡터에서만 작동할 수 있도록 한다. AVX-VNNI는 AVX-512 제품군의 일부가 아니며 AVX-512F를 요구하지 않고 독립적으로 구현될 수 있다.

 명령어 설명 VPDPBUSD 부호 없는 및 부호 있는 바이트 곱셈 및 추가 VPDPBUSDS 포화된 부호 없는 및 부호 있는 바이트 곱셈 및 추가 VPDPWSSD 부호 있는 워드 정수 곱셈 및 추가 VPDPWSSDS 포화된 워드 정수 곱셈 및 추가

 IFMA 
정수 융합 곱셈-덧셈 명령어. AVX512-IFMA는 아래 설명된 EVEX 코드화된 명령어를 추가한다.

별도의 AVX-IFMA 명령어 집합 확장은 이 명령어의 VEX 인코딩을 정의한다. 이 확장은 AVX-512 제품군의 일부가 아니며 독립적으로 구현될 수 있다.

 명령어 확장집합 설명 VPMADD52LUQ IFMA 부호 없는 52비트 정수 곱셈 및 낮은 52비트 곱을 64비트 누적기에 추가 VPMADD52HUQ IFMA 부호 없는 52비트 정수 곱셈 및 높은 52비트 곱을 64비트 누적기에 추가

 VPOPCNTDQ 및 BITALG 
 명령어 확장 집합 설명 VPOPCNTD, VPOPCNTQ VPOPCNTDQ 더블워드/쿼드워드에서 1로 설정된 비트 수 반환 VPOPCNTB, VPOPCNTW BITALG 바이트/워드에서 1로 설정된 비트 수 반환 VPSHUFBITQMB BITALG 바이트 인덱스를 사용하여 쿼드워드 요소에서 마스크로 비트 셔플

 VP2INTERSECT 
 명령어 확장 집합 설명 VP2INTERSECTD,VP2INTERSECTQ VP2INTERSECT 더블워드/쿼드워드 간의 교차를 마스크 레지스터 쌍으로 계산

 GFNI 
갈루아 체의 새로운 명령어는 암호화에 유용하다. 이는 AES, 카멜리아, SM4에서 사용되는 것과 같은 리옌달 스타일 S-박스를 구현하는 데 사용될 수 있기 때문이다. 이러한 명령어는 네트워킹 및 신호 처리에 대한 비트 조작에도 사용될 수 있다.

GFNI는 독립 실행형 명령어 집합 확장이며 AVX 또는 AVX-512와 별도로 활성화될 수 있다. CPU에서 AVX 및 AVX-512F 지원이 표시되는지에 따라 GFNI 지원은 128, 256 또는 512비트 벡터에서 작동하는 레거시(SSE), VEX 또는 EVEX 코드화된 명령어를 활성화한다.

 명령어 설명 VGF2P8AFFINEINVQB 갈루아 체 아핀 변환 역변환 VGF2P8AFFINEQB 갈루아 체 아핀 변환 VGF2P8MULB 갈루아 체 바이트 곱셈

 VPCLMULQDQ 
AVX-512F가 포함된 VPCLMULQDQ는 PCLMULQDQ 명령어의 EVEX 인코딩된 512비트 버전을 추가한다. AVX-512VL을 사용하면 EVEX 인코딩된 256비트 및 128비트 버전을 추가한다. VPCLMULQDQ 단독으로(즉, 비-AVX512 CPU에서)는 VEX 인코딩된 256비트 버전만 추가한다. (VEX 인코딩된 128비트 버전의 가용성은 다른 CPUID 비트인 PCLMULQDQ 및 AVX에 의해 표시된다.) 128비트보다 넓은 명령어 변형은 입력 레지스터의 각 128비트 부분에 대해 동일한 연산을 수행하지만, 서로 다른 128비트 필드에서 쿼드워드를 선택하도록 확장하지는 않는다(imm8 피연산자의 의미는 동일하다. 128비트 필드의 낮은 또는 높은 쿼드워드가 선택된다).

 명령어 설명 VPCLMULQDQ 캐리 없는 쿼드워드 곱셈

 VAES 

VEX 및 EVEX 인코딩된 AES 명령어. 128비트보다 넓은 명령어 변형은 입력 레지스터의 각 128비트 부분에 대해 동일한 연산을 수행한다. VEX 버전은 AVX-512 지원 없이 사용할 수 있다.

 명령어 설명 VAESDEC AES 복호화 흐름의 한 라운드 수행 VAESDECLAST AES 복호화 흐름의 마지막 라운드 수행 VAESENC AES 암호화 흐름의 한 라운드 수행 VAESENCLAST AES 암호화 흐름의 마지막 라운드 수행

 BF16 
Bfloat16 숫자에 대한 AI 가속 명령어.

 명령어 설명 VCVTNE2PS2BF16 압축된 단정밀도 숫자 두 벡터를 압축된 Bfloat16 숫자 한 벡터로 변환 VCVTNEPS2BF16 압축된 단정밀도 숫자 한 벡터를 압축된 Bfloat16 숫자 한 벡터로 변환 VDPBF16PS 두 Bfloat16 쌍의 점곱 계산 및 결과를 압축된 단정밀도 숫자 하나에 누적

 FP16 
이전 F16C 명령어 집합의 확장으로, binary16 부동 소수점 숫자(FP16, float16 또는 하프 정밀도 부동 소수점 숫자로도 알려짐)에 대한 포괄적인 지원을 추가한다. 새로운 명령어는 이전에 단정밀도 및 배정밀도 부동 소수점 숫자에 대해 사용할 수 있었던 대부분의 연산을 구현하며, 새로운 복소수 명령어 및 변환 명령어 또한 도입한다. 스칼라 및 압축된 연산이 지원된다.

단정밀도 및 배정밀도 형식 명령어와 달리, 하프 정밀도 피연산자는 조건부로 0으로 플러시되지 않거나(FTZ) 조건부로 0으로 취급되지 않는다(DAZ) MXCSR 설정에 기반한다. 비정규 값은 하드웨어에 의해 전체 속도로 처리되어 FP16 숫자의 전체 동적 범위를 사용하는 것을 용이하게 한다. FP32 및 FP64 숫자를 생성하는 명령어는 여전히 MXCSR.FTZ 비트를 따른다.

 산술 명령어 
 명령어 설명 VADDPH, VADDSH 압축된/스칼라 FP16 숫자 추가. VSUBPH, VSUBSH 압축된/스칼라 FP16 숫자 빼기. VMULPH, VMULSH 압축된/스칼라 FP16 숫자 곱셈. VDIVPH, VDIVSH 압축된/스칼라 FP16 숫자 나누기. VSQRTPH, VSQRTSH 압축된/스칼라 FP16 숫자의 제곱근 계산. VFMADD{132, 213, 231}PH,VFMADD{132, 213, 231}SH 압축된/스칼라 FP16 숫자 곱셈-덧셈. VFNMADD{132, 213, 231}PH,VFNMADD{132, 213, 231}SH 압축된/스칼라 FP16 숫자 곱셈-덧셈 및 부정. VFMSUB{132, 213, 231}PH,VFMSUB{132, 213, 231}SH 압축된/스칼라 FP16 숫자 곱셈-빼기. VFNMSUB{132, 213, 231}PH,VFNMSUB{132, 213, 231}SH 압축된/스칼라 FP16 숫자 곱셈-빼기 및 부정. VFMADDSUB{132, 213, 231}PH 압축된 FP16 숫자 곱셈-덧셈 (홀수 벡터 요소) 또는 곱셈-빼기 (짝수 벡터 요소).  압축된 FP16 숫자 곱셈-빼기 (홀수 벡터 요소) 또는 곱셈-덧셈 (짝수 벡터 요소). VREDUCEPH, VREDUCESH 압축된/스칼라 FP16 숫자의 감소 변환 수행. VRNDSCALEPH, VRNDSCALESH 압축된/스칼라 FP16 숫자를 주어진 소수부 비트 수로 반올림. VSCALEFPH, VSCALEFSH 압축된/스칼라 FP16 숫자를 2의 거듭제곱으로 곱하여 스케일링.

 복소수 산술 명령어 
 명령어 설명 VFMULCPH, VFMULCSH 압축된/스칼라 복소수 FP16 숫자 곱셈. VFCMULCPH, VFCMULCSH 압축된/스칼라 복소수 FP16 숫자 곱셈. 연산의 복소수 공액 형태. VFMADDCPH, VFMADDCSH 압축된/스칼라 복소수 FP16 숫자 곱셈-덧셈. VFCMADDCPH, VFCMADDCSH 압축된/스칼라 복소수 FP16 숫자 곱셈-덧셈. 연산의 복소수 공액 형태.

 근사 역수 명령어 
 명령어 설명 VRCPPH, VRCPSH 압축된/스칼라 FP16 숫자의 근사 역수 계산. 근사값의 최대 상대 오차는  미만이다. VRSQRTPH, VRSQRTSH 압축된/스칼라 FP16 숫자의 근사 제곱근 역수 계산. 근사값의 최대 상대 오차는 2−14 미만이다.

 비교 명령어 
 명령어 설명 VCMPPH, VCMPSH 압축된/스칼라 FP16 숫자 비교 및 결과를 마스크 레지스터에 저장. VCOMISH 스칼라 FP16 숫자 비교 및 결과를 플래그 레지스터에 저장. 소스 피연산자가 QNaN 또는 SNaN이면 예외를 신호한다. VUCOMISH 스칼라 FP16 숫자 비교 및 결과를 플래그 레지스터에 저장. 소스 피연산자가 SNaN인 경우에만 예외를 신호한다. VMAXPH, VMAXSH 소스 압축된/스칼라 FP16 숫자의 각 수직 쌍의 최댓값 선택. VMINPH, VMINSH 소스 압축된/스칼라 FP16 숫자의 각 수직 쌍의 최솟값 선택. VFPCLASSPH, VFPCLASSSH 압축된/스칼라 FP16 숫자를 특수 범주(NaN, 무한대, 음의 0 등)로 테스트하고 결과를 마스크 레지스터에 저장.

 변환 명령어 
 명령어 설명 VCVTW2PH 압축된 부호 있는 16비트 정수를 FP16 숫자로 변환. VCVTUW2PH 압축된 부호 없는 16비트 정수를 FP16 숫자로 변환. VCVTDQ2PH 압축된 부호 있는 32비트 정수를 FP16 숫자로 변환. VCVTUDQ2PH 압축된 부호 없는 32비트 정수를 FP16 숫자로 변환. VCVTQQ2PH 압축된 부호 있는 64비트 정수를 FP16 숫자로 변환. VCVTUQQ2PH 압축된 부호 없는 64비트 정수를 FP16 숫자로 변환. VCVTPS2PHX 압축된 FP32 숫자를 FP16 숫자로 변환. F16C의 VCVTPS2PH와 달리, VCVTPS2PHX는 브로드캐스팅도 지원하는 다른 인코딩을 가지고 있다. VCVTPD2PH 압축된 FP64 숫자를 FP16 숫자로 변환. VCVTSI2SH 스칼라 부호 있는 32비트 또는 64비트 정수를 FP16 숫자로 변환. VCVTUSI2SH 스칼라 부호 없는 32비트 또는 64비트 정수를 FP16 숫자로 변환. VCVTSS2SH 스칼라 FP32 숫자를 FP16 숫자로 변환. VCVTSD2SH 스칼라 FP64 숫자를 FP16 숫자로 변환. VCVTPH2W, VCVTTPH2W 압축된 FP16 숫자를 부호 있는 16비트 정수로 변환. VCVTPH2W는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2W는 0으로 반올림한다. VCVTPH2UW, VCVTTPH2UW 압축된 FP16 숫자를 부호 없는 16비트 정수로 변환. VCVTPH2UW는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2UW는 0으로 반올림한다. VCVTPH2DQ, VCVTTPH2DQ 압축된 FP16 숫자를 부호 있는 32비트 정수로 변환. VCVTPH2DQ는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2DQ는 0으로 반올림한다. VCVTPH2UDQ, VCVTTPH2UDQ 압축된 FP16 숫자를 부호 없는 32비트 정수로 변환. VCVTPH2UDQ는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2UDQ는 0으로 반올림한다. VCVTPH2QQ, VCVTTPH2QQ 압축된 FP16 숫자를 부호 있는 64비트 정수로 변환. VCVTPH2QQ는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2QQ는 0으로 반올림한다. VCVTPH2UQQ, VCVTTPH2UQQ 압축된 FP16 숫자를 부호 없는 64비트 정수로 변환. VCVTPH2UQQ는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTPH2UQQ는 0으로 반올림한다. VCVTPH2PSX 압축된 FP16 숫자를 FP32 숫자로 변환. F16C의 VCVTPH2PS와 달리, VCVTPH2PSX는 브로드캐스팅도 지원하는 다른 인코딩을 가지고 있다. VCVTPH2PD 압축된 FP16 숫자를 FP64 숫자로 변환. VCVTSH2SI, VCVTTSH2SI 스칼라 FP16 숫자를 부호 있는 32비트 또는 64비트 정수로 변환. VCVTSH2SI는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTSH2SI는 0으로 반올림한다. VCVTSH2USI, VCVTTSH2USI 스칼라 FP16 숫자를 부호 없는 32비트 또는 64비트 정수로 변환. VCVTSH2USI는 MXCSR 레지스터에 따라 값을 반올림한다. VCVTTSH2USI는 0으로 반올림한다. VCVTSH2SS 스칼라 FP16 숫자를 FP32 숫자로 변환. VCVTSH2SD 스칼라 FP16 숫자를 FP64 숫자로 변환.

 분해 명령어 
 명령어 설명 VGETEXPPH, VGETEXPSH 압축된/스칼라 FP16 숫자의 지수 성분을 FP16 숫자로 추출. VGETMANTPH, VGETMANTSH 압축된/스칼라 FP16 숫자의 가수 성분을 FP16 숫자로 추출.

 이동 명령어 
 명령어 설명 VMOVSH 스칼라 FP16 숫자를 메모리에서/으로 또는 벡터 레지스터 간 이동. VMOVW 스칼라 FP16 숫자를 메모리에서/으로 또는 범용 레지스터로 이동.

 AVX-512를 사용하는 CPU 
 인텔
 나이츠 랜딩 (제온 파이 x200): AVX-512 F, CD, ER, PF
 나이츠 밀 (제온 파이 x205): AVX-512 F, CD, ER, PF, 4FMAPS, 4VNNIW, VPOPCNTDQ
 스카이레이크-SP, 스카이레이크-X: AVX-512 F, CD, VL, DQ, BW
 캐넌 레이크: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
 캐스케이드 레이크: AVX-512 F, CD, VL, DQ, BW, VNNI
 쿠퍼 레이크: AVX-512 F, CD, VL, DQ, BW, VNNI, BF16
 아이스레이크, 로켓레이크: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES
 타이거 레이크 (펜티엄 및 셀러론 제외, 하지만 일부 리뷰어는 AVX-512를 지원하는 셀러론 6305의 CPU-Z 스크린샷을 가지고 있다): AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, VP2INTERSECT
 앨더레이크 (인텔에서 공식적으로 지원되지 않으며, 최신 CPU에서는 완전히 제거됨): AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT, FP16
 사파이어 래피즈 및 이후 P-코어 전용 제온 프로세서: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, FP16
 Centaur Technology
 "CNS" 코어 (8c/8t): AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
 AMD
 젠 4: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16
 젠 5: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT

                       나이츠 랜딩 (제온 파이 x200, 2016) colspan="2" rowspan="9"  colspan="2" rowspan="2"  colspan="17"  나이츠 밀  colspan="3"  colspan="14"  스카이레이크-SP,  colspan="4" rowspan="11"  rowspan="4"  colspan="3" rowspan="4"  colspan="11"  캐넌 레이크 (2018) colspan="2"  colspan="9"   rowspan="2" colspan="2"  rowspan="2"  colspan="8"  쿠퍼 레이크 (2020)  colspan="7"  아이스레이크 (2019) colspan="7" rowspan="3"  rowspan="3"  colspan="5" rowspan="3"  colspan="2"  타이거 레이크 (2020)   로켓레이크 (2021) colspan="2"  앨더레이크 (2021) colspan="2"  colspan="15"  젠 4 (2022) colspan="2" rowspan="3"  colspan="13" rowspan="3"  colspan="2"  사파이어 래피즈 (2023)   젠 5 (2024)  

: 인텔은 앨더레이크 마이크로프로세서에서 AVX-512 명령어 제품군을 공식적으로 지원하지 않는다. 2022년 초에 인텔은 AVX-512 활성화를 방지하기 위해 앨더레이크 마이크로프로세서에서 AVX-512를 실리콘 수준에서 비활성화(퓨징 오프)하기 시작했다.
일부 레거시 BIOS 및 마이크로코드 개정판을 사용하는 구형 앨더레이크 계열 CPU에서는 AVX-512를 지원하는 실리콘을 포함하지 않는 모든 효율성 코어를 비활성화하면 AVX-512 계열 명령어를 실행할 수 있었다.

 성능 

인텔 벡터화 어드바이저 (2017 버전부터)는 네이티브 AVX-512 성능 및 벡터 코드 품질 분석을 지원한다("코어", 제온 및 인텔 제온 파이 프로세서에 대해). 전통적인 핫스팟 프로필, 어드바이저 권장 사항 및 인텔 컴파일러 벡터화 진단 기능의 "원활한" 통합과 함께, 어드바이저 서베이 분석은 AVX-512 ISA 메트릭 및 새로운 AVX-512 특정 "특성", 예: 스캐터, 압축/확장, 마스크 활용도 등을 제공한다.

일부 프로세서(아이스레이크 이전 인텔 프로세서가 대부분)에서는 AVX-512 명령어가 이전 명령어보다 더 큰 주파수 조절을 유발하여 혼합 작업에 불이익을 줄 수 있다. 추가적인 다운클럭은 512비트 벡터 폭에 의해 트리거되며 실행되는 명령어의 종류에 따라 달라진다. AVX-512의 128비트 또는 256비트 부분(AVX-512VL)을 사용하면 트리거되지 않는다. 결과적으로 gcc 및 클랭은 인텔 타겟에 대해 기본적으로 256비트 벡터를 사용하는 것을 선호한다.

C/C++ 컴파일러는 또한 AVX-512를 가장 효과적으로 사용하기 위해 루프 언롤링 및 파이프라인 정지 방지를 자동으로 처리한다. 이는 언어 내장 함수를 사용하여 AVX-512 사용을 강제하려는 프로그래머가 소스 코드에 평범하게 작성된 루프를 만났을 때 컴파일러가 생성하는 코드에 비해 성능이 더 나빠지는 결과를 초래할 수 있음을 의미한다. 다른 경우에는 C/C++ 코드에서 AVX-512 내장 함수를 사용하면 평범하게 작성된 C/C++에 비해 성능 향상을 가져올 수 있다.

 반응 
미디어 처리, 암호화, 비디오 게임, 신경망, 그리고 OpenJDK와 같은 AVX-512 애플리케이션의 많은 예가 있다. OpenJDK는 정렬을 위해 AVX-512를 사용한다.

2020년에 많이 인용된 리누스 토르발스의 발언에서 그는 "AVX-512가 고통스럽게 죽고 인텔이 잘 보이는 벤치마크를 만들기 위해 마법 같은 명령어를 만들려고 하는 대신 실제 문제를 해결하기 시작하기를 바란다"고 말했다. 그는 트랜지스터 예산이 추가적인 코어와 정수 성능에 사용되는 것을 선호하며, 부동 소수점 벤치마크를 "혐오한다"고 언급했다.

누멘타는 "고도로 희소한" 신경망 기술을 자랑하며, 이 기술을 통해 GPU가 필요 없어지는데, 이는 그들의 알고리즘이 AVX-512가 탑재된 CPU에서 실행되기 때문이라고 말한다. 그들은 A100에 비해 10배의 속도 향상을 주장하는데, 이는 주로 SET(Sparse Evolutionary Training) 알고리즘과 포어사이트 프루닝과 같은 기법을 통해 정확도를 유지하면서 신경망의 크기를 줄이기 때문이라고 한다.

 같이 보기 
 FMA 명령어 집합 (FMA)
 XOP 명령어 집합 (XOP)
 ARM의 확장 가능한 벡터 확장 – 매우 넓은 비트 폭을 지원하고 하드웨어에서 지원하는 최대 폭에 자동으로 적응할 수 있는 단일 바이너리 코드를 지원하는 새로운 벡터 명령어 집합(VFP 및 NEON을 보완한다).

 각주 


분류:X86 명령어
분류:SIMD 컴퓨팅