고급 벡터 확장 - Advanced Vector Extensions

고급 벡터 확장 ( AVX 라고도 샌디 브릿지의 새로운 확장 )에 대한 확장되어 86 명령어 세트 아키텍처 를위한 마이크로 프로세서 에서 인텔AMD 2008 년 3 월 인텔이 제안한 먼저 인텔에서 지원하는 샌디 브리지 (Sandy Bridge) [1] Q1의 프로세서 배송 2011 년 이후 AMD는 2011 년 3 분기에 Bulldozer [2] 프로세서를 출시했습니다. AVX는 새로운 기능, 새로운 지침 및 새로운 코딩 체계를 제공합니다.

AVX2 ( Haswell New Instructions 라고도 함 )는 대부분의 정수 명령을 256 비트로 확장하고 FMA (fused multiply-accumulate ) 작업을 도입 합니다. 2013 년에 출시 된 Haswell 프로세서로 Intel에서 처음 지원했습니다.

AVX-512 는 2013 년 7 월 Intel에서 제안한 새로운 EVEX 접두사 인코딩을 사용하여 AVX를 512 비트 지원으로 확장 하고 2016 년에 출시 된 Knights Landing 프로세서 로 Intel에서 처음 지원합니다 . [3] [4]

고급 벡터 확장

AVX는 16 개의 YMM 레지스터를 사용하여 여러 데이터 조각에 대한 단일 명령어를 수행합니다 ( SIMD 참조 ). 각 YMM 레지스터는 다음에 대한 동시 연산 (수학)을 보유하고 수행 할 수 있습니다.

  • 8 개의 32 비트 단 정밀도 부동 소수점 숫자 또는
  • 4 개의 64 비트 배정 밀도 부동 소수점 숫자.

SIMD 레지스터의 너비는 128 비트에서 256 비트로 증가하고 XMM0–XMM7에서 YMM0–YMM7 ( x86-64 모드에서 XMM0–XMM15에서 YMM0–YMM15로)으로 이름이 변경되었습니다. 레거시 SSE 명령어는 VEX 접두사통해 여전히 활용 되어 YMM 레지스터의 하위 128 비트에서 작동 할 수 있습니다 .

AVX (YMM0-YMM15) 및 SSE (XMM0-XMM15) 레지스터에서 확장 된 AVX-512 레지스터 체계
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는 대상 레지스터가 두 소스 피연산자와 구별되는 3 연산 SIMD 명령어 형식을 도입했습니다. 예를 들어, 기존의 두 피연산자 형식 a = a + b를 사용 하는 SSE 명령어 는 이제 비파괴 세 피연산자 형식 c = a + b 를 사용하여 두 소스 피연산자를 모두 유지할 수 있습니다 . AVX의 3 개 피연산자 형식은 SIMD 피연산자 (YMM)가있는 명령어로 제한되며 범용 레지스터 (예 : EAX)가있는 명령어는 포함되지 않습니다. 이러한 지원은 먼저 AVX2에 나타납니다. [5]

SIMD 메모리 피연산자 정렬 요구 사항이 완화되었습니다. [6]

새로운 VEX 코딩 체계opcode 공간 을 확장하고 명령어가 두 개 이상의 피연산자를 가질 수 있도록하고 SIMD 벡터 레지스터가 128 비트보다 길도록 하는 새로운 코드 접두사 세트를 도입합니다 . VEX 접두사는 레거시 SSE 명령어에서도 사용할 수 있으며 3 개 피연산자 형식을 제공하고 VZEROUPPER 및 VZEROALL 없이도 AVX 명령어와보다 효율적으로 상호 작용할 수 있습니다.

AVX 명령어는 128 비트 및 256 비트 SIMD를 모두 지원합니다. 128 비트 버전은 벡터화를 확장 할 필요없이 이전 코드를 개선하는 데 유용 할 수 있으며 SSE에서 AVX로 이동하는 패널티를 피할 수 있으며 일부 초기 AMD 구현에서 AVX가 더 빠릅니다. 이 모드는 때때로 AVX-128로 알려져 있습니다. [7]

새로운 지침

이러한 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 프로세서 아키텍처에서 메모리 소스 피연산자가있는이 명령어는 마스크가 0 일 때 300 클럭 사이클 이상이 걸리며,이 경우 명령어는 아무 작업도 수행하지 않아야합니다. 이것은 디자인 결함으로 보입니다. [8]
VPERMILPS, VPERMILPD Permute In-Lane. 한 입력 피연산자의 32 비트 또는 64 비트 벡터 요소를 섞습니다. 이는 레인 내 256 비트 명령어입니다. 즉, 두 개의 개별 128 비트 셔플이있는 모든 256 비트에서 작동하므로 128 비트 레인에서 셔플 할 수 없습니다. [9]
VPERM2F128 2 개의 256 비트 소스 피연산자의 128 비트 벡터 요소 4 개를 즉시 상수를 선택 자로 사용하여 256 비트 대상 피연산자로 섞습니다.
VZEROALL 모든 YMM 레지스터를 0으로 설정하고 사용하지 않은 것으로 태그를 지정합니다. 128 비트 사용과 256 비트 사용간에 전환 할 때 사용됩니다.
VZEROUPPER 모든 YMM 레지스터의 위쪽 절반을 0으로 설정합니다. 128 비트 사용과 256 비트 사용간에 전환 할 때 사용됩니다.

AVX가있는 CPU

나열된 제품군의 모든 CPU가 AVX를 지원하는 것은 아닙니다. 일반적으로 상용 명칭 인 "Core i3 / i5 / i7 / i9"의 CPU는이를 지원하지만 "Pentium"및 "Celeron"CPU는 지원하지 않습니다.

향후 Intel 및 AMD 프로세서 간의 호환성에 관한 문제는 XOP 명령 세트에서 설명 합니다 .

  • VIA :
    • 나노 쿼드 코어
    • 에덴 X4
  • 자 오신 :
    • WuDaoKou 기반 프로세서 (KX-5000 및 KH-20000)

컴파일러 및 어셈블러 지원

  • Absoft 는 -mavx 플래그를 지원합니다.
  • 무료 파스칼 컴파일러는 -CfAVX와 AVX 및 AVX2를 지원하고 -CfAVX2 버전 2.7.1에서 전환됩니다.
  • GNU 어셈블러 (GAS)는 인라인 어셈블리 기능 (더 일반적인하지만 인라인 코드 내 로컬 참조의 그것의 처리에서, 가스 밀접하게 호환) (GCC를 통해 액세스)이 지침은, 같은 인텔 프리미티브 및 인텔 인라인 어셈블러을 지원합니다.
  • 버전 4.6부터 시작되는 GCC (특정 지원을 포함하는 4.3 브랜치가 있었음에도 불구하고)와 버전 11.1부터 시작하는 인텔 컴파일러 스위트는 AVX를 지원합니다.
  • Open64 컴파일러 버전 4.5.1 지원은 -mavx 플래그 AVX.
  • 패스 스케일 -mavx 플래그를 통해 지원합니다.
  • 벡터 파스칼 컴파일러는 -cpuAVX32 플래그를 통해 AVX를 지원합니다.
  • 비주얼 스튜디오 2010 년 / 2012 년 AVX 스위치 : 컴파일러는 고유 및 / 아치를 통해 AVX를 지원합니다.
  • MASM VS2010 버전, YASM , [15] FASM , NASMJWASM같은 기타 어셈블러 .

운영 체제 지원

AVX는 256 비트 너비의 YMM 레지스터 파일을 통해 새로운 레지스터 상태를 추가하므로 컨텍스트 스위치 간에 AVX의 확장 된 레지스터를 올바르게 저장하고 복원하려면 명시적인 운영 체제 지원이 필요 합니다 . 다음 운영 체제 버전은 AVX를 지원합니다.

고급 벡터 확장 2

고급 벡터 확장 2로도 알려져 있습니다 (AVX2), 하 스웰 새로운 지침 , [5] 인텔에 소개 된 AVX 명령어 세트의 확장이다 스웰 마이크로 아키텍처 . AVX2는 다음을 추가합니다.

  • 대부분의 벡터 정수 SSE 및 AVX 명령어를 256 비트로 확장
  • 3 연산 범용 비트 조작 및 곱하기
  • 연속되지 않은 메모리 위치에서 벡터 요소를로드 할 수 있도록 지원 수집
  • DWORD- 및 QWORD- 세분성 any-to-any 순열
  • 벡터 이동.

때로는 다른 cpuid 플래그를 사용하는 다른 확장이 AVX2의 일부로 간주됩니다. 이러한 지침은 아래가 아닌 자체 페이지에 나열되어 있습니다.

새로운 지침

교수 기술
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 비트 소스 피연산자의 32 비트 벡터 요소 8 개를 레지스터 또는 메모리 피연산자를 선택 자로 사용하여 256 비트 대상 피연산자로 섞습니다.
VPERMPD, VPERMQ 하나의 256 비트 소스 피연산자의 64 비트 벡터 요소 4 개를 레지스터 또는 메모리 피연산자를 선택 자로 사용하여 256 비트 대상 피연산자로 섞습니다.
VPERM2I128 256 비트 소스 피연산자 2 개의 128 비트 벡터 요소 4 개를 256 비트 대상 피연산자로 섞습니다 (즉시 상수를 선택 자로 사용).
VPBLENDD SSE4 에서 PBLEND 명령어의 더블 워드 즉시 버전 .
VPSLLVD, VPSLLVQ 논리적으로 왼쪽으로 이동합니다. 패킹 된 입력에 따라 각 요소가 이동되는 변수 이동을 허용합니다.
VPSRLVD, VPSRLVQ 논리적으로 오른쪽으로 이동합니다. 패킹 된 입력에 따라 각 요소가 이동되는 변수 이동을 허용합니다.
VPSRAVD 산술적으로 오른쪽으로 이동합니다. 패킹 된 입력에 따라 각 요소가 이동되는 변수 이동을 허용합니다.

AVX2가있는 CPU

  • 인텔
    • Haswell 프로세서 (Core 및 Xeon 브랜드 만 해당), 2013 년 2 분기
    • Haswell E 프로세서, 2014 년 3 분기
    • Broadwell 프로세서, 2014 년 4 분기
    • Broadwell E 프로세서, 2016 년 3 분기
    • Skylake 프로세서 (Core 및 Xeon 브랜드 만 해당), 2015 년 3 분기
    • Kaby Lake 프로세서 (Core 및 Xeon 브랜드 만 해당), 2016 년 3 분기 (ULV 모바일) / 2017 년 1 분기 (데스크톱 / 모바일)
    • Skylake-X 프로세서, 2017 년 2 분기
    • Coffee Lake 프로세서 (Core 및 Xeon 브랜드 만 해당), 2017 년 4 분기
    • Cannon Lake 프로세서, 2018 년 2 분기
    • Cascade Lake 프로세서, 2019 년 2 분기
    • Ice Lake 프로세서, 2019 년 3 분기
    • Comet Lake 프로세서 (Core 및 Xeon 브랜드 만 해당), 2019 년 3 분기
    • Tiger Lake (Core, Pentium 및 Celeron 브랜드 [23] ) 프로세서, 2020 년 3 분기
    • Rocket Lake 프로세서, 2021
    • Alder Lake 프로세서, 2021
  • AMD
    • 굴삭기 프로세서 이상, 2015 년 2 분기
    • Zen 프로세서, 2017 년 1 분기
    • Zen + 프로세서, 2018 년 2 분기
    • Zen 2 프로세서, 2019 년 3 분기
    • Zen 3 프로세서, 2020
  • VIA :
    • 나노 쿼드 코어
    • 에덴 X4

AVX-512

AVX-5122013 년 7 월 Intel 에서 제안한 x86 명령어 세트 아키텍처 용 256 비트 Advanced Vector Extensions SIMD 명령어에 대한 512 비트 확장 이며 Intel의 Knights Landing 프로세서 에서 지원됩니다 . [삼]

AVX-512 명령어는 새로운 EVEX 접두사 로 인코딩됩니다 . 4 개의 피연산자, 7 개의 새로운 64 비트 opmask 레지스터, 자동 브로드 캐스트가있는 스칼라 메모리 모드, 명시 적 반올림 제어 및 압축 변위 메모리 주소 지정 모드를 허용합니다 . x86-64 모드에서는 레지스터 파일의 너비가 512 비트로 증가하고 총 레지스터 수가 32 (레지스터 ZMM0-ZMM31)로 증가합니다.

AVX-512는이를 구현하는 모든 프로세서에서 모두 지원할 수있는 것은 아닙니다. 명령어 세트는 다음으로 구성됩니다.

  • AVX-512 Foundation – 몇 가지 새로운 명령어를 추가하고 대부분의 32 비트 및 64 비트 부동 소수점 SSE-SSE4.1 및 AVX / AVX2 명령어를 EVEX 코딩 체계로 확장하여 512 비트 레지스터, 작동 마스크, 매개 변수 브로드 캐스팅 및 포함 된 반올림 및 예외 제어
  • AVX-512 충돌 감지 지침 (CD) – 더 많은 루프를 벡터화 할 수있는 효율적인 충돌 감지, Knights Landing [3]
  • AVX-512 Exponential and Reciprocal Instructions (ER) – Knights Landing에서 지원하는 초월 적 연산을 구현하도록 설계된 지수 및 상호 연산 [3]
  • AVX-512 프리 페치 지침 (PF) – Knights Landing에서 지원하는 새로운 프리 페치 기능 [3]
  • AVX-512 벡터 길이 확장 (VL)은 -도 XMM (128 비트)와 YMM (256 비트) (XMM16-XMM31 및 - 64 모드 YMM16-YMM31 포함) 레지스터들에서 동작하는 것이 가장 AVX-512 연산 연장 [ 24]
  • AVX-512 바이트 및 워드 명령어 (BW) – 8 비트 및 16 비트 정수 연산을 포함하도록 AVX-512 확장 [24]
  • AVX-512 더블 워드 및 쿼드 워드 명령어 (DQ) – 향상된 32 비트 및 64 비트 정수 연산 [24]
  • AVX-512 IFMA ( Integer Fused Multiply Add ) – 512 비트 정수에 대한 융합 곱하기 더하기. [25] : 746
  • AVX-512 VBMI (Vector Byte Manipulation Instructions)는 AVX-512BW에없는 벡터 바이트 순열 명령을 추가합니다.
  • AVX-512 벡터 신경망 명령어 워드 가변 정밀도 (4VNNIW) – 딥 러닝을위한 벡터 명령어.
  • AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) – 딥 러닝을위한 벡터 명령어.
  • VPOPCNTDQ – 1로 설정된 비트 수 [26]
  • VPCLMULQDQ – quadwords의 캐리리스 곱셈. [26]
  • AVX-512 벡터 신경망 명령어 (VNNI) – 딥 러닝을위한 벡터 명령어입니다. [26]
  • AVX-512 Galois field New Instructions (GFNI)Galois 필드 를 계산하기위한 벡터 명령어입니다 . [26]
  • AVX-512 벡터 AES 명령어 (VAES)AES 코딩을 위한 벡터 명령어입니다 . [26]
  • AVX-512 벡터 바이트 조작 명령어 2 (VBMI2) – 바이트 / 워드로드, 저장 및 시프트와 연결. [26]
  • AVX-512 Bit Algorithms (BITALG)VPOPCNTDQ를 확장하는 바이트 / 워드 비트 조작 명령. [26]

모든 현재 프로세서는 CD (충돌 감지)도 지원하지만 핵심 확장 AVX-512F (AVX-512 Foundation) 만 모든 구현에 필요합니다. 컴퓨팅 코 프로세서는 ER, PF, 4VNNIW, 4FMAPS 및 VPOPCNTDQ를 추가로 지원하고 데스크톱 프로세서는 VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ 등을 지원합니다.

AVX-512F의 업데이트 된 SSE / AVX 명령어는 AVX 버전과 동일한 니모닉을 사용합니다. 512 비트 ZMM 레지스터에서 작동 할 수 있으며 128/256 비트 XMM / YMM 레지스터 (AVX-512VL 포함)와 바이트, 워드, 더블 워드 및 쿼드 워드 정수 피연산자 (AVX-512BW / DQ 및 VBMI 포함)도 지원합니다. [25] : 23

AVX-512가있는 CPU

AVX-512 서브셋 에프 CD ER PF 4FMAPS 4VNNIW VL DQ BW IFMA VBMI VBMI2 VPOPCNTDQ BITALG VNNI VPCLMULQDQ GFNI VAES
Intel Knights Landing (2016) 아니
인텔 나이츠 밀 (2017) 아니 아니
Intel Skylake-SP , Skylake-X (2017) 아니 아니
인텔 캐논 레이크 (2018) 아니
Intel Cascade Lake-SP (2019) 아니 아니
인텔 아이스 레이크 (2019)

[27]

2020 년 현재, AVX-512를 지원하는 AMD CPU는 없으며 AMD는 아직 AVX-512 지원 계획을 발표하지 않았습니다.

AVX-512를 지원하는 컴파일러

응용

  • 멀티미디어, 과학 및 금융 애플리케이션에서 부동 소수점 집약적 인 계산에 적합 합니다 (AVX2는 정수 연산에 대한 지원을 추가 함 ).
  • 부동 소수점 SIMD 계산 에서 병렬 처리 및 처리량을 증가시킵니다 .
  • 비파괴적인 명령으로 인해 레지스터로드를 줄입니다.
  • Linux RAID 소프트웨어 성능 향상 (필수 AVX2, AVX로는 충분하지 않음) [36]

소프트웨어

  • StarCitizen (게임) 버전 3.11부터 AVX를 사용하기 위해 StarCitizens 최소 요구 사항이 업데이트되었으며, 게임 엔진은 현재 DirectX 11을 사용하고 있지만 수정 된 Lumberyard 엔진에서 사용할 Vulkan API 지원을 개발하고 있습니다.
  • 블렌더 는 렌더 엔진 사이클에서 AVX2를 사용합니다.
  • Botan 은 가능한 경우 AVX와 AVX2를 모두 사용하여 ChaCha와 같은 일부 알고리즘을 가속화합니다.
  • Crypto ++ 는 사용 가능한 경우 AVX와 AVX2를 모두 사용하여 Salsa 및 ChaCha와 같은 일부 알고리즘을 가속화합니다.
  • OpenSSL 은 버전 1.0.2부터 AVX 및 AVX2에 최적화 된 암호화 기능을 사용합니다. [37] 이 지원은 LibreSSL 같은 다양한 클론 포크에 존재
  • GIMPS에 사용되는 소프트웨어 인 Prime95 / MPrime은 27.x 버전부터 AVX 명령어를 사용하기 시작했습니다.
  • dav1d AV1 디코더는 지원되는 CPU에서 AVX2를 사용할 수 있습니다. [38]
  • Distributed.net 에서 사용하는 소프트웨어 인 dnetc 는 RC5 프로젝트에 사용할 수있는 AVX2 코어를 가지고 있으며 곧 OGR-28 프로젝트를 위해 하나를 출시 할 예정입니다.
  • Einstein @ Home중력파 를 검색하는 일부 분산 응용 프로그램에서 AVX를 사용합니다 . [39]
  • Folding @ homeGROMACS 라이브러리로 구현 된 계산 코어에서 AVX를 사용 합니다.
  • Horizon : Zero Dawn 은 Decima (게임 엔진)에서 AVX1을 사용하며 게임에서 사용하는 엔진입니다.
  • 오픈 소스 PlayStation 3 에뮬레이터 인 RPCS3 는 AVX2 및 AVX-512 명령을 사용하여 PS3 게임을 에뮬레이션합니다.
  • 라이브 방송 제작을 위해 NewTek에서 개발 한 IP 비디오 / 오디오 프로토콜 인 Network Device Interface 는 성능 향상을 위해 AVX 및 AVX2를 사용합니다.
  • 버전 1.6 이후의 TensorFlow 및 버전 이상의 tensorflow에는 최소 AVX를 지원하는 CPU가 필요합니다. [40]
  • x264 , x265VTM 비디오 인코더는 AVX2 또는 AVX-512를 사용하여 인코딩 속도를 높일 수 있습니다.
  • 다양한 CPU 기반 암호 화폐 채굴 기 (예 : BitcoinLitecoin 용 pooler의 cpuminer )는 SHA-256scrypt를 비롯한 다양한 암호화 관련 루틴에 AVX 및 AVX2를 사용 합니다.
  • libsodiumCurve25519Ed25519 알고리즘에 대한 스칼라 곱셈 구현에 AVX를 사용 하고, Argon2 알고리즘 구현에 BLAKE2b , Salsa20 , ChaCha20 및 AVX2 및 AVX-512에 대한 AVX2를 사용합니다.
  • VP8 / VP9 인코더 / 디코더의 libvpx 오픈 소스 참조 구현은 가능한 경우 AVX2 또는 AVX-512를 사용합니다.
  • FFTW 는 가능한 경우 AVX, AVX2 및 AVX-512를 사용할 수 있습니다.
  • Gallium 및 LLVM 인프라를 사용하는 Mesa 의 소프트웨어 OpenGL 렌더러 인 LLVMpipe 는 가능한 경우 AVX2를 사용합니다.
  • glibc는은 (AVX2 함께 사용 FMA을 최적화 구현 (예를 위해) expf, sinf, powf, atanf, atan2f다양한 수학적 함수) 의 libc .
  • Linux 커널AES-GCM 암호화 알고리즘 의 최적화 된 구현으로 AES- NI와 함께 AVX 또는 AVX2를 사용할 수 있습니다 .
  • Linux 커널Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 및 기타 기본 요소 : Poly1305 , SHA-1 , SHA-256 , SHA-512 , ChaCha20 .
  • OpenCL 구현을 제공하는 포터블 컴퓨팅 언어 인 POCL은 가능한 경우 AVX, AVX2 및 AVX512를 사용합니다.
  • .NET Core.NET Framework 는 일반 System.Numerics.Vectors네임 스페이스를 통해 AVX, AVX2를 활용할 수 있습니다 .
  • .NET Core 는 버전 2.1부터 시작하여 버전 3.0 이후에 더욱 광범위하게 System.Runtime.Intrinsics.X86네임 스페이스를 통해 모든 AVX, AVX2 내장 함수를 직접 사용할 수 있습니다 .
  • EmEditor 19.0 이상은 처리 속도를 높이기 위해 AVX-2를 사용합니다. [41]
  • Native Instruments의 Massive X softsynth에는 AVX가 필요합니다. [42]
  • Microsoft Teams 는 AVX2 지침을 사용하여 화상 채팅 참가자 뒤에 흐릿하거나 사용자 지정 배경을 만듭니다. [43]
  • simdjson JSON 구문 분석 라이브러리는 AVX2를 사용하여 디코딩 속도를 향상시킵니다. [44]

다운 클럭킹

AVX 명령어는 더 넓고 더 많은 열을 생성하기 때문에 인텔 프로세서는 이러한 명령어가 실행될 때 터보 부스트 주파수 제한 을 줄일 수 있습니다. 스로틀 링은 세 가지 수준으로 나뉩니다. [45] [46]

  • L0 (100 %) : 일반 터보 부스트 제한.
  • L1 (~ 85 %) : "AVX 부스트"한계. 256 비트 "heavy"(부동 소수점 단위 : FP 수학 및 정수 곱셈) 명령에 의해 소프트 트리거됩니다. "light"(기타 모든) 512 비트 명령어에 의해 하드 트리거됩니다.
  • L2 (~ 60 %) : "AVX-512 부스트"한계. 512 비트 무거운 명령어에 의해 소프트 트리거됩니다.

주파수 전환은 부드럽거나 어려울 수 있습니다. 하드 전환은 그러한 명령이 발견되는 즉시 주파수가 감소 함을 의미합니다. 소프트 전환은 일치 명령의 임계 값에 도달 한 후에 만 ​​주파수가 감소 함을 의미합니다. 제한은 스레드 당입니다. [45]

다운 클럭킹은 인텔 프로세서와 혼합 된 워크로드에서 AVX를 사용하면 "순수한"컨텍스트에서 더 빠르더라도 주파수 패널티가 발생할 수 있음을 의미합니다. 넓고 무거운 명령을 사용하지 않으면 이러한 경우에 미치는 영향을 최소화하는 데 도움이됩니다. AVX-512VL을 사용하면 AVX-512에서 256 비트 또는 128 비트 피연산자를 사용할 수 있으므로 혼합로드에 대해 합리적인 기본값이됩니다. [47]

또한보십시오

참고 문헌

  1. Kanter, David (2010 년 9 월 25 일). "인텔의 Sandy Bridge 마이크로 아키텍처" . www.realworldtech.com . 만회 년 2 월 (17), 2018 .
  2. Hruska, Joel (2011 년 10 월 24 일). "불도저 분석 : AMD 칩이 실망스러운 이유-페이지 4/5-ExtremeTech" . ExtremeTech . 만회 년 2 월 (17), 2018 .
  3. ^ a b c d e James Reinders (2013 년 7 월 23 일), AVX-512 Instructions , Intel , 2013 년 8 월 20 일 검색
  4. ^ "Intel Xeon Phi 프로세서 7210 (16GB, 1.30GHz, 64 코어) 제품 사양" . Intel ARK (제품 사양) . 만회 년 3 월 (16), 2018 .
  5. ^ a b Haswell 새로운 지침 설명 지금 사용 가능 , Software.intel.com , 2012 년 1 월 17 일 검색
  6. "14.9". Intel 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서 볼륨 1 : 기본 아키텍처 (PDF) (-051US ed.). 인텔사. 피. 349 . 만회 년 8 월 (23), 2014 년 . VEX 접두사가있는 대부분의 명령어에 대한 메모리 인수는 기존 SSE 명령어와 달리 바이트 단위 정렬에서 #GP (0)를 발생시키지 않고 정상적으로 작동합니다.
  7. ^ "i386 및 x86-64 옵션-GCC (GNU 컴파일러 컬렉션) 사용" . 검색된 년 2 월 (9), 2014 년 .
  8. ^ "The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers" (PDF). Retrieved October 17, 2016.
  9. ^ "Chess programming AVX2". Retrieved October 17, 2016.
  10. ^ "Intel Offers Peek at Nehalem and Larrabee". ExtremeTech. March 17, 2008.
  11. ^ "Intel Core i7-3960X Processor Extreme Edition". Retrieved January 17, 2012.
  12. ^ "인텔 ® 셀러론 ® 6305 프로세서 (4M 캐시, 1.80GHz, IPU 포함) 제품 사양" . ark.intel.com . 만회 년 11 월 (10), 2020 .
  13. Dave Christie (2009 년 5 월 7 일), Striking a balance , AMD 개발자 블로그 , 2013 년 11 월 9 일 원본 에서 보관 됨 , 2012 년 1 월 17 일 검색
  14. ^ 새로운 "Bulldozer"및 "Piledriver"지침 (PDF) , AMD, 2012 년 10 월
  15. ^ "YASM 0.7.0 릴리스 정보" . yasm.tortall.net .
  16. ^ 네이티브 64 비트에 대한 확장 FPU의 AMD64에서 국가 모두에 대한 추가 지원 및 32 비트 ABI는 , svnweb.freebsd.org 년 1 월 21 일 2012 년 , 검색 년 1 월 (22), 2012 년
  17. ^ "FreeBSD 9.1-RELEASE 발표" . 만회하는 5 월 (20), 2013 .
  18. ^ x86 : YMM 상태에 대한 리눅스 커널 지원 추가 , 2009 년 7 월 13 일 검색
  19. Linux 2.6.30-Linux Kernel Newbies , 2009 년 7 월 13 일 검색
  20. Twitter , 2010 년 6 월 23 일 검색 [ 신뢰할 수없는 출처? ]
  21. ^ XSAVE / XRSTOR를 사용하여 FPU 상태 저장 / 복원 지원을 추가합니다. , 2015 년 3 월 25 일 검색
  22. ^ 64 비트 드라이버에 대한 부동 소수점 지원 , 2009 년 12 월 6 일 검색
  23. ^ "인텔 ® 셀러론 ® 6305 프로세서 (4M 캐시, 1.80GHz, IPU 포함) 제품 사양" . ark.intel.com . 만회 년 11 월 (10), 2020 .
  24. a b c James Reinders (2014 년 7 월 17 일). "추가 AVX-512 지침" . 인텔 . 검색된 년 8 월 3, 2014 년 .
  25. ^ a b "인텔 아키텍처 명령 세트 확장 프로그래밍 참조" (PDF) . 인텔 . 만회 년 1 월 (29), 2014 년 .
  26. ^ a b c d e f g "인텔 ® 아키텍처 명령 세트 확장 및 향후 기능 프로그래밍 참조" . 인텔 . 만회 년 10 월 (16), 2017 년 .
  27. ^ "인텔 ® 소프트웨어 개발 에뮬레이터 | 인텔 ® 소프트웨어" . software.intel.com . 만회 년 6 월 (11), (2016) .
  28. ^ "GCC 4.9 릴리스 시리즈-변경, 새로운 기능 및 수정-GNU 프로젝트-자유 소프트웨어 재단 (FSF)" . gcc.gnu.org . 검색된 년 4 월 3, 2017 년 .
  29. ^ "LLVM 3.9 릴리스 노트 — LLVM 3.9 문서" . releases.llvm.org . 검색된 년 4 월 3, 2017 년 .
  30. ^ "인텔 ® 패러렐 스튜디오 XE 2015 컴포저 에디션 C ++ 릴리스 노트 | 인텔 ® 소프트웨어" . software.intel.com . 검색된 년 4 월 3, 2017 년 .
  31. ^ "Microsoft Visual Studio 2017은 Intel® AVX-512를 지원합니다" .
  32. ^ "JDK 9 릴리스 노트" .
  33. ^ "Go 1.11 릴리스 노트" .
  34. ^ "Julia에있는 Demystifying 자동 벡터화" . juliacomputing.com . 2017 년 9 월 27 일 . 만회 년 4 월 (11), 2020 .
  35. ^ "[ANN] LoopVectorization" . JuliaLang . 2020 년 1 월 1 일 . 만회 년 4 월 (11), 2020 .
  36. ^ "리눅스 RAID" . LWN. 2 월 17 일에서 2013 년 보관 원래 2013년 4월 15일합니다.
  37. ^ "OpenSSL 성능 향상" . 2015 년 5 월 26 일 . 만회 년 2 월 (28), 2017 .
  38. ^ "dav1d : 첫 번째 릴리스의 성능 및 완료" . 2018 년 11 월 21 일 . 만회 년 11 월 (22), 2018 .
  39. ^ "Einstein @ Home 신청" .
  40. "Tensorflow 1.6" .
  41. ^ 버전 19.0의 새로운 기능 – 엠 에디터 (텍스트 편집기)
  42. ^ "MASSIVE X에는 AVX 호환 프로세서가 필요합니다" . 네이티브 인스트루먼트 . 만회 년 11 월 (29), 2019 .
  43. ^ "Microsoft Teams에 대한 하드웨어 요구 사항" . Microsoft . 만회 년 4 월 (17), 2020 .
  44. Langdale, Geoff; Lemire, Daniel (2019). "초당 JSON 파싱 기가 바이트". arXiv : 1902.08318 [ cs.DB ].
  45. ^ a b Lemire, Daniel. "AVX-512 :이 새로운 지침을 사용하는시기 및 방법" . Daniel Lemire의 블로그 .
  46. BeeOnRope. "CPU 주파수를 낮추는 SIMD 명령" . 스택 오버플로 .
  47. ^ "x86-AVX 512 대 간단한 어레이 처리 루프를위한 AVX2 성능" . 스택 오버플로 .

외부 링크