맨위로가기 타임라인 바로가기

AVX-512

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
타임라인 바로가기

1. 개요

AVX-512는 인텔에서 개발한 고급 벡터 확장(AVX) 명령어 집합의 확장으로, 512비트 레지스터를 사용하여 SIMD(Single Instruction, Multiple Data) 연산을 수행한다. 이 명령어 집합은 여러 세트로 구성되어 있으며, 각 세트는 고유한 CPUID 기능 비트를 가지고 있다. AVX-512는 제온 파이, 제온, 코어 프로세서 등 다양한 인텔 CPU에서 지원되며, 딥 러닝, 미디어 처리, 암호화 등 다양한 분야에서 성능 향상을 제공한다. 하지만 일부 프로세서에서는 주파수 스로틀링을 유발하여 성능 저하를 초래할 수 있으며, 리누스 토르발스 등 일부는 AVX-512에 대해 비판적인 입장을 보이기도 한다.

2. 명령어 집합

AVX-512 명령어 집합은 각각 고유한 CPUID 기능 비트를 가진 여러 개의 개별 세트로 구성된다.


  • '''F, CD, ER, PF:''' 제온 파이 x200 (Knights Landing) 및 제온 골드/플래티넘 (스카이레이크 SP)에서 도입되었으며, 마지막 두 개(ER 및 PF)는 Knights Landing에 특화되어 있다.
  • ''AVX-512 Foundation (F)''는 32비트 및 64비트 기반 AVX 명령어를 EVEX 코딩 방식으로 확장하여 512비트 레지스터, 연산 마스크, 매개변수 브로드캐스팅, 내장 라운딩 및 예외 제어를 지원하며, Knights Landing 및 Skylake Xeon에서 구현되었다.
  • ''AVX-512 충돌 감지 명령어(CD)''는 더 많은 루프를 벡터화할 수 있도록 효율적인 충돌 감지를 제공하며, Knights Landing[1] 및 Skylake X에서 구현되었다.
  • ''AVX-512 지수역수 명령어(ER)''는 초월 연산을 구현하도록 설계된 지수 및 역수 연산이며, Knights Landing에서 구현되었다.[1]
  • ''AVX-512 프리페치 명령어(PF)''는 새로운 프리페치 기능을 제공하며, Knights Landing에서 구현되었다.[1]

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

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

  • '''4VNNIW, 4FMAPS:''' Knights Mill에서 도입되었다.[5][6]
  • ''AVX-512 벡터 신경망 명령어 워드 가변 정밀도 (4VNNIW)'' – 딥 러닝을 위한 벡터 명령어, 향상된 워드, 가변 정밀도.
  • ''AVX-512 융합 곱셈 누산 팩싱된 단정밀도 (4FMAPS)'' – 딥 러닝을 위한 벡터 명령어, 부동 소수점, 단정밀도.

  • '''VPOPCNTDQ:''' 벡터 인구수 명령어. Knights Mill 및 아이스 레이크에서 도입되었다.[14]

  • '''VNNI, VBMI2, BITALG:''' 아이스 레이크에서 도입되었다.[14]
  • ''AVX-512 벡터 신경망 명령어 (VNNI)'' – 딥 러닝을 위한 벡터 명령어.
  • ''AVX-512 벡터 바이트 조작 명령어 2 (VBMI2)'' – 바이트/워드 로드, 저장 및 시프트를 사용한 연결.
  • ''AVX-512 비트 알고리즘 (BITALG)'' – VPOPCNTDQ를 확장하는 바이트/워드 비트 조작 명령어.

  • '''VP2INTERSECT:''' 타이거 레이크에서 도입되었다.
  • ''AVX-512 마스크 레지스터 쌍에 대한 벡터 쌍 교차 (VP2INTERSECT)''.

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

2. 1. F, CD, ER, PF

AVX-512 F, CD, ER, PF는 제온 파이 x200 (Knights Landing) 및 제온 골드/플래티넘 (스카이레이크 SP)에서 도입되었다.[1]

  • AVX-512 Foundation (F): 32비트 및 64비트 기반 AVX 명령어를 EVEX 코딩 방식으로 확장하여 512비트 레지스터, 연산 마스크, 매개변수 브로드캐스팅, 내장 라운딩 및 예외 제어를 지원한다.[1]
  • AVX-512 충돌 감지 명령어 (CD): 더 많은 루프를 벡터화할 수 있도록 효율적인 충돌 감지를 제공한다.[1] 일반적으로 안전하게 벡터화할 수 없는 루프에서 요소의 충돌 없는 하위 집합을 효율적으로 계산하는 데 도움이 되도록 설계되었다.[8]
  • `VPCONFLICTD`, `VPCONFLICTQ`: 벡터에 포함된 배정도 또는 쿼드워드 값 내에서 충돌을 감지한다.
  • `VPLZCNTD`, `VPLZCNTQ`: 팩된 배정도 또는 쿼드워드 값에 대한 선행 0 비트 수를 계산하는 벡터화된 `LZCNT` 명령어이다.
  • `VPBROADCASTMB2Q`, `VPBROADCASTMW2D`: 8비트 마스크를 쿼드워드 벡터로 또는 16비트 마스크를 배정도 벡터로 브로드캐스트한다.
  • AVX-512 지수 및 역수 명령어 (ER): 초월 연산을 구현하도록 설계된 지수역수 연산이며, 상대 오차가 최대 2−28인 근사 역수 명령어를 포함하며, 상대 오차가 최대 2−23인 두 개의 새로운 지수 함수도 포함한다.[1][6]
  • `VEXP2PD`, `VEXP2PS`: 팩된 단정밀도 또는 배정밀도 부동 소수점 값의 근사 지수 2x를 계산한다.
  • `VRCP28PD`, `VRCP28PS`: 팩된 단정밀도 또는 배정밀도 부동 소수점 값의 근사 역수를 계산한다.
  • `VRCP28SD`, `VRCP28SS`: 스칼라 단정밀도 또는 배정밀도 부동 소수점 값의 근사 역수를 계산한다.
  • `VRSQRT28PD`, `VRSQRT28PS`: 팩된 단정밀도 또는 배정밀도 부동 소수점 값의 제곱근의 근사 역수를 계산한다.
  • `VRSQRT28SD`, `VRSQRT28SS`: 스칼라 단정밀도 또는 배정밀도 부동 소수점 값의 제곱근의 근사 역수를 계산한다.
  • AVX-512 프리페치 명령어 (PF): 새로운 프리페치 기능을 제공한다.[1] AVX2 및 AVX-512에서 도입된 새로운 분산 및 수집 기능에 대한 새로운 프리페치 연산을 포함한다. `T0` 프리페치는 레벨 1 캐시로, `T1`은 레벨 2 캐시로의 프리페치를 의미한다.
  • `VGATHERPF0DPS`, `VGATHERPF0QPS`, `VGATHERPF0DPD`, `VGATHERPF0QPD`: 부호 있는 dword/qword 인덱스를 사용하여, 옵마스크 k1 및 T0 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치를 프리페치한다.
  • `VGATHERPF1DPS`, `VGATHERPF1QPS`, `VGATHERPF1DPD`, `VGATHERPF1QPD`: 부호 있는 dword/qword 인덱스를 사용하여, 옵마스크 k1 및 T1 힌트를 사용하여 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치를 프리페치한다.
  • `VSCATTERPF0DPS`, `VSCATTERPF0QPS`, `VSCATTERPF0DPD`, `VSCATTERPF0QPD`: 부호 있는 dword/qword 인덱스를 사용하여, 쓰기 마스크 k1 및 T0 힌트를 사용하여 쓰기 의도로 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치를 프리페치한다.
  • `VSCATTERPF1DPS`, `VSCATTERPF1QPS`, `VSCATTERPF1DPD`, `VSCATTERPF1QPD`: 부호 있는 dword/qword 인덱스를 사용하여, 쓰기 마스크 k1 및 T1 힌트를 사용하여 쓰기 의도로 단정밀도/배정밀도 데이터를 포함하는 희소 바이트 메모리 위치를 프리페치한다.

2. 2. VL, DQ, BW

스카이레이크 X와 캐논 레이크에서 AVX-512의 VL, DQ, BW 확장 세트가 도입되었다.[3]

  • AVX-512 벡터 길이 확장 (VL): 대부분의 AVX-512 명령어를 XMM (128비트) 및 YMM (256비트) 레지스터에서도 작동하도록 확장한다.[3]
  • AVX-512 더블워드 및 쿼드워드 명령어 (DQ): 새로운 32비트 및 64비트 AVX-512 명령어를 추가한다.[3]
  • AVX-512 바이트 및 워드 명령어 (BW): AVX-512를 8비트 및 16비트 정수 연산까지 확장한다.[3]


AVX-512DQ는 새로운 더블워드 및 쿼드워드 명령어를 추가하며, AVX-512BW는 동일 명령어의 바이트 및 워드 버전과 AVX-512F의 더블워드/쿼드워드 명령어의 바이트 및 워드 버전을 추가한다. AVX-512BW에서 워드 형식만 제공되던 일부 명령어는 AVX-512_VBMI 확장을 통해 바이트 형식을 갖게 되었다.[14]

마스크 명령어 세트에는 `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 명령어들이 있으며, 여기에는 모든 두 입력 비트 단위 연산 명령어와 정수 추출/삽입 명령어가 포함된다.

새롭게 추가된 부동 소수점 연산은 다음과 같다:

명령어확장 세트설명
`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`의 쿼드 워드 버전입니다.


2. 3. IFMA, VBMI

캐논 레이크에서 도입되었다.[4]

  • AVX-512 정수 융합 곱셈 덧셈 (IFMA) – 52비트 정밀도를 사용하여 정수의 융합 곱셈 덧셈을 수행한다.

명령어확장
세트
설명
VPMADD52LUQIFMA부호 없는 52비트 정수의 팩 곱셈을 수행하고 낮은 52비트 곱을 64비트 누산기에 더한다
VPMADD52HUQIFMA부호 없는 52비트 정수의 팩 곱셈을 수행하고 높은 52비트 곱을 64비트 누산기에 더한다


  • AVX-512 벡터 바이트 조작 명령어 (VBMI)는 AVX-512BW에 없었던 벡터 바이트 순열 명령어를 추가한다.

2. 4. 4VNNIW, 4FMAPS

Knights Mill에서 도입된 AVX-512 확장 명령어 집합이다.[5][6]

  • AVX-512 벡터 신경망 명령어 워드 가변 정밀도 (4VNNIW)는 딥 러닝을 위한 벡터 명령어로, 향상된 워드, 가변 정밀도를 제공한다.
  • AVX-512 융합 곱셈 누산 팩싱된 단정밀도 (4FMAPS)는 딥 러닝을 위한 벡터 명령어로, 부동 소수점, 단정밀도를 제공한다.


4VNNIW는 부호 있는 워드의 점 곱과 더블 워드 누산 (4회 반복)을 수행하는 `VP4DPWSSD`, 부호 있는 워드의 점 곱과 더블 워드 누산 및 포화 (4회 반복)을 수행하는 `VP4DPWSSDS` 명령어를 포함한다. 4FMAPS는 팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 (4회 반복)을 수행하는 `V4FMADDPS`, `V4FMADDSS` 명령어와 팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 및 부정 (4회 반복)을 수행하는 `V4FNMADDPS`, `V4FNMADDSS` 명령어를 포함한다.

명령어확장
세트
설명
V4FMADDPS,
V4FMADDSS
4FMAPS팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 (4회 반복)
V4FNMADDPS,
V4FNMADDSS
4FMAPS팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 및 부정 (4회 반복)
VP4DPWSSD4VNNIW부호 있는 워드의 점 곱과 더블 워드 누산 (4회 반복)
VP4DPWSSDS4VNNIW부호 있는 워드의 점 곱과 더블 워드 누산 및 포화 (4회 반복)


2. 5. VPOPCNTDQ

VPOPCNTDQ는 벡터 인구수 명령어[14]로, Knights Mill 및 아이스 레이크 프로세서에 도입되었다.[14] VPOPCNTDQ 명령어 집합에는 더블워드/쿼드워드에서 1로 설정된 비트 수를 반환하는 `VPOPCNTD`와 `VPOPCNTQ` 명령어가 포함된다.

명령어확장 세트설명
VPOPCNTD, VPOPCNTQVPOPCNTDQ더블워드/쿼드워드에서 1로 설정된 비트 수를 반환합니다.


2. 6. VNNI, VBMI2, BITALG

아이스 레이크에서 도입되었다.[14]

  • AVX-512 벡터 신경망 명령어 (VNNI): 딥 러닝을 위한 벡터 명령어이다. AVX512-VNNI는 EVEX로 인코딩된 명령어를 추가한다. AVX-512F를 사용하면 이러한 명령어는 512비트 벡터에서 작동할 수 있으며, AVX-512VL은 128비트 및 256비트 벡터에 대한 지원을 추가한다.

명령어설명
VPDPBUSD부호 없는 바이트와 부호 있는 바이트를 곱하고 더하기
VPDPBUSDS채도를 사용하여 부호 없는 바이트와 부호 있는 바이트를 곱하고 더하기
VPDPWSSD부호 있는 워드 정수를 곱하고 더하기
VPDPWSSDS채도를 사용하여 워드 정수를 곱하고 더하기


  • AVX-512 벡터 바이트 조작 명령어 2 (VBMI2): 바이트/워드 로드, 저장 및 시프트를 사용한 연결을 제공한다. 시프트 명령어는 새롭게 추가되었다.

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


  • AVX-512 비트 알고리즘 (BITALG): VPOPCNTDQ를 확장하는 바이트/워드 비트 조작 명령어이다.

명령어확장 세트설명
VPOPCNTB, VPOPCNTWBITALG바이트/워드에서 1로 설정된 비트 수를 반환합니다.
VPSHUFBITQMBBITALG바이트 인덱스를 사용하여 쿼드워드 요소의 비트를 마스크로 섞습니다.


2. 7. VP2INTERSECT

AVX-512 마스크 레지스터 쌍에 대한 벡터 쌍 교차 (VP2INTERSECT)는 타이거 레이크에서 도입되었다.[14] VP2INTERSECTD, VP2INTERSECTQ 명령어는 더블워드/쿼드워드 간의 교차점을 한 쌍의 마스크 레지스터로 계산한다.

2. 8. GFNI, VPCLMULQDQ, VAES

이것들은 AVX-512 기능 자체는 아니지만, 아이스 레이크에서 AVX-512와 함께 GFNI, PCLMULQDQ 및 AES 명령어의 EVEX 인코딩 버전을 활성화한다.[14] 갈루아체 새로운 명령어는 암호학에 유용하며,[10] 이는 Rijndael 스타일 S-box를 구현하는 데 사용될 수 있으며, AES, Camellia, SM4에서 사용된다.[11] 이 명령어는 네트워킹 및 신호 처리에서 비트 조작에도 사용될 수 있다.[10]

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

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



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캐리 없는 곱셈 쿼드워드



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

명령어설명
VAESDECAES 복호화 흐름의 한 라운드를 수행합니다.
VAESDECLASTAES 복호화 흐름의 마지막 라운드를 수행합니다.
VAESENCAES 암호화 흐름의 한 라운드를 수행합니다.
VAESENCLASTAES 암호화 흐름의 마지막 라운드를 수행합니다.


3. 인코딩 및 기능

AVX 및 AVX2에서 사용되는 VEX 접두사는 유연하지만, 인텔이 AVX-512에 추가하고자 했던 기능을 위한 충분한 공간을 제공하지 못했다. 이러한 이유로 인텔은 EVEX라는 새로운 접두사를 정의하게 되었다.[6]

EVEX는 VEX에 비해 다음과 같은 이점을 제공한다:[6]


  • 32개의 512비트 레지스터를 허용하는 확장된 레지스터 인코딩.
  • 대부분의 AVX-512 명령어를 마스킹하기 위한 8개의 새로운 opmask 레지스터를 추가.
  • 자동으로 브로드캐스트를 수행하는 새로운 스칼라 메모리 모드를 추가.
  • 각 명령어에 명시적인 반올림 제어를 위한 공간을 추가.
  • 새로운 압축된 변위 메모리 어드레싱 모드를 추가.


AVX-512의 확장된 레지스터, SIMD 폭 비트 및 opmask 레지스터는 필수이며, 모두 운영 체제의 지원이 필요하다.

AVX-512 벡터 명령어는 목적지에 어떤 값을 쓸지 제어하기 위해 옵마스크 레지스터를 지정할 수 있다. 명령어 인코딩은 0~7을 지원하지만, 0~7의 값에 해당하는 마스크로는 옵마스크 레지스터 k1~k7 (k0~k7 중)만 사용할 수 있다. 값 0은 옵마스크 레지스터를 사용하지 않음을 나타내기 위해 예약되어 있으며, 하드 코딩된 상수(‘k0’ 대신)가 마스크되지 않은 연산을 나타내는 데 사용된다. 특수 옵마스크 레지스터 'k0'는 여전히 작동하는 유효한 레지스터이며, 옵마스크 레지스터 조작 명령어에서 사용하거나 대상 옵마스크 레지스터로 사용할 수 있다.[7] 플래그는 옵마스크 동작을 제어하는데, 마스크에 의해 선택되지 않은 모든 것을 0으로 만드는 "zero" 모드와 선택되지 않은 모든 것을 변경하지 않고 놔두는 "merge" 모드가 있다. merge 동작은 블렌드 명령어와 동일하다.

옵마스크 레지스터는 일반적으로 16비트 너비이지만, AVX-512BW 확장을 사용하면 최대 64비트까지 가능하다.[6] 그러나 실제로 사용되는 비트 수는 마스크된 명령어의 벡터 유형에 따라 다르다. 32비트 단정밀도 부동 소수점 또는 배정밀도 부동 소수점(double words)의 경우, 16비트가 512비트 레지스터의 16개 요소를 마스크하는 데 사용된다. 배정밀도 부동 소수점 및 쿼드 워드(quad words)의 경우, 최대 8개의 마스크 비트가 사용된다.

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

명령어확장 세트설명
KANDF비트 단위 논리 AND 마스크
KANDNF비트 단위 논리 AND NOT 마스크
KMOVF마스크 레지스터 또는 범용 레지스터에서 이동
KUNPCKF마스크 레지스터에 대한 언팩
KNOTFNOT 마스크 레지스터
KORF비트 단위 논리 OR 마스크
KORTESTFOR 마스크 및 플래그 설정
KSHIFTLF왼쪽으로 시프트 마스크 레지스터
KSHIFTRF오른쪽으로 시프트 마스크 레지스터
KXNORF비트 단위 논리 XNOR 마스크
KXORF비트 단위 논리 XOR 마스크
KADDBW/DQ두 마스크 더하기
KTESTBW/DQ비트 단위 비교 및 플래그 설정


3. 1. EVEX 접두사

EVEX는 VEX 접두사의 기능을 확장하여 AVX-512에 추가된 기능을 지원한다.[6]

EVEX 접두사는 다음과 같은 이점을 제공한다.[6]

  • 32개의 512비트 레지스터를 사용할 수 있도록 레지스터 인코딩을 확장했다.
  • AVX-512 명령어 마스킹을 위한 8개의 opmask 레지스터를 추가했다.
  • 자동 브로드캐스트를 수행하는 스칼라 메모리 모드를 추가했다.
  • 명령어에 명시적인 반올림 제어를 위한 공간을 추가했다.
  • 압축된 변위 메모리 어드레싱 모드를 추가했다.


AVX-512의 확장된 레지스터, SIMD 폭 비트 및 opmask 레지스터는 필수적이며, 운영 체제의 지원이 필요하다.[6]

3. 2. SIMD 모드

AVX-512 명령어는 성능 저하 없이 128/256비트 AVX/AVX2 명령어와 혼합되도록 설계되었다.[6] AVX-512VL 확장은 128/256비트 레지스터 XMM/YMM에서 AVX-512 명령어를 사용할 수 있도록 하므로, 대부분의 SSE 및 AVX/AVX2 명령어는 EVEX 프리픽스로 인코딩된 새로운 AVX-512 버전을 가지고 있으며, 이는 옵마스크 및 추가 레지스터와 같은 새로운 기능에 접근할 수 있게 해준다.[6] AVX-256과 달리, 새로운 명령어는 새로운 니모닉을 갖지 않고 AVX와 네임스페이스를 공유하여, 명령어의 VEX 및 EVEX로 인코딩된 버전 간의 구분이 소스 코드에서 모호하게 만든다.[6] AVX-512F는 32비트 및 64비트 값에서만 작동하므로, 바이트 또는 워드에서 작동하는 SSE 및 AVX/AVX2 명령어는 AVX-512BW 확장(바이트 및 워드 지원)을 통해서만 사용할 수 있다.[6]

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


3. 3. 확장 레지스터

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

style="margin-bottom: 0.2em; font-size: small;" | x64 AVX-512 레지스터 체계는 x64 AVX(YMM0–YMM15) 및 x64 SSE(XMM0–XMM15) 레지스터에서 확장되었습니다.
511 256255 128127 0
style="border-top: none" |style="border-top: none" |style="border-top: none" |
  ZMM0    YMM0    XMM0  
ZMM1YMM1XMM1
ZMM2YMM2XMM2
ZMM3YMM3XMM3
ZMM4YMM4XMM4
ZMM5YMM5XMM5
ZMM6YMM6XMM6
ZMM7YMM7XMM7
ZMM8YMM8XMM8
ZMM9YMM9XMM9
ZMM10YMM10XMM10
ZMM11YMM11XMM11
ZMM12YMM12XMM12
ZMM13YMM13XMM13
ZMM14YMM14XMM14
ZMM15YMM15XMM15
ZMM16YMM16XMM16
ZMM17YMM17XMM17
ZMM18YMM18XMM18
ZMM19YMM19XMM19
ZMM20YMM20XMM20
ZMM21YMM21XMM21
ZMM22YMM22XMM22
ZMM23YMM23XMM23
ZMM24YMM24XMM24
ZMM25YMM25XMM25
ZMM26YMM26XMM26
ZMM27YMM27XMM27
ZMM28YMM28XMM28
ZMM29YMM29XMM29
ZMM30YMM30XMM30
ZMM31YMM31XMM31


3. 4. Opmask 레지스터

AVX-512 벡터 명령어는 목적지에 어떤 값을 쓸지 제어하기 위해 옵마스크 레지스터를 지정할 수 있다. 명령어 인코딩은 0~7을 지원하지만, 0~7의 값에 해당하는 마스크로는 옵마스크 레지스터 k1~k7 (k0~k7 중)만 사용할 수 있다. 값 0은 옵마스크 레지스터를 사용하지 않음을 나타내기 위해 예약되어 있으며, 하드 코딩된 상수(‘k0’ 대신)가 마스크되지 않은 연산을 나타내는 데 사용된다. 특수 옵마스크 레지스터 'k0'는 여전히 작동하는 유효한 레지스터이며, 옵마스크 레지스터 조작 명령어에서 사용하거나 대상 옵마스크 레지스터로 사용할 수 있다.[7] 플래그는 옵마스크 동작을 제어하는데, 마스크에 의해 선택되지 않은 모든 것을 0으로 만드는 "zero" 모드와 선택되지 않은 모든 것을 변경하지 않고 놔두는 "merge" 모드가 있다. merge 동작은 블렌드 명령어와 동일하다.

옵마스크 레지스터는 일반적으로 16비트 너비이지만, AVX-512BW 확장을 사용하면 최대 64비트까지 가능하다.[6] 그러나 실제로 사용되는 비트 수는 마스크된 명령어의 벡터 유형에 따라 다르다. 32비트 단정밀도 부동 소수점 또는 배정밀도 부동 소수점(double words)의 경우, 16비트가 512비트 레지스터의 16개 요소를 마스크하는 데 사용된다. 배정밀도 부동 소수점 및 쿼드 워드(quad words)의 경우, 최대 8개의 마스크 비트가 사용된다.

옵마스크 레지스터는 본래 요소 너비가 없는 여러 비트 단위 명령어들이 AVX-512에 추가된 이유이기도 하다. 예를 들어, 비트 단위 AND, OR 또는 128비트 셔플이 이제 더블 워드와 쿼드 워드 변형으로 모두 존재하며, 유일한 차이점은 최종 마스킹에 있다.

3. 5. 새로운 Opmask 명령어

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

명령어확장 세트설명
KANDF비트 단위 논리 AND 마스크
KANDNF비트 단위 논리 AND NOT 마스크
KMOVF마스크 레지스터 또는 범용 레지스터에서 이동
KUNPCKF마스크 레지스터에 대한 언팩
KNOTFNOT 마스크 레지스터
KORF비트 단위 논리 OR 마스크
KORTESTFOR 마스크 및 플래그 설정
KSHIFTLF왼쪽으로 시프트 마스크 레지스터
KSHIFTRF오른쪽으로 시프트 마스크 레지스터
KXNORF비트 단위 논리 XNOR 마스크
KXORF비트 단위 논리 XOR 마스크
KADDBW/DQ두 마스크 더하기
KTESTBW/DQ비트 단위 비교 및 플래그 설정


4. AVX-512 Foundation의 새로운 명령어

AVX-512F는 기존 SSE 또는 AVX 명령어의 EVEX 버전뿐만 아니라, 여러 새로운 명령어들을 포함한다.

### 마스크를 사용한 블렌드 (Blend using mask)

AVX-512에는 SSE4의 블렌드 명령어의 EVEX 접두사 버전이 존재하지 않는다. 대신 마스크 레지스터를 선택자로 사용하는 새로운 블렌딩 명령어 세트가 있다. 아래의 일반적인 마스크 명령어 비교와 함께, 이는 XOP의 VPCMOV와 유사한 일반적인 삼항 연산 또는 cmov를 구현하는 데 사용될 수 있다.

블렌딩은 EVEX 인코딩의 필수적인 부분이기 때문에, 이러한 명령어는 기본적인 이동 명령어(move instructions)로 간주될 수도 있다. 제로잉 블렌드 모드를 사용하여, 마스킹 명령어(masking instructions)로도 사용할 수 있다.

명령어확장
세트
설명
VBLENDMPDFopmask 제어를 사용하여 float64 벡터 블렌딩
VBLENDMPSFopmask 제어를 사용하여 float32 벡터 블렌딩
VPBLENDMDFopmask 제어를 사용하여 int32 벡터 블렌딩
VPBLENDMQFopmask 제어를 사용하여 int64 벡터 블렌딩
VPBLENDMBBWopmask 제어를 사용하여 바이트 정수 벡터 블렌딩
VPBLENDMWBWopmask 제어를 사용하여 워드 정수 벡터 블렌딩



### 마스크로 비교 (Compare into mask)

AVX-512F는 비교 결과를 마스크 레지스터에 저장하는 4개의 새로운 비교 명령어를 제공한다.[6] XOP 명령어와 유사하게 즉시 필드를 사용하여 8가지 비교를 선택할 수 있지만, XOP와 달리 결과를 마스크 레지스터에 저장하며 초기에는 더블워드 및 쿼드워드 비교만 지원한다.[6] AVX-512BW 확장은 바이트 및 워드 버전을 제공한다.[6]

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



명령에 대해 두 개의 마스크 레지스터를 지정할 수 있는데, 하나는 쓰기용이고 다른 하나는 일반 마스킹을 선언하는 데 사용한다.[6]

명령어확장
세트
설명
VPCMPD, VPCMPUDF부호 있는/없는 더블워드를 마스크로 비교
VPCMPQ, VPCMPUQF부호 있는/없는 쿼드워드를 마스크로 비교
VPCMPB, VPCMPUBBW부호 있는/없는 바이트를 마스크로 비교
VPCMPW, VPCMPUWBW부호 있는/없는 워드를 마스크로 비교



### 논리적 마스크 설정 (Logical set mask)

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

명령어확장
세트
설명
VPTESTMD, VPTESTMQF32비트 또는 64비트 정수에 대한 논리 AND 연산 및 마스크 설정.
VPTESTNMD, VPTESTNMQF32비트 또는 64비트 정수에 대한 논리 NAND 연산 및 마스크 설정.
VPTESTMB, VPTESTMWBW8비트 또는 16비트 정수에 대한 논리 AND 연산 및 마스크 설정.
VPTESTNMB, VPTESTNMWBW8비트 또는 16비트 정수에 대한 논리 NAND 연산 및 마스크 설정.



### 압축 및 확장 (Compress and expand)

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

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



### 순열 (Permute)

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

명령어확장
세트
설명
VPERMBVBMI팩된 바이트 요소를 순열합니다.
VPERMWBW팩된 워드 요소를 순열합니다.
VPERMT2BVBMI첫 번째 소스를 덮어쓰는 전체 바이트 순열.
VPERMT2WBW첫 번째 소스를 덮어쓰는 전체 워드 순열.
VPERMI2PD, VPERMI2PSF인덱스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열.
VPERMI2D, VPERMI2QF인덱스를 덮어쓰는 전체 더블워드/쿼드워드 순열.
VPERMI2BVBMI인덱스를 덮어쓰는 전체 바이트 순열.
VPERMI2WBW인덱스를 덮어쓰는 전체 워드 순열.
VPERMT2PS, VPERMT2PDF첫 번째 소스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열.
VPERMT2D, VPERMT2QF첫 번째 소스를 덮어쓰는 전체 더블워드/쿼드워드 순열.
VSHUFF32x4, VSHUFF64x2,
VSHUFI32x4, VSHUFI64x2
F4개의 팩된 128비트 라인을 섞습니다.
VPMULTISHIFTQBVBMI쿼드워드 소스에서 팩된 정렬되지 않은 바이트를 선택합니다.



### 비트 단위 삼항 논리 (Bitwise ternary logic)

AVX-512에는 세 개의 입력 간의 모든 비트 연산을 구현할 수 있는 새로운 명령어들이 추가되었다.[6] 이 명령어들은 세 개의 레지스터를 입력으로 받고 8비트 즉시 필드를 받는다. 출력의 각 비트는 입력의 세 개의 해당 비트를 사용하여 8비트 즉시 값의 8개 위치 중 하나를 선택하여 생성된다. 세 비트를 사용하면 8가지 조합만 가능하므로, 이를 통해 가능한 모든 3 입력 비트 연산을 수행할 수 있다.[6]

AVX-512F에는 이 두 가지 비트 단위 벡터 명령어가 유일하며, 두 개의 소스 SSE 및 AVX 비트 단위 벡터 명령어 AND, ANDN, OR 및 XOR의 EVEX 버전이 AVX-512DQ에 추가되었다. 더블 워드 및 쿼드 워드 버전의 차이점은 opmask의 적용뿐이다.

명령어설명
VPTERNLOGD, VPTERNLOGQ비트 단위 삼항 논리



비트 단위 삼항 논리 진리표
A0A1A2더블 AND
(0x80)
더블 OR
(0xFE)
비트 단위 혼합
(0xCA)
000000
001011
010010
011011
100010
101010
110011
111111



### 변환 (Conversions)

AVX-512는 SSE2에서 제공되는 변환 명령 세트를 완성하는 여러 변환 또는 이동 명령을 추가했다.

명령확장
세트
설명
VPMOVQD, VPMOVSQD, VPMOVUSQD,
VPMOVQW, VPMOVSQW, VPMOVUSQW,
VPMOVQB, VPMOVSQB, VPMOVUSQB,
VPMOVDW, VPMOVSDW, VPMOVUSDW,
VPMOVDB, VPMOVSDB, VPMOVUSDB
F쿼드워드 또는 더블워드를 더블워드, 워드 또는 바이트로 다운 변환, 언세츄레이티드, 세츄레이티드 또는 세츄레이티드 언사인드. SSE4.1의 부호/제로 확장 명령의 반대.
VPMOVWB, VPMOVSWB, VPMOVUSWBBW워드를 바이트로 다운 변환; 언세츄레이티드, 세츄레이티드 또는 세츄레이티드 언사인드.
VCVTPS2UDQ, VCVTPD2UDQ,
VCVTTPS2UDQ, VCVTTPD2UDQ
F잘라내기 유무에 관계없이 팩된 단정밀도 또는 배정밀도 부동 소수점을 팩된 언사인드 더블워드 정수로 변환.
VCVTSS2USI, VCVTSD2USI,
VCVTTSS2USI, VCVTTSD2USI
F잘라내기 유무에 관계없이 스칼라 단정밀도 또는 배정밀도 부동 소수점을 언사인드 더블워드 정수로 변환.
VCVTPS2QQ, VCVTPD2QQ,
VCVTPS2UQQ, VCVTPD2UQQ,
VCVTTPS2QQ, VCVTTPD2QQ,
VCVTTPS2UQQ, VCVTTPD2UQQ
DQ잘라내기 유무에 관계없이 팩된 단정밀도 또는 배정밀도 부동 소수점을 팩된 부호 있는 또는 부호 없는 쿼드워드 정수로 변환.
VCVTUDQ2PS, VCVTUDQ2PDF팩된 언사인드 더블워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUSI2PS, VCVTUSI2PDF스칼라 언사인드 더블워드 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUSI2SD, VCVTUSI2SSF스칼라 언사인드 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUQQ2PS, VCVTUQQ2PDDQ팩된 언사인드 쿼드워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTQQ2PD, VCVTQQ2PSF팩된 쿼드워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.



### 부동 소수점 분해 (Floating-point decomposition)

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

명령어설명
VGETEXPPD, VGETEXPPS팩킹된 부동 소수점 값의 지수를 부동 소수점 값으로 변환
VGETEXPSD, VGETEXPSS스칼라 부동 소수점 값의 지수를 부동 소수점 값으로 변환
VGETMANTPD, VGETMANTPSfloat32/float64 벡터에서 정규화된 가수(mantissa) 벡터 추출
VGETMANTSD, VGETMANTSSfloat32/float64 스칼라에서 정규화된 가수의 float32/float64 추출
VFIXUPIMMPD, VFIXUPIMMPS특수한 팩킹된 float32/float64 값 수정
VFIXUPIMMSD, VFIXUPIMMSS특수한 스칼라 float32/float64 값 수정



### 부동 소수점 산술 (Floating-point arithmetic)

AVX-512는 새로운 스케일링, 역수 및 제곱근의 역수 근사 계산을 포함하는 새로운 부동 소수점 연산 방식들을 제공한다.[6] 근사 역수 명령어는 최대 상대 오차가 2−14임을 보장한다.[6]

명령어설명
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, VSCALEFPDfloat32/float64 값으로 팩 처리된 float32/float64 값 스케일링
VSCALEFSS, VSCALEFSDfloat32/float64 값으로 스칼라 float32/float64 값 스케일링



### 브로드캐스트 (Broadcast)

AVX-512에는 메모리에서 벡터 레지스터로 값을 브로드캐스트하는 명령어들이 추가되었다.

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



### 기타 명령어 (Miscellaneous)

AVX-512에는 벡터 정렬, 절대값 계산, 비트 회전 등 다양한 기능을 수행하는 명령어들이 추가되었다.

명령어확장 세트설명
`VALIGND`, `VALIGNQ`F, VL더블 워드 또는 쿼드 워드 벡터 정렬
`VDBPSADBW`BW부호 없는 바이트에서 더블 블록 팩 SAD (Sum-Absolute-Differences, 절대 차이 합)
`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 분산


4. 1. 마스크를 사용한 블렌드 (Blend using mask)

AVX-512에는 SSE4의 블렌드 명령어의 EVEX 접두사 버전이 존재하지 않는다. 대신 마스크 레지스터를 선택자로 사용하는 새로운 블렌딩 명령어 세트가 있다. 아래의 일반적인 마스크 명령어 비교와 함께, 이는 XOP의 VPCMOV와 유사한 일반적인 삼항 연산 또는 cmov를 구현하는 데 사용될 수 있다.

블렌딩은 EVEX 인코딩의 필수적인 부분이기 때문에, 이러한 명령어는 기본적인 이동 명령어(move instructions)로 간주될 수도 있다. 제로잉 블렌드 모드를 사용하여, 마스킹 명령어(masking instructions)로도 사용할 수 있다.

명령어확장
세트
설명
VBLENDMPDFopmask 제어를 사용하여 float64 벡터 블렌딩
VBLENDMPSFopmask 제어를 사용하여 float32 벡터 블렌딩
VPBLENDMDFopmask 제어를 사용하여 int32 벡터 블렌딩
VPBLENDMQFopmask 제어를 사용하여 int64 벡터 블렌딩
VPBLENDMBBWopmask 제어를 사용하여 바이트 정수 벡터 블렌딩
VPBLENDMWBWopmask 제어를 사용하여 워드 정수 벡터 블렌딩


4. 2. 마스크로 비교 (Compare into mask)

AVX-512F는 비교 결과를 마스크 레지스터에 저장하는 4개의 새로운 비교 명령어를 제공한다.[6] XOP 명령어와 유사하게 즉시 필드를 사용하여 8가지 비교를 선택할 수 있지만, XOP와 달리 결과를 마스크 레지스터에 저장하며 초기에는 더블워드 및 쿼드워드 비교만 지원한다.[6] AVX-512BW 확장은 바이트 및 워드 버전을 제공한다.[6]

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



명령에 대해 두 개의 마스크 레지스터를 지정할 수 있는데, 하나는 쓰기용이고 다른 하나는 일반 마스킹을 선언하는 데 사용한다.[6]

명령어확장
세트
설명
VPCMPD, VPCMPUDF부호 있는/없는 더블워드를 마스크로 비교
VPCMPQ, VPCMPUQF부호 있는/없는 쿼드워드를 마스크로 비교
VPCMPB, VPCMPUBBW부호 있는/없는 바이트를 마스크로 비교
VPCMPW, VPCMPUWBW부호 있는/없는 워드를 마스크로 비교


4. 3. 논리적 마스크 설정 (Logical set mask)

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

명령어확장
세트
설명
VPTESTMD, VPTESTMQF32비트 또는 64비트 정수에 대한 논리 AND 연산 및 마스크 설정.
VPTESTNMD, VPTESTNMQF32비트 또는 64비트 정수에 대한 논리 NAND 연산 및 마스크 설정.
VPTESTMB, VPTESTMWBW8비트 또는 16비트 정수에 대한 논리 AND 연산 및 마스크 설정.
VPTESTNMB, VPTESTNMWBW8비트 또는 16비트 정수에 대한 논리 NAND 연산 및 마스크 설정.


4. 4. 압축 및 확장 (Compress and expand)

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

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


4. 5. 순열 (Permute)

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

명령어확장
세트
설명
VPERMBVBMI팩된 바이트 요소를 순열합니다.
VPERMWBW팩된 워드 요소를 순열합니다.
VPERMT2BVBMI첫 번째 소스를 덮어쓰는 전체 바이트 순열.
VPERMT2WBW첫 번째 소스를 덮어쓰는 전체 워드 순열.
VPERMI2PD, VPERMI2PSF인덱스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열.
VPERMI2D, VPERMI2QF인덱스를 덮어쓰는 전체 더블워드/쿼드워드 순열.
VPERMI2BVBMI인덱스를 덮어쓰는 전체 바이트 순열.
VPERMI2WBW인덱스를 덮어쓰는 전체 워드 순열.
VPERMT2PS, VPERMT2PDF첫 번째 소스를 덮어쓰는 전체 단정밀도/배정밀도 부동 소수점 순열.
VPERMT2D, VPERMT2QF첫 번째 소스를 덮어쓰는 전체 더블워드/쿼드워드 순열.
VSHUFF32x4, VSHUFF64x2,
VSHUFI32x4, VSHUFI64x2
F4개의 팩된 128비트 라인을 섞습니다.
VPMULTISHIFTQBVBMI쿼드워드 소스에서 팩된 정렬되지 않은 바이트를 선택합니다.


4. 6. 비트 단위 삼항 논리 (Bitwise ternary logic)

AVX-512에는 세 개의 입력 간의 모든 비트 연산을 구현할 수 있는 새로운 명령어들이 추가되었다.[6] 이 명령어들은 세 개의 레지스터를 입력으로 받고 8비트 즉시 필드를 받는다. 출력의 각 비트는 입력의 세 개의 해당 비트를 사용하여 8비트 즉시 값의 8개 위치 중 하나를 선택하여 생성된다. 세 비트를 사용하면 8가지 조합만 가능하므로, 이를 통해 가능한 모든 3 입력 비트 연산을 수행할 수 있다.[6]

AVX-512F에는 이 두 가지 비트 단위 벡터 명령어가 유일하며, 두 개의 소스 SSE 및 AVX 비트 단위 벡터 명령어 AND, ANDN, OR 및 XOR의 EVEX 버전이 AVX-512DQ에 추가되었다. 더블 워드 및 쿼드 워드 버전의 차이점은 opmask의 적용뿐이다.

명령어설명
VPTERNLOGD, VPTERNLOGQ비트 단위 삼항 논리



비트 단위 삼항 논리 진리표
A0A1A2더블 AND
(0x80)
더블 OR
(0xFE)
비트 단위 혼합
(0xCA)
000000
001011
010010
011011
100010
101010
110011
111111


4. 7. 변환 (Conversions)

AVX-512는 SSE2에서 제공되는 변환 명령 세트를 완성하는 여러 변환 또는 이동 명령을 추가했다.

명령확장
세트
설명
VPMOVQD, VPMOVSQD, VPMOVUSQD,
VPMOVQW, VPMOVSQW, VPMOVUSQW,
VPMOVQB, VPMOVSQB, VPMOVUSQB,
VPMOVDW, VPMOVSDW, VPMOVUSDW,
VPMOVDB, VPMOVSDB, VPMOVUSDB
F쿼드워드 또는 더블워드를 더블워드, 워드 또는 바이트로 다운 변환, 언세츄레이티드, 세츄레이티드 또는 세츄레이티드 언사인드. SSE4.1의 부호/제로 확장 명령의 반대.
VPMOVWB, VPMOVSWB, VPMOVUSWBBW워드를 바이트로 다운 변환; 언세츄레이티드, 세츄레이티드 또는 세츄레이티드 언사인드.
VCVTPS2UDQ, VCVTPD2UDQ,
VCVTTPS2UDQ, VCVTTPD2UDQ
F잘라내기 유무에 관계없이 팩된 단정밀도 또는 배정밀도 부동 소수점을 팩된 언사인드 더블워드 정수로 변환.
VCVTSS2USI, VCVTSD2USI,
VCVTTSS2USI, VCVTTSD2USI
F잘라내기 유무에 관계없이 스칼라 단정밀도 또는 배정밀도 부동 소수점을 언사인드 더블워드 정수로 변환.
VCVTPS2QQ, VCVTPD2QQ,
VCVTPS2UQQ, VCVTPD2UQQ,
VCVTTPS2QQ, VCVTTPD2QQ,
VCVTTPS2UQQ, VCVTTPD2UQQ
DQ잘라내기 유무에 관계없이 팩된 단정밀도 또는 배정밀도 부동 소수점을 팩된 부호 있는 또는 부호 없는 쿼드워드 정수로 변환.
VCVTUDQ2PS, VCVTUDQ2PDF팩된 언사인드 더블워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUSI2PS, VCVTUSI2PDF스칼라 언사인드 더블워드 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUSI2SD, VCVTUSI2SSF스칼라 언사인드 정수를 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTUQQ2PS, VCVTUQQ2PDDQ팩된 언사인드 쿼드워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.
VCVTQQ2PD, VCVTQQ2PSF팩된 쿼드워드 정수를 팩된 단정밀도 또는 배정밀도 부동 소수점으로 변환.


4. 8. 부동 소수점 분해 (Floating-point decomposition)

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

명령어설명
VGETEXPPD, VGETEXPPS팩킹된 부동 소수점 값의 지수를 부동 소수점 값으로 변환
VGETEXPSD, VGETEXPSS스칼라 부동 소수점 값의 지수를 부동 소수점 값으로 변환
VGETMANTPD, VGETMANTPSfloat32/float64 벡터에서 정규화된 가수(mantissa) 벡터 추출
VGETMANTSD, VGETMANTSSfloat32/float64 스칼라에서 정규화된 가수의 float32/float64 추출
VFIXUPIMMPD, VFIXUPIMMPS특수한 팩킹된 float32/float64 값 수정
VFIXUPIMMSD, VFIXUPIMMSS특수한 스칼라 float32/float64 값 수정


4. 9. 부동 소수점 산술 (Floating-point arithmetic)

AVX-512는 새로운 스케일링, 역수 및 제곱근의 역수 근사 계산을 포함하는 새로운 부동 소수점 연산 방식들을 제공한다.[6] 근사 역수 명령어는 최대 상대 오차가 2−14임을 보장한다.[6]

명령어설명
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, VSCALEFPDfloat32/float64 값으로 팩 처리된 float32/float64 값 스케일링
VSCALEFSS, VSCALEFSDfloat32/float64 값으로 스칼라 float32/float64 값 스케일링


4. 10. 브로드캐스트 (Broadcast)

AVX-512에는 메모리에서 벡터 레지스터로 값을 브로드캐스트하는 명령어들이 추가되었다.

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


4. 11. 기타 명령어 (Miscellaneous)

AVX-512에는 벡터 정렬, 절대값 계산, 비트 회전 등 다양한 기능을 수행하는 명령어들이 추가되었다.

명령어확장 세트설명
`VALIGND`, `VALIGNQ`F, VL더블 워드 또는 쿼드 워드 벡터 정렬
`VDBPSADBW`BW부호 없는 바이트에서 더블 블록 팩 SAD (Sum-Absolute-Differences, 절대 차이 합)
`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 분산


5. 세트별 새로운 명령어 (New instructions by sets)

5. 1. 충돌 감지 (Conflict detection)

AVX-512 충돌 감지(AVX-512CD) 명령어는 벡터화할 수 없는 루프에서 요소의 충돌 없는 하위 집합을 효율적으로 계산하는 데 도움을 준다.[8]

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


5. 2. 지수 및 역수 (Exponential and reciprocal)

AVX-512 지수 및 역수(AVX-512ER) 명령어는 AVX-512 기반 명령어보다 더 정확한 근사 역수 명령어를 포함하며 상대 오차는 최대 2−28이다. 또한 상대 오차가 최대 2−23인 두 개의 새로운 지수 함수도 포함한다.[6]

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


5. 3. 프리페치 (Prefetch)

AVX-512 프리페치(AVX-512PF) 명령어는 AVX2 및 AVX-512에서 도입된 새로운 분산 및 수집 기능에 대한 새로운 프리페치 연산을 포함한다. T0 프리페치는 레벨 1 캐시로의 프리페치를 의미하며, T1은 레벨 2 캐시로의 프리페치를 의미한다.

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


5. 4. 4FMAPS 및 4VNNIW

AVX-512에는 딥 러닝 가속을 위한 명령어들이 추가되었으며, 주로 제온 파이 제품에서 사용된다. 이 명령어들은 여러 번의 처리 과정을 수행한다.

명령어확장
세트
설명
V4FMADDPS,
V4FMADDSS
4FMAPS팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 (4회 반복)
V4FNMADDPS,
V4FNMADDSS
4FMAPS팩킹/스칼라 단정밀도 부동 소수점 융합 곱셈-덧셈 및 부정 (4회 반복)
VP4DPWSSD4VNNIW부호 있는 워드의 점 곱과 더블 워드 누산 (4회 반복)
VP4DPWSSDS4VNNIW부호 있는 워드의 점 곱과 더블 워드 누산 및 포화 (4회 반복)


5. 5. BW, DQ 및 VBMI

AVX-512BW는 바이트 및 워드 연산을, AVX-512DQ는 더블워드 및 쿼드워드 연산을 위한 명령어들을 추가한다. 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 명령어들이 포함되어 있으며, 모든 두 입력 비트 단위 연산 명령어와 정수 추출/삽입 명령어가 이에 해당한다.

5. 6. VBMI2

AVX-512 VBMI2는 바이트 및 워드 단위의 압축(VPCOMPRESSB, VPCOMPRESSW) 및 확장(VPEXPANDB, VPEXPANDW) 명령어를 제공하여 희소하게 팩된 정수 값을 효율적으로 처리한다. 또한, 팩된 데이터를 연결하고 논리/가변 시프트하는 명령어(VPSHLD, VPSHLDV, VPSHRD, VPSHRDV)도 새롭게 추가되었다.

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


5. 7. VNNI

AVX-512 VNNI는 딥 러닝 추론 가속을 위한 벡터 신경망 명령어 집합이다. AVX512-VNNI는 EVEX 접두사로 인코딩된 명령어를 추가한다. AVX-512F를 사용하면 이러한 명령어는 512비트 벡터에서 작동할 수 있으며, AVX-512VL은 128비트 및 256비트 벡터에 대한 지원을 추가한다.

명령어설명
VPDPBUSD부호 없는 바이트와 부호 있는 바이트를 곱하고 더하기
VPDPBUSDS채도를 사용하여 부호 없는 바이트와 부호 있는 바이트를 곱하고 더하기
VPDPWSSD부호 있는 워드 정수를 곱하고 더하기
VPDPWSSDS채도를 사용하여 워드 정수를 곱하고 더하기



5. 8. IFMA

정수 융합 곱셈-덧셈(Fused Multiply-Add, FMA) 명령어들이 추가되었다. AVX512-IFMA는 EVEX로 인코딩된 명령어를 추가한다.

명령어확장
세트
설명
VPMADD52LUQIFMA부호 없는 52비트 정수의 팩 곱셈을 수행하고 낮은 52비트 곱을 64비트 누산기에 더한다
VPMADD52HUQIFMA부호 없는 52비트 정수의 팩 곱셈을 수행하고 높은 52비트 곱을 64비트 누산기에 더한다


5. 9. VPOPCNTDQ 및 BITALG

VPOPCNTDQ 확장 세트는 더블워드/쿼드워드에서 1로 설정된 비트 수를 반환하는 `VPOPCNTD` 및 `VPOPCNTQ` 명령어를 제공한다. BITALG 확장 세트는 바이트/워드에서 1로 설정된 비트 수를 반환하는 `VPOPCNTB` 및 `VPOPCNTW` 명령어와 바이트 인덱스를 사용하여 쿼드워드 요소의 비트를 마스크로 섞는 `VPSHUFBITQMB` 명령어를 제공한다.

5. 10. VP2INTERSECT

벡터 쌍 교차 명령어는 더블워드/쿼드워드 간의 교차점을 한 쌍의 마스크 레지스터로 계산한다.

```wikitable

명령어확장 세트설명
VP2INTERSECTD,
VP2INTERSECTQ
VP2INTERSECT더블워드/쿼드워드 간의 교차점을 한 쌍의 마스크 레지스터로 계산


5. 11. GFNI, VPCLMULQDQ, VAES

갈루아체 새로운 명령어는 암호학에 유용하며,[10] 이는 Rijndael 스타일 S-box를 구현하는 데 사용될 수 있으며, AES, Camellia, SM4에서 사용된다.[11] 이 명령어는 네트워킹 및 신호 처리에서 비트 조작에도 사용될 수 있다.[10]

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

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



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`캐리 없는 곱셈 쿼드워드



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

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



5. 12. BF16

Bfloat16 숫자를 사용하는 AI 가속 명령어이다.

명령어설명
VCVTNE2PS2BF16팩된 단정밀도 숫자 두 벡터를 팩된 Bfloat16 숫자 한 벡터로 변환
VCVTNEPS2BF16팩된 단정밀도 숫자 한 벡터를 팩된 Bfloat16 숫자 한 벡터로 변환
VDPBF16PS두 개의 Bfloat16 쌍의 내적을 계산하고 결과를 하나의 팩된 단정밀도 숫자에 누적


5. 13. FP16

AVX-512는 이전 F16C 명령어 집합을 확장하여 binary16 부동소수점 숫자(FP16, float16 또는 반정밀도 부동소수점 숫자라고도 함)에 대한 포괄적인 지원을 추가한다.[12] 새로운 명령어는 이전에 단정밀도 및 배정밀도 부동소수점 숫자에 사용할 수 있었던 대부분의 연산을 구현하며, 새로운 복소수 명령어와 변환 명령어를 도입한다.[12] 스칼라 및 팩 연산이 지원된다.[12]

단정밀도 및 배정밀도 형식 명령어와 달리, 반정밀도 피연산자는 `MXCSR` 설정에 따라 조건부로 0으로 플러시되지 않고(FTZ) 또는 조건부로 0으로 처리되지 않는다(DAZ).[12] 비정규화 값은 FP16 숫자의 전체 동적 범위를 사용하기 위해 하드웨어에 의해 전체 속도로 처리된다.[12] FP32 및 FP64 숫자를 생성하는 명령어는 여전히 `MXCSR.FTZ` 비트를 준수한다.[12]

AVX-512 FP16에서 제공하는 명령어들은 다음과 같다:

명령어설명
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 숫자를 곱하고 더합니다(홀수 벡터 요소) 또는 곱하고 뺍니다(짝수 벡터 요소).
VFMSUBADD{132, 213, 231}PH팩 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 숫자의 근사 역수를 계산합니다. 근사값의 최대 상대 오차는 2−11 + 2−14보다 작습니다.
VRSQRTPHVRSQRTSH팩/스칼라 FP16 숫자의 근사 제곱근 역수를 계산합니다. 근사값의 최대 상대 오차는 2−14보다 작습니다.



명령어설명
VCMPPH, VCMPSH팩/스칼라 FP16 숫자를 비교하고 결과를 마스크 레지스터에 저장합니다.
VCOMISH스칼라 FP16 숫자를 비교하고 결과를 플래그 레지스터에 저장합니다. 소스 피연산자가 QNaN 또는 SNaN인 경우 예외를 발생시킵니다.
VUCOMISH스칼라 FP16 숫자를 비교하고 결과를 플래그 레지스터에 저장합니다. 소스 피연산자가 SNaN인 경우에만 예외를 발생시킵니다.
VMAXPH, VMAXSH소스 팩/스칼라 FP16 숫자의 각 수직 쌍 중 최대값을 선택합니다.
VMINPH, VMINSH소스 팩/스칼라 FP16 숫자의 각 수직 쌍 중 최소값을 선택합니다.
VFPCLASSPHVFPCLASSSH팩/스칼라 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비트 정수로 변환합니다. VCVTPH2WMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2W는 0으로 반올림합니다.
VCVTPH2UW, VCVTTPH2UW팩으로 묶인 FP16 숫자를 부호 없는 16비트 정수로 변환합니다. VCVTPH2UWMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2UW는 0으로 반올림합니다.
VCVTPH2DQ, VCVTTPH2DQ팩으로 묶인 FP16 숫자를 부호 있는 32비트 정수로 변환합니다. VCVTPH2DQMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2DQ는 0으로 반올림합니다.
VCVTPH2UDQ, VCVTTPH2UDQ팩으로 묶인 FP16 숫자를 부호 없는 32비트 정수로 변환합니다. VCVTPH2UDQMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2UDQ는 0으로 반올림합니다.
VCVTPH2QQ, VCVTTPH2QQ팩으로 묶인 FP16 숫자를 부호 있는 64비트 정수로 변환합니다. VCVTPH2QQMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2QQ는 0으로 반올림합니다.
VCVTPH2UQQ, VCVTTPH2UQQ팩으로 묶인 FP16 숫자를 부호 없는 64비트 정수로 변환합니다. VCVTPH2UQQMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTPH2UQQ는 0으로 반올림합니다.
VCVTPH2PSX팩으로 묶인 FP16 숫자를 FP32 숫자로 변환합니다. F16C의 VCVTPH2PS와 달리 VCVTPH2PSX는 브로드캐스팅도 지원하는 다른 인코딩을 사용합니다.
VCVTPH2PD팩으로 묶인 FP16 숫자를 FP64 숫자로 변환합니다.
VCVTSH2SI, VCVTTSH2SI스칼라 FP16 숫자를 부호 있는 32비트 또는 64비트 정수로 변환합니다. VCVTSH2SIMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTSH2SI는 0으로 반올림합니다.
VCVTSH2USI, VCVTTSH2USI스칼라 FP16 숫자를 부호 없는 32비트 또는 64비트 정수로 변환합니다. VCVTSH2USIMXCSR 레지스터에 따라 값을 반올림합니다. VCVTTSH2USI는 0으로 반올림합니다.
VCVTSH2SS스칼라 FP16 숫자를 FP32 숫자로 변환합니다.
VCVTSH2SD스칼라 FP16 숫자를 FP64 숫자로 변환합니다.



명령어설명
VGETEXPPH, VGETEXPSH팩/스칼라 FP16 숫자의 지수 구성 요소를 FP16 숫자로 추출합니다.
VGETMANTPH, VGETMANTSH팩/스칼라 FP16 숫자의 가수 구성 요소를 FP16 숫자로 추출합니다.



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


6. EVEX 인코딩된 레거시 명령어 (Legacy instructions with EVEX-encoded versions)

AVX-512는 기존의 SSE, AVX, AVX2 명령어 중 일부를 EVEX 인코딩을 사용하여 확장했다. 다음 표는 EVEX 인코딩으로 확장된 레거시 명령어들을 보여준다.

그룹레거시 인코딩명령AVX-512 확장
SSE/SSE2/MMXAVX/SSE3/SSE4AVX2/FMAFVLBWDQ
VADD아니오VADDPD, VADDPS, VADDSD, VADDSS아니오아니오
VANDVANDPD, VANDPS, VANDNPD, VANDNPS아니오
VCMPVCMPPD, VCMPPS, VCMPSD, VCMPSS아니오아니오
VCOMVCOMISD, VCOMISS
VDIVVDIVPD, VDIVPS, VDIVSD, VDIVSS
VCVTVCVTDQ2PD, VCVTDQ2PS, VCVTPD2DQ, VCVTPD2PS, VCVTPH2PS, VCVTPS2PH, VCVTPS2DQ, VCVTPS2PD, VCVTSD2SI, VCVTSD2SS, VCVTSI2SD, VCVTSI2SS, VCVTSS2SD, VCVTSS2SI, VCVTTPD2DQ, VCVTTPS2DQ, VCVTTSD2SI, VCVTTSS2SI
VMAXVMAXPD, VMAXPS, VMAXSD, VMAXSS
VMINVMINPD, VMINPS, VMINSD, VMINSS아니오
VMOVVMOVAPD, VMOVAPS, VMOVD, VMOVQ, VMOVDDUP, VMOVHLPS, VMOVHPD, VMOVHPS, VMOVLHPS, VMOVLPD, VMOVLPS, VMOVNTDQA, VMOVNTDQ, VMOVNTPD, VMOVNTPS, VMOVSD, VMOVSHDUP, VMOVSLDUP, VMOVSS, VMOVUPD, VMOVUPS, VMOVDQA32, VMOVDQA64, VMOVDQU8, VMOVDQU16, VMOVDQU32, VMOVDQU64
VMULVMULPD, VMULPS, VMULSD, VMULSS아니오
VORVORPD, VORPS아니오
VSQRTVSQRTPD, VSQRTPS, VSQRTSD, VSQRTSS아니오
VSUBVSUBPD, VSUBPS, VSUBSD, VSUBSS
VUCOMIVUCOMISD, VUCOMISS아니오
VUNPCKVUNPCKHPD, VUNPCKHPS, VUNPCKLPD, VUNPCKLPS
VXORVXORPD, VXORPS아니오
VEXTRACTPS아니오아니오VEXTRACTPS아니오아니오
VINSERTPSVINSERTPS
VPEXTRVPEXTRB, VPEXTRW, VPEXTRD, VPEXTRQ아니오
VPINSRVPINSRB, VPINSRW, VPINSRD, VPINSRQ
VPACKVPACKSSWB, VPACKSSDW, VPACKUSDW, VPACKUSWB아니오
VPADDVPADDB, VPADDW, VPADDD, VPADDQ, VPADDSB, VPADDSW, VPADDUSB, VPADDUSW
VPANDVPANDD, VPANDQ, VPANDND, VPANDNQ아니오
VPAVGVPAVGB, VPAVGW아니오
VPCMPVPCMPEQB, VPCMPEQW, VPCMPEQD, VPCMPEQQ, VPCMPGTB, VPCMPGTW, VPCMPGTD, VPCMPGTQ
VPMAXVPMAXSB, VPMAXSW, VPMAXSD, VPMAXSQ, VPMAXUB, VPMAXUW, VPMAXUD, VPMAXUQ
VPMINVPMINSB, VPMINSW, VPMINSD, VPMINSQ, VPMINUB, VPMINUW, VPMINUD, VPMINUQ
VPMOVVPMOVSXBW, VPMOVSXBD, VPMOVSXBQ, VPMOVSXWD, VPMOVSXWQ, VPMOVSXDQ, VPMOVZXBW, VPMOVZXBD, VPMOVZXBQ, VPMOVZXWD, VPMOVZXWQ, VPMOVZXDQ
VPMULVPMULDQ, VPMULUDQ, VPMULHRSW, VPMULHUW, VPMULHW, VPMULLD, VPMULLQ, VPMULLW
VPORVPORD, VPORQ아니오
VPSUBVPSUBB, VPSUBW, VPSUBD, VPSUBQ, VPSUBSB, VPSUBSW, VPSUBUSB, VPSUBUSW
VPUNPCKVPUNPCKHBW, VPUNPCKHWD, VPUNPCKHDQ, VPUNPCKHQDQ, VPUNPCKLBW, VPUNPCKLWD, VPUNPCKLDQ, VPUNPCKLQDQ
VPXORVPXORD, VPXORQ아니오
VPSADBWVPSADBW아니오
VPSHUFVPSHUFB, VPSHUFHW, VPSHUFLW, VPSHUFD, VPSLLDQ, VPSLLW, VPSLLD, VPSLLQ, VPSRAW, VPSRAD, VPSRAQ, VPSRLDQ, VPSRLW, VPSRLD, VPSRLQ, VPSLLVW, VPSLLVD, VPSLLVQ, VPSRLVW, VPSRLVD, VPSRLVQ, VPSHUFPD, VPSHUFPS
VEXTRACT아니오VEXTRACTF32X4, VEXTRACTF64X2, VEXTRACTF32X8, VEXTRACTF64X4, VEXTRACTI32X4, VEXTRACTI64X2, VEXTRACTI32X8, VEXTRACTI64X4아니오
VINSERTVINSERTF32x4, VINSERTF64X2, VINSERTF32X8, VINSERTF64x4, VINSERTI32X4, VINSERTI64X2, VINSERTI32X8, VINSERTI64X4
VPABSVPABSB, VPABSW, VPABSD, VPABSQ아니오
VPALIGNRVPALIGNR아니오
VPERMVPERMD, VPERMILPD, VPERMILPS, VPERMPD, VPERMPS, VPERMQ아니오
VPMADDVPMADDUBSW, VPMADDWD아니오
VFMADD아니오아니오VFMADD132PD, VFMADD213PD, VFMADD231PD, VFMADD132PS, VFMADD213PS, VFMADD231PS, VFMADD132SD, VFMADD213SD, VFMADD231SD, VFMADD132SS, VFMADD213SS, VFMADD231SS아니오
VFMADDSUBVFMADDSUB132PD, VFMADDSUB213PD, VFMADDSUB231PD, VFMADDSUB132PS, VFMADDSUB213PS, VFMADDSUB231PS
VFMSUBADDVFMSUBADD132PD, VFMSUBADD213PD, VFMSUBADD231PD, VFMSUBADD132PS, VFMSUBADD213PS, VFMSUBADD231PS
VFMSUBVFMSUB132PD, VFMSUB213PD, VFMSUB231PD, VFMSUB132PS, VFMSUB213PS, VFMSUB231PS, VFMSUB132SD, VFMSUB213SD, VFMSUB231SD, VFMSUB132SS, VFMSUB213SS, VFMSUB231SS
VFNMADDVFNMADD132PD, VFNMADD213PD, VFNMADD231PD, VFNMADD132PS, VFNMADD213PS, VFNMADD231PS, VFNMADD132SD, VFNMADD213SD, VFNMADD231SD, VFNMADD132SS, VFNMADD213SS, VFNMADD231SS
VFNMSUBVFNMSUB132PD, VFNMSUB213PD, VFNMSUB231PD, VFNMSUB132PS, VFNMSUB213PS, VFNMSUB231PS, VFNMSUB132SD, VFNMSUB213SD, VFNMSUB231SD, VFNMSUB132SS, VFNMSUB213SS, VFNMSUB231SS
VGATHERVGATHERDPS, VGATHERDPD, VGATHERQPS, VGATHERQPD
VPGATHERVPGATHERDD, VPGATHERDQ, VPGATHERQD, VPGATHERQQ
VPSRAVVPSRAVW, VPSRAVD, VPSRAVQ



7. AVX-512 지원 CPU

인텔의 나이츠 랜딩(Knights Landing)(제온 파이 x200)[1][13]은 AVX-512 F, CD, ER, PF를 지원한다. 나이츠 밀(Knights Mill)(제온 파이 x205)[14]은 AVX-512 F, CD, ER, PF, 4FMAPS, 4VNNIW, VPOPCNTDQ를 지원한다. 스카이레이크-SP, 스카이레이크-X[15][16][17]는 AVX-512 F, CD, VL, DQ, BW를 지원한다. 캐논 레이크[14]는 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을 지원한다. 아이스 레이크[14], 로켓 레이크[18][19]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES를 지원한다. 타이거 레이크 (펜티엄 및 셀러론 제외, 일부 리뷰어는 AVX-512를 지원하는 셀러론 6305의 CPU-Z 스크린샷을 가지고 있음[20][21])[22]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, VP2INTERSECT를 지원한다. 앨더 레이크 (인텔에서 공식적으로 지원하지 않으며, 최신 CPU에서는 완전히 제거됨)[23][24]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT, FP16을 지원한다. 사파이어 래피즈[25] 및 이후의 P코어 전용 제온 프로세서는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, FP16을 지원한다.

센타우어 테크놀로지의 "CNS" 코어 (8c/8t)[26][27]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI를 지원한다.

AMD젠 4[28][29][30][31][32]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16을 지원한다. 젠 5[33]는 AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT를 지원한다.

8. 성능 (Performance)

일부 프로세서(대부분 아이스 레이크 이전 인텔)에서 AVX-512 명령어는 이전 버전보다 더 큰 주파수 스로틀링을 유발하여 혼합 워크로드에 페널티를 줄 수 있다.[39][40][41] 추가적인 다운클럭킹은 벡터의 512비트 너비로 인해 발생하며 실행되는 명령의 특성에 따라 달라진다. AVX-512의 128 또는 256비트 부분(AVX-512VL)을 사용하면 트리거되지 않는다. 결과적으로, gcc와 Clang은 인텔 타겟에 대해 256비트 벡터를 선호하도록 기본 설정되어 있다.[39][40][41]

C/C++ 컴파일러는 AVX-512를 가장 효과적으로 사용하기 위해 루프 언롤링을 자동으로 처리하고 파이프라인의 스톨을 방지한다. 언어 내장 함수를 사용하여 AVX-512 사용을 강제하려는 프로그래머는 컴파일러가 생성한 코드에 비해 성능이 저하될 수 있다.[42] 다른 경우에는 C/C++ 코드에서 AVX-512 내장 함수를 사용하면 성능이 향상될 수 있다.[43]

인텔 벡터화 어드바이저(2017 버전부터)는 네이티브 AVX-512 성능 및 벡터 코드 품질 분석을 지원한다("Core", 제온 및 인텔 제온 파이 프로세서용). 어드바이저 설문 분석은 AVX-512 ISA 지표 및 새로운 AVX-512 관련 "특성"을 제공한다.[37][38]

9. 평가 (Reception)

AVX-512는 미디어 처리, 암호화, 비디오 게임[44], 신경망[45], 그리고 정렬 알고리즘에 AVX-512를 사용하는 OpenJDK를 포함하여 다양한 AVX-512 응용 프로그램의 예시가 있다.[46]

리누스 토르발스는 2020년에 AVX-512에 대해 "AVX-512가 고통스럽게 죽기를 바라며, 인텔이 벤치마크를 잘 보이게 하기 위해 마법 같은 명령어를 만드는 대신 실제 문제를 해결하기 시작했으면 좋겠다"고 비판적인 입장을 표명했다.[48] 그는 트랜지스터 수 예산을 추가적인 멀티 코어 프로세서와 정수 성능에 사용하는 것을 선호하며, 부동 소수점 벤치마크를 "혐오한다"고 밝혔다.[48]

누멘타는 자신들의 "매우 희소 네트워크"[49] 신경망 기술을 활용하여 AVX-512를 사용하는 CPU에서 알고리즘이 실행되므로 GPU가 필요 없다고 주장한다.[50] 이들은 Sparse Evolutionary Training (SET) 알고리즘[51] 및 Foresight Pruning과 같은 기술을 통해 정확도와 정밀도를 유지하면서 신경망의 크기를 줄여 A100에 비해 10배의 속도 향상을 달성했다고 주장한다.[52]

참조

[1] 웹사이트 AVX-512 Instructions https://software.int[...] Intel 2013-08-20
[2] 웹사이트 Intel Unveils AVX10 and APX Instruction Sets: Unifying AVX-512 For Hybrid Architectures https://www.anandtec[...] AnandTech 2024-08-21
[3] 웹사이트 Additional AVX-512 instructions https://software.int[...] Intel 2014-08-03
[4] 웹사이트 Intel 'Skylake' processors for PCs will not support AVX-512 instructions https://www.kitguru.[...] 2015-03-17
[5] 웹사이트 Intel will add deep-learning instructions to its processors https://lemire.me/bl[...] 2016-10-14
[6] 웹사이트 Intel Architecture Instruction Set Extensions Programming Reference https://software.int[...] Intel 2014-01-29
[7] 웹사이트 Inline asm docs incorrectly state that k0 (X86 AVX-512) is hard-wired to zero · Issue #94977 · rust-lang/Rust https://github.com/r[...]
[8] 웹사이트 AVX-512 Architecture/Demikhovsky Poster https://llvm.org/dev[...] Intel 2014-02-25
[9] 웹사이트 Intel® Deep Learning Boost https://www.intel.co[...] Intel 2021-10-11
[10] 웹사이트 Galois Field New Instructions (GFNI) Technology Guide https://networkbuild[...]
[11] 웹사이트 camellia-simd-aesni https://github.com/j[...] 2023-04-19
[12] 웹사이트 Intel® AVX512-FP16 Architecture Specification, June 2021, Revision 1.0, Ref. 347407-001US https://software.int[...] Intel 2021-07-04
[13] 웹사이트 Intel Xeon Phi Processor product brief https://www.intel.co[...] Intel 2016-10-12
[14] 웹사이트 Intel Architecture Instruction Set Extensions and Future Features Programming Reference https://software.int[...] Intel 2017-10-16
[15] 뉴스 Intel unveils X-series platform: Up to 18 cores and 36 threads, from $242 to $2,000 https://arstechnica.[...] 2017-05-30
[16] 웹사이트 Intel Advanced Vector Extensions 2015/2016: Support in GNU Compiler Collection https://gcc.gnu.org/[...] 2016-10-20
[17] 웹사이트 Intel's Xeon roadmap for 2016 leaks https://www.itworld.[...] 2016-10-20
[18] 웹사이트 Intel Core i9-11900K Review - World's Fastest Gaming Processor? https://www.techpowe[...] 2021-03-30
[19] 웹사이트 "Add rocketlake to gcc" commit https://gcc.gnu.org/[...]
[20] 웹사이트 Intel Celeron 6305 Processor (4M Cache, 1.80 GHz, with IPU) Product Specifications https://ark.intel.co[...] 2020-11-10
[21] 문서 # Citation 템플릿이므로 일반 문서로 처리 Laptop Murah Kinerja Boleh Diadu {{!}} HP 14S DQ2518TU https://www.youtube.[...] 2021-08-08
[22] 웹사이트 Using the GNU Compiler Collection (GCC): x86 Options https://gcc.gnu.org/[...] GNU 2019-10-14
[23] 웹사이트 The Intel 12th Gen Core i9-12900K Review: Hybrid Performance Brings Hybrid Complexity https://www.anandtec[...] 2021-11-05
[24] 웹사이트 Intel Core i9 12900K "Alder Lake" AVX-512 On Linux https://www.phoronix[...] 2021-11-08
[25] 웹사이트 AVX-512 Performance Comparison: AMD Genoa vs. Intel Sapphire Rapids & Ice Lake https://www.phoronix[...] 2023-01-19
[26] 웹사이트 The industry's first high-performance x86 SOC with server-class CPUs and integrated AI coprocessor technology https://centtech.com[...] 2022-08-02
[27] 웹사이트 x86, x64 Instruction Latency, Memory Latency and CPUID dumps (instlatx64) http://users.atw.hu/[...]
[28] 웹사이트 AMD Zen 4 Based Ryzen CPUs May Feature Up to 24 Cores, Support for AVX512 Vectors https://www.hardware[...] 2021-09-02
[29] 웹사이트 AMD working on a prodigious 96-core EPYC processor https://www.guru3d.c[...] 2021-05-18
[30] 웹사이트 Details on the Gigabyte Leak https://chipsandchee[...] 2022-06-10
[31] 웹사이트 AMD Answers Our Zen 4 Tech Questions, with Robert Hallock https://www.techpowe[...] 2022-05-26
[32] 웹사이트 AMD Zen 4 AVX-512 Performance Analysis On The Ryzen 9 7950X https://www.phoronix[...] 2022-09-26
[33] 웹사이트 AMD Zen 5 Compiler Support Posted For GCC - Confirms New AVX Features & More https://www.phoronix[...] 2024-02-10
[34] 웹사이트 Intel Nukes Alder Lake's AVX-512 Support, Now Fuses It Off in Silicon https://www.tomshard[...] 2022-03-07
[35] 웹사이트 Intel Architecture Day 2021: Alder Lake, Golden Cove, and Gracemont Detailed https://www.anandtec[...] 2021-08-25
[36] 웹사이트 Intel Architecture Day 2021: Alder Lake Chips, Golden Cove and Gracemont Cores https://www.tomshard[...] 2021-08-19
[37] 웹사이트 Intel Advisor XE 2016 Update 3 What's new - Intel Software https://software.int[...] 2016-10-20
[38] 웹사이트 Intel Advisor - Intel Software https://software.int[...] 2016-10-20
[39] 웹사이트 SIMD instructions lowering CPU frequency https://stackoverflo[...]
[40] 웹사이트 why does gcc auto-vectorization for tigerlake use ymm not zmm registers https://stackoverflo[...]
[41] 웹사이트 LLVM 10.0.0 Release Notes https://releases.llv[...]
[42] AV media Lightning Talk: How to Leverage SIMD Intrinsics for Massive Slowdowns - Matthew Kolbe - CppNow 2023 https://www.youtube.[...] C++Now 2023-10-10
[43] journal Transcoding unicode characters with AVX-512 instructions 2023-08-05
[44] 웹사이트 The RPCS3 PS3 emulator gets a hefty boost on Intel Alder Lake CPUs with AVX-512 enabled https://www.pcgamer.[...] PC Gamer 2023-10-11
[45] conference Lightweight Deep Learning Applications on AVX-512 https://ieeexplore.i[...] IEEE 2021-09-05
[46] 웹사이트 JDK-8309130: x86_64 AVX512 intrinsics for Arrays.sort methods (int, long, float and double arrays) https://bugs.openjdk[...] OpenJDK 2023-10-11
[47] 웹사이트 Linus Torvalds: I hope Intel's AVX-512 dies a painful death https://www.zdnet.co[...] ZDNet 2023-10-11
[48] 웹사이트 Alder Lake and AVX-512 https://www.realworl[...] 2023-10-11
[49] 웹사이트 Sparsity Enables 100x Performance Acceleration in Deep Learning Networks: A Technology Demonstration https://www.numenta.[...] 2023-10-11
[50] 웹사이트 A tiny startup has helped Intel trounce AMD and Nvidia in critical AI tests — is it game over already? https://www.techrada[...] TechRadar 2023-10-11
[51] journal Scalable training of artificial neural networks with adaptive sparse connectivity inspired by network science 2018
[52] 웹사이트 The Case for Sparsity in Neural Networks, Part 2: Dynamic Sparsity https://www.numenta.[...] 2023-10-11
[53] 웹인용 AVX-512 Instructions https://software.int[...] Intel 2013-07-23

관련 사건 타임라인

( 최근 20개의 뉴스만 표기 됩니다. )



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com