AVX-512

Расширение набора инструкций от Intel

AVX-512 — это 512-битные расширения 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора инструкций x86 (ISA), предложенные Intel в июле 2013 года и впервые реализованные в Intel Xeon Phi x200 2016 года (Knights Landing), [1] , а затем в ряде процессоров AMD и других Intel (см. список ниже). AVX-512 состоит из нескольких расширений, которые могут быть реализованы независимо. [2] Эта политика является отходом от исторического требования реализации всего блока инструкций. Для всех реализаций AVX-512 требуется только основное расширение AVX-512F (AVX-512 Foundation).

Помимо расширения большинства 256-битных инструкций, расширения вводят различные новые операции, такие как новые преобразования данных, операции разброса и перестановки. [2] Количество регистров AVX увеличено с 16 до 32, и добавлены восемь новых «регистров масок», которые позволяют выбирать переменные и смешивать результаты инструкций. В процессорах с расширением длины вектора (VL), включенным в большинство процессоров с поддержкой AVX-512 (см. § Процессоры с AVX-512), эти инструкции также могут использоваться для векторов размером 128 и 256 бит.

AVX-512 — не первый набор 512-битных инструкций SIMD, который Intel представила в процессорах: более ранние 512-битные инструкции SIMD, использовавшиеся в сопроцессорах Xeon Phi первого поколения, полученные из проекта Larrabee компании Intel , похожи, но несовместимы на уровне двоичного кода и совместимы лишь частично на уровне исходного кода. [1]

Преемником AVX-512 является AVX10 , анонсированный в июле 2023 года [3] , который будет работать как на ядрах производительности, так и на ядрах эффективности .

Набор инструкций

Набор инструкций AVX-512 состоит из нескольких отдельных наборов, каждый из которых имеет свой собственный уникальный бит CPUID. Однако они обычно группируются по поколению процессоров, которое их реализует.

F, CD, ER, PF:   представлены в Xeon Phi x200 (Knights Landing) и Xeon Gold/Platinum ( Skylake SP "Purley"), причем последние два (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 и Cannon Lake .

  • Расширения длины вектора AVX-512 (VL)  – расширяют большинство операций AVX-512 для работы с регистрами XMM (128 бит) и YMM (256 бит) [4]
  • Инструкции AVX-512 Doubleword и Quadword (DQ)  – добавляют новые 32- и 64-битные инструкции AVX-512 [4]
  • Инструкции AVX-512 Byte and Word (BW)  – расширяют AVX-512 для охвата 8-битных и 16-битных целочисленных операций [4]

IFMA, VBMI:   введены с Cannon Lake . [5]

  • AVX-512 Integer Fused Multiply Add (IFMA) – комбинированное умножение целых чисел с точностью 52 бита.
  • Инструкции по манипулированию векторными байтами AVX-512 (VBMI) добавляют инструкции по перестановке векторных байтов, которые отсутствовали в AVX-512BW.

4VNNIW, 4FMAPS:   введены в Knights Mill . [6] [7]

  • Векторные инструкции нейронной сети AVX-512, переменная точность слов (4VNNIW) — векторные инструкции для глубокого обучения, улучшенные слова, переменная точность.
  • AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) — векторные инструкции для глубокого обучения, с плавающей точкой, с одинарной точностью.

VPOPCNTDQ: Инструкция по подсчету популяции   векторов . Представлена ​​в Knights Mill и Ice Lake . [8]

VNNI, VBMI2, BITALG:   введены в Ice Lake. [8]

  • Векторные инструкции нейронной сети AVX-512 (VNNI) – векторные инструкции для глубокого обучения.
  • Инструкции по векторной обработке байтов AVX-512 2 (VBMI2) – загрузка байта/слова, сохранение и конкатенация со сдвигом.
  • Битовые алгоритмы AVX-512 (BITALG) – инструкции по битовой манипуляции байтами/словами , расширяющие VPOPCNTDQ.

VP2INTERSECT:   представлен в Tiger Lake.

  • Пересечение векторной пары AVX-512 с парой регистров маски (VP2INTERSECT) .

GFNI, VPCLMULQDQ, VAES:   введены с Ice Lake. [8]

  • Это не функции AVX-512 как таковые. Вместе с AVX-512 они позволяют использовать версии инструкций GFNI, PCLMULQDQ и AES, закодированные в EVEX.

Кодировка и особенности

Префикс VEX, используемый AVX и AVX2, хотя и был гибким, не оставлял достаточно места для функций, которые Intel хотела добавить в AVX-512. Это привело к определению нового префикса под названием EVEX .

По сравнению с VEX, EVEX имеет следующие преимущества: [7]

  • Расширенное кодирование регистров, допускающее 32 512-битных регистра.
  • Добавляет 8 новых регистров opmask для маскирования большинства инструкций AVX-512.
  • Добавляет новый режим скалярной памяти, который автоматически выполняет трансляцию.
  • Добавляет возможность явного управления округлением в каждой инструкции.
  • Добавляет новый режим адресации сжатой памяти смещения .

Расширенные регистры, бит ширины SIMD и регистры маски операции AVX-512 являются обязательными и требуют поддержки со стороны ОС.

SIMD-режимы

Инструкции AVX-512 разработаны для смешивания с 128/256-битными инструкциями AVX/AVX2 без потери производительности. Однако расширения AVX-512VL позволяют использовать инструкции AVX-512 на 128/256-битных регистрах XMM/YMM, поэтому большинство инструкций SSE и AVX/AVX2 имеют новые версии AVX-512, закодированные с префиксом EVEX, которые позволяют получить доступ к новым функциям, таким как opmask и дополнительным регистрам. В отличие от AVX-256, новые инструкции не имеют новой мнемоники, но разделяют пространство имен с AVX, что делает различие между закодированными версиями VEX и EVEX инструкции неоднозначным в исходном коде. Поскольку AVX-512F работает только с 32- и 64-битными значениями, инструкции SSE и AVX/AVX2, которые работают с байтами или словами, доступны только с расширением AVX-512BW (поддержка байтов и слов). [7]

Имя
Наборы удлинителей
РегистрыТипы
Устаревший SSESSE–SSE4.2xmm0–xmm15одинарные числа с плавающей точкой
из SSE2: байты, слова, двойные слова, квадраслова и двойные числа с плавающей точкой
AVX-128 (ВЕКС)AVX, AVX2xmm0–xmm15байты, слова, двойные слова, квадраслова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой
AVX-256 (ВЕКС)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-512 (EVEX)AVX-512Fzmm0–zmm31
(k0–k7)
двойные слова, четверные слова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой
с AVX512BW: байты и слова
с AVX512-FP16: половина числа с плавающей точкой

Расширенные регистры

Схема регистра x64 AVX-512 как расширение регистров x64 AVX (YMM0–YMM15) и x64 SSE (XMM0–XMM15)
511 256255 128127 0
  ZMM0    YMM0    XMM0  
ЗММ1YMM1XMM1
ЗММ2YMM2XMM2
ЗММ3YMM3XMM3
ЗММ4YMM4XMM4
ЗММ5YMM5XMM5
ЗММ6YMM6XMM6
ЗММ7YMM7XMM7
ЗММ8YMM8XMM8
ЗММ9YMM9XMM9
ЗММ10YMM10XMM10
ЗММ11YMM11XMM11
ЗММ12YMM12XMM12
ЗММ13YMM13XMM13
ЗММ14YMM14XMM14
ЗММ15YMM15XMM15
ЗММ16YMM16XMM16
ЗММ17YMM17XMM17
ЗММ18YMM18XMM18
ЗММ19YMM19XMM19
ЗММ20YMM20XMM20
ЗММ21YMM21XMM21
ЗММ22YMM22XMM22
ЗММ23YMM23XMM23
ЗММ24YMM24XMM24
ЗММ25YMM25XMM25
ЗММ26YMM26XMM26
ЗММ27YMM27XMM27
ЗММ28YMM28XMM28
ЗММ29YMM29XMM29
ЗММ30YMM30XMM30
ЗММ31YMM31XMM31

Ширина файла регистров SIMD увеличена с 256 бит до 512 бит и расширена с 16 до 32 регистров ZMM0–ZMM31. К этим регистрам можно обращаться как к 256-битным регистрам YMM из расширений AVX и 128-битным регистрам XMM из потоковых расширений SIMD , а устаревшие инструкции AVX и SSE могут быть расширены для работы с 16 дополнительными регистрами XMM16-XMM31 и YMM16-YMM31 при использовании закодированной формы EVEX.

Регистры операционных масок

Векторные инструкции AVX-512 могут указывать регистр opmask для управления тем, какие значения записываются в место назначения, кодировка инструкций поддерживает 0–7 для этого поля, однако, только регистры opmask k1–k7 (из k0–k7) могут использоваться в качестве маски, соответствующей значению 1–7, тогда как значение 0 зарезервировано для указания того, что регистр opmask не используется, т. е. жестко закодированная константа (вместо 'k0') используется для указания немаскированных операций. Специальный регистр opmask 'k0' по-прежнему является функционирующим, допустимым регистром, его можно использовать в инструкциях по манипулированию регистром opmask или использовать в качестве регистра opmask назначения. [9] Флаг управляет поведением opmask, которое может быть либо «нулевым», что обнуляет все, что не выбрано маской, либо «слиянием», что оставляет все, что не выбрано, нетронутым. Поведение слияния идентично инструкциям смешивания.

Регистры opmask обычно имеют ширину 16 бит, но могут быть до 64 бит с расширением AVX-512BW. [7] Однако сколько бит фактически используется, зависит от типа вектора маскируемых инструкций. Для 32-битных одиночных float или двойных слов 16 бит используются для маскирования 16 элементов в 512-битном регистре. Для двойных float и четверных слов используется максимум 8 бит маски.

Регистр opmask является причиной того, что несколько побитовых инструкций, которые, естественно, не имеют ширины элементов, были добавлены в AVX-512. Например, побитовые И, ИЛИ или 128-битное перемешивание теперь существуют как в двухсловном, так и в четырехсловном вариантах, с единственным отличием в окончательной маскировке.

Новые инструкции по opmask

Регистры opmask имеют новое мини-расширение инструкций, работающих непосредственно с ними. В отличие от остальных инструкций AVX-512, все эти инструкции закодированы VEX. Первоначальные инструкции opmask являются 16-битными (Word) версиями. С AVX-512DQ были добавлены 8-битные (Byte) версии для лучшего соответствия потребностям маскирования 8 64-битных значений, а с AVX-512BW были добавлены 32-битные (Double) и 64-битные (Quad) версии, чтобы они могли маскировать до 64 8-битных значений. Инструкции KORTEST и KTEST можно использовать для установки флагов x86 на основе регистров масок, чтобы их можно было использовать вместе с не-SIMD x86 ветвлениями и условными инструкциями.

Инструкция
Набор удлинителей
Описание
KANDФПобитовые логические И-маски
KANDNФПобитовые логические И-НЕ маски
KMOVФПереход от регистров масок или регистров общего назначения и обратно
KUNPCKФРаспаковка для регистров маски
KNOTФНЕ Маска Регистр
KORФПобитовые логические маски ИЛИ
KORTESTФИЛИ Маски и установленные флаги
KSHIFTLФСдвиг влево Маска Регистры
KSHIFTRФСдвиг вправо Маска Регистры
KXNORФПобитовые логические маски XNOR
KXORФПобитовые логические маски XOR
KADDЧБ/ДКДобавить две маски
KTESTЧБ/ДКПобитовое сравнение и установка флагов

Новые инструкции в фундаменте AVX-512

Многие инструкции AVX-512 являются просто версиями EVEX старых инструкций SSE или AVX. Однако есть несколько новых инструкций и старых инструкций, которые были заменены новыми версиями AVX-512. Новые или сильно переработанные инструкции перечислены ниже. Эти базовые инструкции также включают расширения из AVX-512VL и AVX-512BW, поскольку эти расширения просто добавляют новые версии этих инструкций вместо новых инструкций.

Смешайте, используя маску

Нет версий инструкций смешивания с префиксом EVEX из SSE4 ; вместо этого в AVX-512 есть новый набор инструкций смешивания, использующих регистры маски в качестве селекторов. Вместе с общими инструкциями сравнения в маску ниже они могут использоваться для реализации общих тернарных операций или cmov, аналогично VPCMOV из XOP .

Поскольку смешивание является неотъемлемой частью кодирования EVEX, эти инструкции также можно считать базовыми инструкциями перемещения. Используя режим смешивания обнуления, их также можно использовать в качестве инструкций маскирования.

Инструкция
Набор удлинителей
Описание
VBLENDMPDФСмешайте векторы float64 с помощью управления opmask
VBLENDMPSФСмешайте векторы float32 с помощью управления opmask
VPBLENDMDФСмешайте векторы int32 с помощью управления opmask
VPBLENDMQФСмешайте векторы int64 с помощью управления opmask
VPBLENDMBЧБСмешивание байтовых целочисленных векторов с использованием управления opmask
VPBLENDMWЧБСмешать целочисленные векторы слов с использованием управления opmask

Сравнить в маске

AVX-512F имеет четыре новые инструкции сравнения. Как и их аналоги XOP , они используют непосредственное поле для выбора между 8 различными сравнениями. Однако, в отличие от своего вдохновения XOP, они сохраняют результат в регистре маски и изначально поддерживают только сравнения двойных и четверных слов. Расширение AVX-512BW предоставляет версии байта и слова. Обратите внимание, что для инструкций можно указать два регистра маски, один для записи и один для объявления обычного маскирования. [7]

Немедленный
Сравнение
Описание
0эквалайзерРавный
1ЛТМеньше, чем
2ЛЕМеньше или равно
3ЛОЖЬУстановить на ноль
4НЭКНе равны
5НЛТБольше или равно
6НЛЭБольше чем
7истинныйУстановить на один
Инструкция
Набор удлинителей
Описание
VPCMPD,VPCMPUDФСравнить двойные слова со знаком и без знака в маске
VPCMPQ,VPCMPUQФСравнить знаковые/беззнаковые четверные слова в маске
VPCMPB,VPCMPUBЧБСравнить знаковые/беззнаковые байты в маске
VPCMPW,VPCMPUWЧБСравнить подписанные/неподписанные слова в маске

Логическая маска набора

Последний способ установки масок — использование Logical Set Mask. Эти инструкции выполняют либо AND, либо NAND, а затем устанавливают целевую opmask на основе результирующих значений, равных нулю или ненулевым. Обратите внимание, что, как и инструкции сравнения, они принимают два регистра opmask, один как целевой, а другой — как обычную opmask.

Инструкция
Набор удлинителей
Описание
VPTESTMD,VPTESTMQФЛогическое И и установка маски для 32- или 64-битных целых чисел.
VPTESTNMD,VPTESTNMQФЛогический NAND и заданная маска для 32- или 64-битных целых чисел.
VPTESTMB,VPTESTMWЧБЛогическое И и установка маски для 8- или 16-битных целых чисел.
VPTESTNMB,VPTESTNMWЧБЛогический NAND и заданная маска для 8- или 16-битных целых чисел.

Сжать и развернуть

Инструкции сжатия и расширения соответствуют одноименным операциям APL . Они используют opmask немного иначе, чем другие инструкции AVX-512. Compress сохраняет только значения, отмеченные в маске, но сохраняет их сжатыми, пропуская и не резервируя место для неотмеченных значений. Expand работает наоборот, загружая столько значений, сколько указано в маске, а затем распространяя их на выбранные позиции.

ИнструкцияОписание
VCOMPRESSPD,VCOMPRESSPSСохранение разреженных упакованных значений с плавающей точкой двойной/одинарной точности в плотной памяти
VPCOMPRESSD,VPCOMPRESSQСохранение разреженных упакованных целочисленных значений doubleword/quadword в плотной памяти/регистре
VEXPANDPD,VEXPANDPSЗагрузка разреженных упакованных значений с плавающей точкой двойной/одинарной точности из плотной памяти
VPEXPANDD,VPEXPANDQЗагрузка разреженных упакованных целочисленных значений doubleword/quadword из плотной памяти/регистра

Переставить

Добавлен новый набор инструкций перестановки для полных двух входных перестановок. Все они принимают три аргумента, два исходных регистра и один индекс; результат выводится либо перезаписью первого исходного регистра, либо индексного регистра. AVX-512BW расширяет инструкции, включая также 16-битные (словные) версии, а расширение AVX-512_VBMI определяет байтовые версии инструкций.

Инструкция
Набор удлинителей
Описание
VPERMBВИМТПереставить упакованные байтовые элементы.
VPERMWЧБПереставьте упакованные слова, элементы.
VPERMT2BВИМТПолная перестановка байтов с перезаписью первого источника.
VPERMT2WЧБПолная перестановка слов с заменой первого источника.
VPERMI2PD,VPERMI2PSФПолная одинарная/двойная перестановка чисел с плавающей точкой с перезаписью индекса.
VPERMI2D,VPERMI2QФПолная перестановка двойных/четверных слов с перезаписью индекса.
VPERMI2BВИМТПолная перестановка байтов с перезаписью индекса.
VPERMI2WЧБПолная перестановка слов с перезаписью индекса.
VPERMT2PS,VPERMT2PDФПолная одинарная/двойная перестановка с плавающей точкой, перезаписывающая первый источник.
VPERMT2D,VPERMT2QФПолная перестановка двойных/четверных слов с перезаписью первого источника.
VSHUFF32x4, VSHUFF64x2,
VSHUFI32x4,VSHUFI64x2
ФПеремешайте четыре упакованные 128-битные строки.
VPMULTISHIFTQBВИМТВыбрать упакованные невыровненные байты из источников квадрослов.

Побитовая троичная логика

Добавлены две новые инструкции, которые могут логически реализовать все возможные побитовые операции между тремя входами. Они принимают три регистра в качестве входных данных и 8-битное непосредственное поле. Каждый бит на выходе генерируется с использованием поиска трех соответствующих битов на входах для выбора одной из 8 позиций в 8-битном непосредственном поле. Поскольку с использованием трех битов возможны только 8 комбинаций, это позволяет выполнять все 3 возможные входные побитовые операции. [7] Это единственные побитовые векторные инструкции в AVX-512F; версии EVEX двух исходных побитовых векторных инструкций SSE и AVX AND, ANDN, OR и XOR были добавлены в AVX-512DQ.

Разница между версиями doubleword и quadword заключается только в применении opmask.

ИнструкцияОписание
VPTERNLOGD,VPTERNLOGQПобитовая троичная логика
Таблица истинности побитовой троичной логики
А0А1А2Двойное И
(0x80)
Двойное ИЛИ
(0xFE)
Побитовое смешивание
(0xCA)
000000
001011
010010
011011
100010
101010
110011
111111

Конверсии

Добавлен ряд инструкций преобразования или перемещения; они завершают набор инструкций преобразования, доступных в SSE2.

Инструкция
Набор удлинителей
Описание
VPMOVQD, VPMOVSQD, VPMOVUSQD,
VPMOVQW, VPMOVSQW, VPMOVUSQW,
VPMOVQB, VPMOVSQB, VPMOVUSQB,
VPMOVDW, VPMOVSDW, VPMOVUSDW,
VPMOVDB, VPMOVSDB,VPMOVUSDB
ФПреобразовать вниз квадрослово или двойное слово в двойное слово, слово или байт; ненасыщенный, насыщенный или насыщенный без знака. Обратные инструкции расширения знака/нуля из SSE4.1 .
VPMOVWB, VPMOVSWB,VPMOVUSWBЧБПреобразовать слово в байт; ненасыщенное, насыщенное или насыщенное без знака.
VCVTPS2UDQ, VCVTPD2UDQ,
VCVTTPS2UDQ,VCVTTPD2UDQ
ФПреобразует с усечением или без него упакованные числа с плавающей запятой одинарной или двойной точности в упакованные беззнаковые целые числа размером с двойное слово.
VCVTSS2USI, VCVTSD2USI,
VCVTTSS2USI,VCVTTSD2USI
ФПреобразует с усечением или без него скалярное число с плавающей запятой одинарной или двойной точности в беззнаковое целое число двойной точности.
VCVTPS2QQ, VCVTPD2QQ,
VCVTPS2UQQ, VCVTPD2UQQ,
VCVTTPS2QQ, VCVTTPD2QQ,
VCVTTPS2UQQ,VCVTTPD2UQQ
ДКПреобразует с усечением или без него упакованные числа с плавающей запятой одинарной или двойной точности в упакованные целые числа со знаком или без знака четверного слова.
VCVTUDQ2PS,VCVTUDQ2PDФПреобразует упакованные беззнаковые целые числа двойной точности в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2PS,VCVTUSI2PDФПреобразует скалярные беззнаковые целые числа размера doubleword в числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2SD,VCVTUSI2SSФПреобразует скалярные целые числа без знака в числа с плавающей запятой одинарной или двойной точности.
VCVTUQQ2PS,VCVTUQQ2PDДКПреобразует упакованные беззнаковые четверные целые числа в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTQQ2PD,VCVTQQ2PSФПреобразует упакованные квадрословные целые числа в упакованные числа с плавающей запятой одинарной или двойной точности.

Разложение с плавающей точкой

Среди уникальных новых функций 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 . [7]

ИнструкцияОписание
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Ф, ВЛТрансляция одинарного/двойного значения с плавающей точкой
VPBROADCASTB, VPBROADCASTW,
VPBROADCASTD,VPBROADCASTQ
Ф, ВЛ, ДК, ЧБТранслировать целочисленное значение байта/слова/двойного/квадворного слова
VBROADCASTI32X2, VBROADCASTI64X2,
VBROADCASTI32X4, VBROADCASTI32X8,
VBROADCASTI64X4
Ф, ВЛ, ДК, ЧБТранслировать два или четыре целочисленных значения doubleword/quadword

Разнообразный

Инструкция
Набор удлинителей
Описание
VALIGND,VALIGNQФ, ВЛВыровнять векторы двойных или четверных слов
VDBPSADBWЧБДвойные упакованные блоки суммы-абсолютной-разности (SAD) на беззнаковых байтах
VPABSQФУпакованное абсолютное значение четверного слова
VPMAXSQ,VPMAXUQФМаксимальное количество упакованных знаковых/беззнаковых четверных слов
VPMINSQ,VPMINUQФМинимум упакованного знакового/беззнакового четверного слова
VPROLD, VPROLVD, VPROLQ, VPROLVQ,
VPRORD, VPRORVD, VPRORQ,VPRORVQ
ФПоворот биты влево или вправо
VPSCATTERDD, VPSCATTERDQ,
VPSCATTERQD,VPSCATTERQQ
ФРазбросанные упакованные двойные/четверные слова со
знаковыми индексами двойных и четверных слов
VSCATTERDPS, VSCATTERDPD,
VSCATTERQPS,VSCATTERQPD
ФУпакованные в разброс числа float32/float64 со
знаковыми индексами doubleword и quadword

Новые инструкции по наборам

Обнаружение конфликтов

Инструкции в обнаружении конфликтов AVX-512 (AVX-512CD) предназначены для эффективного вычисления бесконфликтных подмножеств элементов в циклах, которые обычно не могут быть безопасно векторизованы. [10]

ИнструкцияИмяОписание
VPCONFLICTD,
VPCONFLICTQ
Обнаружение конфликтов внутри вектора упакованных значений двойных или четверных словСравнивает каждый элемент в первом источнике со всеми элементами на тех же или более ранних местах во втором источнике и формирует битовый вектор результатов
VPLZCNTD,
VPLZCNTQ
Подсчитайте количество начальных нулевых бит для упакованных значений двойного или четверного слова.Векторизованная LZCNTинструкция
VPBROADCASTMB2Q,
VPBROADCASTMW2D
Маска трансляции в векторный регистрЛибо 8-битная маска для вектора четверного слова, либо 16-битная маска для вектора двойного слова

Экспоненциальный и обратный

Инструкции AVX-512 экспоненциальные и обратные (AVX-512ER) содержат более точные приблизительные обратные инструкции, чем в основе AVX-512; относительная ошибка не более 2 −28 . Они также содержат две новые экспоненциальные функции, которые имеют относительную ошибку не более 2 −23 . [7]

ИнструкцияОписание
VEXP2PD,VEXP2PSВычислить приблизительную экспоненту 2 x упакованных значений с плавающей точкой одинарной или двойной точности
VRCP28PD,VRCP28PSВычислить приблизительные обратные величины упакованных значений с плавающей точкой одинарной или двойной точности
VRCP28SD,VRCP28SSВычислить приблизительное обратное значение скалярного значения с плавающей точкой одинарной или двойной точности
VRSQRT28PD,VRSQRT28PSВычислить приблизительные обратные величины квадратных корней упакованных значений с плавающей точкой одинарной или двойной точности.
VRSQRT28SD,VRSQRT28SSВычислить приблизительное обратное значение квадратного корня скалярного значения с плавающей точкой одинарной или двойной точности

Предварительная выборка

Инструкции предварительной выборки AVX-512 (AVX-512PF) содержат новые операции предварительной выборки для новой функциональности разброса и сбора, представленной в AVX2 и AVX-512. 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 со знаком, выполните предварительную выборку ячеек памяти с разреженными байтами, содержащих данные одинарной/двойной точности, используя маску записи k1 и подсказку T0 с намерением записать.
VSCATTERPF1DPSVSCATTERPF1QPS,
VSCATTERPF1DPD,VSCATTERPF1QPD
Используя знаковые индексы dword/qword, выполните предварительную выборку ячеек памяти с разреженными байтами, содержащих данные одинарной/двойной точности, используя маску записи k1 и подсказку T1 с намерением записать.

4FMAPS и 4VNNIW

Два набора инструкций выполняют несколько итераций обработки. Они обычно встречаются только в продуктах Xeon Phi.

Инструкция
Набор удлинителей
Описание
V4FMADDPS,
V4FMADDSS
4FMAPSУпакованное/скалярное слияние операций умножения-сложения с плавающей точкой одинарной точности (4 итерации)
V4FNMADDPS,
V4FNMADDSS
4FMAPSУпакованная/скалярная одинарная точность с плавающей точкой, объединенная операция умножения-сложения и отрицания (4 итерации)
VP4DPWSSD4VNNIWСкалярное произведение знаковых слов с двойным накоплением слов (4 итерации)
VP4DPWSSDS4VNNIWСкалярное произведение знаковых слов с двойным накоплением слов и насыщением (4 итерации)

BW, DQ и VBMI

AVX-512DQ добавляет новые инструкции doubleword и quadword. AVX-512BW добавляет версии байтов и слов тех же инструкций, а также добавляет версии байтов и слов инструкций doubleword/quadword в AVX-512F. Несколько инструкций, которые получают только формы слов с AVX-512BW, получают формы байтов с расширением AVX-512_VBMI ( VPERMB, VPERMI2B, VPERMT2B, VPMULTISHIFTQB).

В набор инструкций маски были добавлены две новые инструкции: KADDи KTEST(формы B и W с AVX-512DQ, D и Q с AVX-512BW). Остальные инструкции маски, которые имели только формы слов, получили формы байтов с AVX-512DQ и формы двойных/четверных слов с AVX-512BW. KUNPCKBWбыл расширен до KUNPCKWDи KUNPCKDQс помощью AVX-512BW.

Среди инструкций, добавленных AVX-512DQ, есть несколько инструкций SSE и AVX, которые не получили версий AVX-512 с AVX-512F, среди них все две инструкции побитового ввода и инструкции извлечения/вставки целочисленных значений.

Ниже приведены совершенно новые инструкции.

Инструкции с плавающей точкой

Введены три новые операции с плавающей точкой. Поскольку они не только новые для AVX-512, они имеют как упакованные/SIMD, так и скалярные версии.

Инструкции VFPCLASSпроверяют, является ли значение с плавающей точкой одним из восьми специальных значений с плавающей точкой, какое из восьми значений вызовет бит в регистре выходной маски, контролируется непосредственным полем. Инструкции VRANGEвыполняют минимальные или максимальные операции в зависимости от значения непосредственного поля, которое также может контролировать, выполняется ли операция абсолютно или нет, и отдельно то, как обрабатывается знак. Инструкции VREDUCEработают с одним источником и вычитают из него целую часть исходного значения плюс количество бит, указанных в непосредственном поле его дроби.

Инструкция
Набор удлинителей
Описание
VFPCLASSPS,VFPCLASSPDДКТестовые типы упакованных значений с плавающей запятой одинарной и двойной точности.
VFPCLASSSS,VFPCLASSSDДКТестовые типы скалярных значений с плавающей запятой одинарной и двойной точности.
VRANGEPS,VRANGEPDДКРасчет ограничения диапазона для упакованных значений с плавающей точкой.
VRANGESS,VRANGESDДКРасчет ограничения диапазона для скалярных значений с плавающей точкой.
VREDUCEPS,VREDUCEPDДКВыполнить редукционное преобразование для упакованных значений с плавающей точкой.
VREDUCESS,VREDUCESDДКВыполнить редукционное преобразование скалярных значений с плавающей точкой.

Другие инструкции

Инструкция
Набор удлинителей
Описание
VPMOVM2D,VPMOVM2QДКПреобразовать регистр маски в векторный регистр размером в два или четыре слова.
VPMOVM2B,VPMOVM2WЧБПреобразовать регистр маски в регистр вектора байта или слова.
VPMOVD2M,VPMOVQ2MДКПреобразовать векторный регистр размером в два или четыре слова в регистр маски.
VPMOVB2M,VPMOVW2MЧБПреобразовать регистр вектора байта или слова в регистр маски.
VPMULLQДКМногократно упакованный квадрословный магазин низкого результата. Версия квадрослова VPMULLD.

ВБМИ2

Расширить VPCOMPRESS и VPEXPAND с помощью байтовых и словесных вариантов. Новые инструкции сдвига.

ИнструкцияОписание
VPCOMPRESSB,VPCOMPRESSWСохранение разреженных упакованных байтовых/словных целочисленных значений в плотной памяти/регистре
VPEXPANDB,VPEXPANDWЗагрузка разреженных упакованных байтовых/словных целочисленных значений из плотной памяти/регистра
VPSHLDОбъединить и сдвинуть упакованные данные влево логически
VPSHLDVКонкатенация и переменный сдвиг упакованных данных влево логически
VPSHRDОбъединить и сдвинуть упакованные данные вправо логически
VPSHRDVКонкатенация и переменный сдвиг упакованных данных вправо логический

ВННИ

Инструкции векторной нейронной сети: [11] AVX512-VNNI добавляет инструкции с кодировкой EVEX , описанные ниже. С AVX-512F эти инструкции могут работать с 512-битными векторами, а AVX-512VL дополнительно добавляет поддержку 128- и 256-битных векторов.

Более позднее расширение AVX-VNNI добавляет кодировки VEX этих инструкций, которые могут работать только с 128- или 256-битными векторами. AVX-VNNI не является частью набора AVX-512, не требует AVX-512F и может быть реализовано независимо.

ИнструкцияОписание
VPDPBUSDУмножение и сложение беззнаковых и знаковых байтов
VPDPBUSDSУмножение и сложение беззнаковых и знаковых байтов с насыщением
VPDPWSSDУмножение и сложение целых чисел со знаком word
VPDPWSSDSУмножение и сложение целых чисел с насыщенностью

ИФМА

Целочисленные объединенные инструкции умножения-сложения. AVX512-IFMA добавляет инструкции с кодировкой EVEX , описанные ниже.

Отдельное расширение набора инструкций AVX-IFMA определяет кодировку VEX этих инструкций. Это расширение не является частью набора AVX-512 и может быть реализовано независимо.

Инструкция
Набор удлинителей
Описание
VPMADD52LUQИФМАУпакованное умножение беззнаковых 52-битных целых чисел и добавление младших 52-битных произведений к 64-битным аккумуляторам
VPMADD52HUQИФМАУпакованное умножение беззнаковых 52-битных целых чисел и добавление старших 52-битных произведений к 64-битным аккумуляторам

VPOPCNTDQ и BITALG

ИнструкцияНабор удлинителейОписание
VPOPCNTD,VPOPCNTQVPOPCNTDQВозвращает количество бит, установленных на 1 в doubleword/quadword
VPOPCNTB,VPOPCNTWБИТАЛГВозвращает количество битов, установленных на 1, в байтах/словах.
VPSHUFBITQMBБИТАЛГПеремешивание битов из элементов четверного слова с использованием индексов байтов в маску

VP2ИНТЕРСЕКТ

ИнструкцияНабор удлинителейОписание
VP2INTERSECTD,
VP2INTERSECTQ
VP2ИНТЕРСЕКТВычислить пересечение между двойными/четверными словами в паре регистров маски

ГФНИ

Новые инструкции поля Галуа полезны для криптографии, [12] поскольку их можно использовать для реализации S-box-ов в стиле Rijndael, таких как те, что используются в AES, Camellia и SM4 . [13] Эти инструкции также можно использовать для битовой манипуляции в сетях и обработке сигналов. [12]

GFNI — это автономное расширение набора инструкций, которое может быть включено отдельно от AVX или AVX-512. В зависимости от того, указывает ли ЦП поддержку AVX и AVX-512F, поддержка GFNI позволяет использовать устаревшие (SSE), VEX или EVEX-кодированные инструкции, работающие на 128, 256 или 512-битных векторах.

ИнструкцияОписание
VGF2P8AFFINEINVQBОбратное аффинное преобразование поля Галуа
VGF2P8AFFINEQBАффинное преобразование поля Галуа
VGF2P8MULBПоле Галуа умножает байты

VPCLMULQDQ

VPCLMULQDQ с AVX-512F добавляет EVEX-кодированную 512-битную версию инструкции PCLMULQDQ . С AVX-512VL он добавляет EVEX-кодированные 256- и 128-битные версии. VPCLMULQDQ отдельно (то есть на процессорах, отличных от AVX512) добавляет только VEX-кодированную 256-битную версию. (На доступность 128-битной версии с кодировкой VEX указывают различные биты CPUID: PCLMULQDQ и AVX.) Более широкие, чем 128-битные, вариации инструкции выполняют одну и ту же операцию над каждой 128-битной частью входных регистров, но они не расширяют ее для выбора квадрослов из различных 128-битных полей (значение операнда imm8 то же самое: выбирается либо младшее, либо старшее квадрослово 128-битного поля).

ИнструкцияОписание
VPCLMULQDQУмножение четверных слов без переноса

ВАЕС

Инструкции AES с кодировкой VEX и EVEX . Более широкие, чем 128-битные вариации инструкции выполняют ту же операцию на каждой 128-битной части входных регистров. Версии VEX могут использоваться без поддержки AVX-512.

ИнструкцияОписание
VAESDECВыполнить один раунд процесса расшифровки AES
VAESDECLASTВыполнить последний раунд процесса расшифровки AES
VAESENCВыполнить один раунд шифрования AES
VAESENCLASTВыполнить последний раунд потока шифрования AES

БФ16

Инструкции по ускорению ИИ, работающие с числами Bfloat16 .

ИнструкцияОписание
VCVTNE2PS2BF16Преобразовать два вектора упакованных чисел одинарной точности в один вектор упакованных чисел Bfloat16
VCVTNEPS2BF16Преобразовать один вектор упакованных чисел одинарной точности в один вектор упакованных чисел Bfloat16
VDPBF16PSВычислить скалярное произведение двух пар Bfloat16 и объединить результат в одно упакованное число одинарной точности.

FP16

Расширение более раннего набора инструкций F16C , добавляющее комплексную поддержку чисел с плавающей точкой binary16 (также известных как FP16, float16 или числа с плавающей точкой половинной точности). Новые инструкции реализуют большинство операций, которые ранее были доступны для чисел с плавающей точкой одинарной и двойной точности, а также вводят новые инструкции для комплексных чисел и инструкции преобразования. Поддерживаются скалярные и упакованные операции.

В отличие от инструкций формата одинарной и двойной точности, операнды половинной точности не сбрасываются условно в ноль ( FTZ ) и не обрабатываются условно как ноль ( DAZ ) на основе MXCSRнастроек. Субнормальные значения обрабатываются на полной скорости аппаратным обеспечением для облегчения использования полного динамического диапазона чисел FP16. Инструкции, которые создают числа FP32 и FP64, по-прежнему учитывают бит MXCSR.FTZ. [14]

Арифметические инструкции

ИнструкцияОписание
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, умножая их на степень двойки.

Сложные арифметические инструкции

ИнструкцияОписание
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, бесконечность, отрицательный ноль и т. д.) и сохранение результата в регистре маски.

Инструкции по конвертации

ИнструкцияОписание
VCVTW2PHПреобразует упакованные 16-битные целые числа со знаком в числа FP16.
VCVTUW2PHПреобразует упакованные беззнаковые 16-битные целые числа в числа FP16.
VCVTDQ2PHПреобразует упакованные 32-битные целые числа со знаком в числа FP16.
VCVTUDQ2PHПреобразует упакованные беззнаковые 32-битные целые числа в числа FP16.
VCVTQQ2PHПреобразует упакованные 64-битные целые числа со знаком в числа FP16.
VCVTUQQ2PHПреобразует упакованные беззнаковые 64-битные целые числа в числа FP16.
VCVTPS2PHXКонвертирует упакованные числа FP32 в числа FP16. В отличие VCVTPS2PHот F16C , 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Округляет в сторону нуля.
VCVTPH2UW,VCVTTPH2UWПреобразует упакованные числа FP16 в беззнаковые 16-битные целые числа. VCVTPH2UWОкругляет значение в соответствии с MXCSRрегистром. VCVTTPH2UWОкругляет в сторону нуля.
VCVTPH2DQ,VCVTTPH2DQПреобразует упакованные числа FP16 в 32-битные целые числа со знаком. VCVTPH2DQОкругляет значение в соответствии с MXCSRрегистром. VCVTTPH2DQОкругляет в сторону нуля.
VCVTPH2UDQ,VCVTTPH2UDQПреобразует упакованные числа FP16 в беззнаковые 32-битные целые числа. VCVTPH2UDQОкругляет значение в соответствии с MXCSRрегистром. VCVTTPH2UDQОкругляет в сторону нуля.
VCVTPH2QQ,VCVTTPH2QQПреобразует упакованные числа FP16 в 64-битные целые числа со знаком. VCVTPH2QQОкругляет значение в соответствии с MXCSRрегистром. VCVTTPH2QQОкругляет в сторону нуля.
VCVTPH2UQQ,VCVTTPH2UQQПреобразует упакованные числа FP16 в беззнаковые 64-битные целые числа. VCVTPH2UQQОкругляет значение в соответствии с MXCSRрегистром. VCVTTPH2UQQОкругляет в сторону нуля.
VCVTPH2PSXКонвертирует упакованные числа FP16 в числа FP32. В отличие VCVTPH2PSот F16C , VCVTPH2PSXимеет другую кодировку, которая также поддерживает широковещание.
VCVTPH2PDПреобразовать упакованные числа FP16 в числа FP64.
VCVTSH2SI,VCVTTSH2SIПреобразует скалярное число FP16 в 32-битное или 64-битное целое число со знаком. VCVTSH2SIОкругляет значение в соответствии с MXCSRрегистром. VCVTTSH2SIОкругляет в сторону нуля.
VCVTSH2USI,VCVTTSH2USIПреобразует скалярное число FP16 в беззнаковое 32-битное или 64-битное целое число. VCVTSH2USIокругляет значение в соответствии с MXCSRрегистром. VCVTTSH2USIокругляет в сторону нуля.
VCVTSH2SSПреобразовать скалярное число FP16 в число FP32.
VCVTSH2SDПреобразовать скалярное число FP16 в число FP64.

Инструкции по разложению

ИнструкцияОписание
VGETEXPPH,VGETEXPSHИзвлечь компоненты экспоненты упакованных/скалярных чисел FP16 в виде чисел FP16.
VGETMANTPH,VGETMANTSHИзвлечь компоненты мантиссы упакованных/скалярных чисел FP16 в виде чисел FP16.

Инструкции по перемещению

ИнструкцияОписание
VMOVSHПереместить скалярное число FP16 в/из памяти или между векторными регистрами.
VMOVWПереместить скалярное число FP16 в/из памяти или регистра общего назначения.

Устаревшие инструкции с версиями, закодированными EVEX

ГруппаУстаревшее кодированиеИнструкции
Расширения AVX-512
SSE
SSE2
MMX
AVX
SSE3
SSE4
AVX2
FMA
ФВЛЧБДК
ВАДДДаДаНетVADDPD, VADDPS, VADDSD,VADDSSИИНН
ВАНДVANDPD, VANDPS, VANDNPD,VANDNPSНИ
ВКМПVCMPPD, VCMPPS, VCMPSD,VCMPSSИНН
ВКОМVCOMISD,VCOMISS
ВДИВVDIVPD, VDIVPS, VDIVSD,VDIVSSИ
ВКВТVCVTDQ2PD, VCVTDQ2PS, VCVTPD2DQ, VCVTPD2PS, VCVTPH2PS, VCVTPS2PH, VCVTPS2DQ, VCVTPS2PD, VCVTSD2SI, VCVTSD2SS, VCVTSI2SD, VCVTSI2SS, VCVTSS2SD, VCVTSS2SI, VCVTTPD2DQ, VCVTTPS2DQ, VCVTTSD2SI,VCVTTSS2SI
VМАКСVMAXPD, VMAXPS, VMAXSD,VMAXSS
ВМИНVMINPD, VMINPS, VMINSD,VMINSSН
ВМОВVMOVAPD, VMOVAPS, VMOVD, VMOVQ, VMOVDDUP, VMOVHLPS, VMOVHPD, , , , , , , , , , , , VMOVHPS, , , , , , , ,VMOVLHPSVMOVLPDVMOVLPSVMOVNTDQAVMOVNTDQVMOVNTPDVMOVNTPSVMOVSDVMOVSHDUPVMOVSLDUPVMOVSSVMOVUPDVMOVUPSVMOVDQA32VMOVDQA64VMOVDQU8VMOVDQU16VMOVDQU32VMOVDQU64ИИ
ВМУЛЬVMULPD, VMULPS, VMULSD,VMULSSН
ВОРVORPD,VORPSНИ
VSQRTVSQRTPD, VSQRTPS, VSQRTSD,VSQRTSSИН
ВСУБVSUBPD, VSUBPS, VSUBSD,VSUBSS
ВУКОМИVUCOMISD,VUCOMISSН
VUNPCKVUNPCKHPD, VUNPCKHPS, VUNPCKLPD,VUNPCKLPSИ
VXORVXORPD,VXORPSНИ
VEXTRACTPSНетДаНетVEXTRACTPSИНН
VINSERTPSVINSERTPS
VPEXTRVPEXTRB, VPEXTRW, VPEXTRD,VPEXTRQНИИ
ВПИНСРVPINSRB, VPINSRW, VPINSRD,VPINSRQ
VPACKДаДаДаVPACKSSWB, VPACKSSDW, VPACKUSDW,VPACKUSWBИН
ВПАДДVPADDB, VPADDW, VPADDD, VPADDQ, VPADDSB, VPADDSW, VPADDUSB,VPADDUSWИ
ВПАНДVPANDD, VPANDQ, VPANDND,VPANDNQН
VPAVGVPAVGB,VPAVGWНИ
VPCMPVPCMPEQB, VPCMPEQW, VPCMPEQD, VPCMPEQQ, VPCMPGTB, VPCMPGTW, VPCMPGTD,VPCMPGTQИ
VPMAXVPMAXSB, VPMAXSW, VPMAXSD, VPMAXSQ, VPMAXUB, VPMAXUW, VPMAXUD,VPMAXUQ
ВПМИНVPMINSB, VPMINSW, VPMINSD, VPMINSQ, VPMINUB, VPMINUW, VPMINUD,VPMINUQ
ВПМОВVPMOVSXBW, , , , , VPMOVSXBD, , , , , ,VPMOVSXBQVPMOVSXWDVPMOVSXWQVPMOVSXDQVPMOVZXBWVPMOVZXBDVPMOVZXBQVPMOVZXWDVPMOVZXWQVPMOVZXDQ
ВПМУЛVPMULDQ, VPMULUDQ, VPMULHRSW, VPMULHUW, VPMULHW, VPMULLD, VPMULLQ,VPMULLW
ВПОРVPORD,VPORQН
VPSUBVPSUBB, VPSUBW, VPSUBD, VPSUBQ, VPSUBSB, VPSUBSW, VPSUBUSB,VPSUBUSWИ
ВПУНПККVPUNPCKHBW, VPUNPCKHWD, VPUNPCKHDQ, VPUNPCKHQDQ, VPUNPCKLBW, VPUNPCKLWD, VPUNPCKLDQ,VPUNPCKLQDQ
VPXORVPXORD,VPXORQН
VPSADBWVPSADBWНИ
ВПШУФVPSHUFB, VPSHUFHW, VPSHUFLW, VPSHUFD, VPSLLDQ, VPSLLW, VPSLLD, VPSLLQ, VPSRAW, VPSRAD, VPSRAQ, VPSRLDQ, VPSRLW, VPSRLD, VPSRLQ, VPSLLVW, VPSLLVD, VPSLLVQ, VPSRLVW, VPSRLVD, VPSRLVQ, VPSHUFPD,VPSHUFPSИ
VЭКСТРАКТНетДаДаVEXTRACTF32X4, VEXTRACTF64X2, VEXTRACTF32X8, VEXTRACTF64X4, VEXTRACTI32X4, VEXTRACTI64X2, VEXTRACTI32X8,VEXTRACTI64X4НИ
ВИНСЕРТVINSERTF32x4, VINSERTF64X2, VINSERTF32X8, VINSERTF64x4, VINSERTI32X4, VINSERTI64X2, VINSERTI32X8,VINSERTI64X4
ВПАБСVPABSB, VPABSW, VPABSD,VPABSQИН
VPALIGNRVPALIGNRН
ВПЕРМVPERMD, VPERMILPD, VPERMILPS, VPERMPD, VPERMPS,VPERMQИН
VPMADDVPMADDUBSW VPMADDWDНИ
VFMADDНетНетДаVFMADD132PD, , , , , VFMADD213PD, , , , , ,VFMADD231PDVFMADD132PSVFMADD213PSVFMADD231PSVFMADD132SDVFMADD213SDVFMADD231SDVFMADD132SSVFMADD213SSVFMADD231SSИН
VFMADDSUBVFMADDSUB132PD, VFMADDSUB213PD, VFMADDSUB231PD, VFMADDSUB132PS, VFMADDSUB213PS,VFMADDSUB231PS
VFMSUBADDVFMSUBADD132PD, VFMSUBADD213PD, VFMSUBADD231PD, VFMSUBADD132PS, VFMSUBADD213PS,VFMSUBADD231PS
VFMSUBVFMSUB132PD, , , , , VFMSUB213PD, , , , , ,VFMSUB231PDVFMSUB132PSVFMSUB213PSVFMSUB231PSVFMSUB132SDVFMSUB213SDVFMSUB231SDVFMSUB132SSVFMSUB213SSVFMSUB231SS
VFNMADDVFNMADD132PD, , , , , VFNMADD213PD, , , , , ,VFNMADD231PDVFNMADD132PSVFNMADD213PSVFNMADD231PSVFNMADD132SDVFNMADD213SDVFNMADD231SDVFNMADD132SSVFNMADD213SSVFNMADD231SS
VFNMSUBVFNMSUB132PD, , , , , VFNMSUB213PD, , , , , ,VFNMSUB231PDVFNMSUB132PSVFNMSUB213PSVFNMSUB231PSVFNMSUB132SDVFNMSUB213SDVFNMSUB231SDVFNMSUB132SSVFNMSUB213SSVFNMSUB231SS
VGATHERVGATHERDPS, VGATHERDPD, VGATHERQPS,VGATHERQPD
VPGATHERVPGATHERDD, VPGATHERDQ, VPGATHERQD,VPGATHERQQ
ВПСРАВVPSRAVW, VPSRAVD,VPSRAVQИ

Процессоры с AVX-512

  • Интел
    • Рыцарский десант (Xeon Phi x200): [1] [15] AVX-512 F, CD, ER, PF
    • Knights Mill (Xeon Phi x205): [8] AVX-512 F, CD, ER, PF, 4FMAPS, 4VNNIW, VPOPCNTDQ
    • Skylake-SP , Skylake-X : [16] [17] [18] AVX-512 F, CD, VL, DQ, BW
    • Кэннон-Лейк : [8] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
    • Cascade Lake : AVX-512 F, CD, VL, DQ, BW, VNNI
    • Купер-Лейк : AVX-512 F, CD, VL, DQ, BW, VNNI, BF16
    • Ice Lake , [8] Rocket Lake : [19] [20] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES
    • Tiger Lake (кроме Pentium и Celeron, но у некоторых обозревателей есть скриншот CPU-Z Celeron 6305 с поддержкой AVX-512 [21] [22] ): [23] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, VP2INTERSECT
    • Alder Lake (никогда официально не поддерживался Intel, полностью удален в новых процессорах Примечание 1 ): [24] [25] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT, FP16
    • Sapphire Rapids [26] и более поздние процессоры Xeon только с P-ядром: AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, FP16
  • Технология Кентавра
    • Ядро "CNS" (8c/8t): [27] [28] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI
  • АМД
    • Дзен 4 : [29] [30] [31] [32] [33] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16
    • Дзен 5 : [34] AVX-512 F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, VPOPCNTDQ, BITALG, VNNI, VPCLMULQDQ, GFNI, VAES, BF16, VP2INTERSECT
Подмножество
Ф
компакт-диск
ER
ПФ
4FMAPS
4VNNIW
VPOPCNTDQ
ВЛ
ДК
ЧБ
ИФМА
ВИМТ
ВННИ
БФ16
ВБМИ2
БИТАЛГ
VPCLMULQDQ
ГФНИ
ВАЕС
VP2ИНТЕРСЕКТ
FP16
Рыцарский десант (Xeon Phi x200, 2016)ДаДаНет
Knights Mill (Xeon Phi x205, 2017)ДаНет
Skylake-SP , Skylake-X (2017)НетНетДаНет
Кэннон Лейк (2018)ДаНет
Каскадное озеро (2019)НетДаНет
Купер Лейк (2020)ДаНет
Ледяное озеро (2019)ДаНетДаНет
Озеро Тигров (2020)ДаНет
Ракетное озеро (2021)Нет
Озеро Олдер (2021)Частичное примечание 1Частичное примечание 1
Дзен 4 (2022)ДаДаНет
Сапфир Рэпидс  (2023)НетДа
Дзен 5 (2024)ДаНет

^Примечание 1  : Intel официально не поддерживает семейство инструкций AVX-512 на микропроцессорах Alder Lake . В начале 2022 года Intel начала отключать в кремнии (сплавлять) AVX-512 в микропроцессорах Alder Lake, чтобы помешать клиентам включать AVX-512. [35] В старых процессорах семейства Alder Lake с некоторыми устаревшими комбинациями BIOS и ревизий микрокода можно было выполнять инструкции семейства AVX-512 при отключении всех ядер эффективности, которые не содержат кремний для AVX-512. [36] [37] [24]

Производительность

Intel Vectorization Advisor (начиная с версии 2017) поддерживает собственную производительность AVX-512 и анализ качества векторного кода (для процессоров "Core", Xeon и Intel Xeon Phi ). Наряду с традиционным профилем горячих точек, рекомендациями Advisor и "бесшовной" интеграцией диагностики векторизации Intel Compiler, анализ Advisor Survey также предоставляет метрики AVX-512 ISA и новые "признаки", специфичные для AVX-512, например, Scatter, Compress/Expand, mask usage. [38] [39]

На некоторых процессорах (в основном до Ice Lake Intel) инструкции AVX-512 могут вызывать даже большее снижение частоты, чем у предшественников, что приводит к штрафу за смешанные рабочие нагрузки. Дополнительное понижение частоты запускается 512-битной шириной векторов и зависит от характера выполняемых инструкций; использование 128- или 256-битной части AVX-512 (AVX-512VL) не запускает его. В результате gcc и clang по умолчанию предпочитают использовать 256-битные векторы для целевых процессоров Intel. [40] [41] [42]

Компиляторы C/ C++ также автоматически обрабатывают развертывание циклов и предотвращают остановку конвейера , чтобы использовать AVX-512 наиболее эффективно, что означает, что программист, использующий встроенные функции языка для попытки принудительного использования AVX-512, иногда может получить худшую производительность по сравнению с кодом, сгенерированным компилятором, когда он сталкивается с циклами, явно прописанными в исходном коде. [43] В других случаях использование встроенных функций AVX-512 в коде C/C++ может привести к улучшению производительности по сравнению с просто написанным C/C++. [44]

Прием

Существует множество примеров приложений AVX-512 , включая обработку мультимедиа, криптографию, видеоигры , [45] нейронные сети , [46] и даже OpenJDK , который использует AVX-512 для сортировки . [47]

В часто цитируемой цитате 2020 года Линус Торвальдс сказал: «Я надеюсь, что AVX-512 умрет мучительной смертью, и что Intel начнет устранять реальные проблемы вместо того, чтобы пытаться создавать магические инструкции, чтобы затем создавать бенчмарки, на которых они могут хорошо выглядеть» [48], заявив, что он предпочел бы потратить бюджет транзисторов на дополнительные ядра и целочисленную производительность, и что он «ненавидит» бенчмарки с плавающей точкой . [49]

Numenta рекламирует свою «крайне разреженную » [50] технологию нейронных сетей, которая, по их словам, устраняет необходимость в графических процессорах , поскольку их алгоритмы работают на центральных процессорах с AVX-512. [51] Они заявляют о десятикратном ускорении по сравнению с A100 в основном потому, что их алгоритмы уменьшают размер нейронной сети, сохраняя при этом точность , с помощью таких методов, как алгоритм разреженного эволюционного обучения (SET) [52] и предвидение обрезки. [53]

Смотрите также

Ссылки

  • Куссвурм, Дэниел (2022). Современное параллельное программирование на языке C++ и ассемблера: разработка X86 SIMD с использованием AVX, AVX2 и AVX-512. Нью-Йорк, штат Нью-Йорк: Apress Media LLC. ISBN 978-1-4842-7918-2. OCLC  1304243196.
  1. ^ abcdef Джеймс Рейндерс (23 июля 2013 г.). "Инструкции AVX-512". Intel . Получено 20 августа 2013 г. .
  2. ^ ab Kusswurm 2022, стр. 223.
  3. ^ Боншор, Гэвин (25 июля 2023 г.). «Intel представляет наборы инструкций AVX10 и APX: унификация AVX-512 для гибридных архитектур». AnandTech . Получено 21 августа 2024 г.
  4. ^ abc James Reinders (17 июля 2014 г.). "Дополнительные инструкции AVX-512". Intel . Получено 3 августа 2014 г. .
  5. ^ Антон Шилов. «Процессоры Intel 'Skylake' для ПК не будут поддерживать инструкции AVX-512». Kitguru.net . Получено 17 марта 2015 г.
  6. ^ «Intel добавит в свои процессоры инструкции глубокого обучения». 14 октября 2016 г.
  7. ^ abcdefgh "Справочник по программированию расширений набора инструкций архитектуры Intel" (PDF) . Intel . Получено 29 января 2014 г. .
  8. ^ abcdef "Справочник по программированию расширений набора инструкций архитектуры Intel и будущих функций". Intel . Получено 16 октября 2017 г. .
  9. ^ "В документации по встроенному asm неверно указано, что k0 (X86 AVX-512) жестко привязан к нулю · Проблема № 94977 · rust-lang/Rust". GitHub .
  10. ^ "Архитектура AVX-512/Плакат Демиховского" (PDF) . Intel . Получено 25 февраля 2014 г. .
  11. ^ "Intel® Deep Learning Boost" (PDF) . Intel . Получено 11 октября 2021 г. .
  12. ^ ab "Руководство по технологии новых инструкций Галуа-Поля (GFNI)". networkbuilders.intel.com .
  13. ^ Кивилинна, Юсси (19 апреля 2023 г.). "camellia-simd-aesni". GitHub . Более новые процессоры x86-64 также поддерживают новые инструкции Galois Field (GFNI), которые позволяют реализовать Camellia s-box более простым способом и добиться еще более высокой производительности.
  14. ^ "Спецификация архитектуры Intel® AVX512-FP16, июнь 2021 г., редакция 1.0, Ref. 347407-001US" (PDF) . Intel. 30 июня 2021 г. . Получено 4 июля 2021 г. .
  15. ^ "Краткое описание процессора Intel Xeon Phi". Intel . Получено 12 октября 2016 г. .
  16. ^ "Intel представляет платформу X-серии: до 18 ядер и 36 потоков, от $242 до $2000". Ars Technica . Получено 30 мая 2017 г.
  17. ^ "Intel Advanced Vector Extensions 2015/2016: Поддержка в коллекции компиляторов GNU" (PDF) . Gcc.gnu.org . Получено 20 октября 2016 г. .
  18. ^ Патрицио, Энди (21 сентября 2015 г.). "Intel's Xeon roadmap for 2016 leaks". Itworld.org . Архивировано из оригинала 21 октября 2016 г. . Получено 20 октября 2016 г. .
  19. ^ «Обзор Intel Core i9-11900K — самый быстрый игровой процессор в мире?». www.techpowerup.com . 30 марта 2021 г.
  20. ^ ""Добавить rocketlake в коммит gcc"". gcc.gnu.org .
  21. ^ "Характеристики продукта процессора Intel Celeron 6305 (кэш 4 МБ, 1,80 ГГц, с IPU)". ark.intel.com . Архивировано из оригинала 18 октября 2020 г. Получено 10 ноября 2020 г.
  22. ^ Ноутбук Мура Кинерджа Боле Диаду | HP 14S DQ2518TU, 18 июня 2021 г. , получено 8 августа 2021 г.
  23. ^ "Использование коллекции компиляторов GNU (GCC): параметры x86". GNU . Получено 14 октября 2019 г. .
  24. ^ ab Cutress, Ian; Frumusanu, Andrei. «Обзор Intel 12th Gen Core i9-12900K: гибридная производительность приносит гибридную сложность». www.anandtech.com . Получено 5 ноября 2021 г. .
  25. ^ Ларабель, Майкл. «Intel Core i9 12900K «Alder Lake» AVX-512 на Linux». www.phoronix.com . Получено 8 ноября 2021 г. .
  26. ^ Ларабель, Майкл. «Сравнение производительности AVX-512: AMD Genoa против Intel Sapphire Rapids и Ice Lake». www.phoronix.com . Получено 19 января 2023 г. .
  27. ^ «Первый в отрасли высокопроизводительный x86 SOC с процессорами серверного класса и интегрированной технологией сопроцессора ИИ». 2 августа 2022 г. Архивировано из оригинала 12 декабря 2019 г.
  28. ^ "Задержка инструкций x86, x64, задержка памяти и дампы CPUID (instlatx64)". users.atw.hu .
  29. ^ "Процессоры AMD Zen 4 на базе Ryzen могут иметь до 24 ядер и поддержку векторов AVX512". Hardware Times . 23 мая 2021 г. Получено 2 сентября 2021 г.
  30. ^ Хагедорн, Гильберт (18 мая 2021 г.). «AMD работает над потрясающим 96-ядерным процессором EPYC». Guru3D.com . Получено 25 мая 2021 г. .
  31. ^ clamchowder (23 августа 2021 г.). «Подробности утечки Gigabyte». Chips And Cheese . Получено 10 июня 2022 г. .
  32. ^ W1zzard (26 мая 2022 г.). «AMD отвечает на наши технические вопросы Zen 4 с Робертом Халлоком». TechPowerUp . Получено 29 мая 2022 г.
  33. ^ Ларабель, Майкл (26 сентября 2022 г.). «Анализ производительности AMD Zen 4 AVX-512 на Ryzen 9 7950X». www.phoronix.com .
  34. ^ Ларабель, Майкл (10 февраля 2024 г.). «Поддержка компилятора AMD Zen 5 опубликована для GCC — подтверждаются новые функции AVX и многое другое». www.phoronix.com .
  35. ^ Alcorn, Paul (2 марта 2022 г.). «Intel Nukes Alder Lake's AVX-512 Support, Now Fuses It Off in Silicon». Tom's Hardware . Получено 7 марта 2022 г.
  36. ^ Кютресс, Ян; Фрумусану, Андрей (19 августа 2021 г.). «День архитектуры Intel 2021: подробное описание Олдер-Лейк, Голден-Коув и Грейсмонта». AnandTech . Получено 25 августа 2021 г. .
  37. ^ Alcorn, Paul (19 августа 2021 г.). «День архитектуры Intel 2021: чипы Alder Lake, ядра Golden Cove и Gracemont». Tom's Hardware . Получено 21 августа 2021 г.
  38. ^ "Intel Advisor XE 2016 Update 3 Что нового - Intel Software". Software.intel.com . Получено 20 октября 2016 г. .
  39. ^ "Intel Advisor - Intel Software". Software.intel.com . Получено 20 октября 2016 г. .
  40. ^ Кордес, Питер. "Инструкции SIMD снижают частоту ЦП". Stack Overflow .
  41. ^ Кордес, Питер. "почему автоматическая векторизация gcc для tigerlake использует регистры ymm, а не zmm". Stack Overflow .
  42. ^ «Заметки о выпуске LLVM 10.0.0».
  43. ^ Мэтью Колбе (10 октября 2023 г.). Lightning Talk: How to Leverage SIMD Intrinsics for Massive Slowdowns - Мэтью Колбе - CppNow 2023. C++Now . Получено 15 октября 2023 г. – через YouTube.
  44. ^ Клаусекер, Роберт (5 августа 2023 г.). «Транскодирование символов Юникода с помощью инструкций AVX-512». Программное обеспечение: Практика и опыт . 53 (12): 2430– 2462. arXiv : 2212.05098 . doi : 10.1002/spe.3261.
  45. ^ Szewczyk, Chris (24 ноября 2021 г.). «Эмулятор RPCS3 PS3 получает значительный прирост производительности на процессорах Intel Alder Lake с включенным AVX-512». PC Gamer . Получено 11 октября 2023 г.
  46. ^ Карнейро, Андре; Серпа, Матеус (5 сентября 2021 г.). «Легкие приложения глубокого обучения на AVX-512». Симпозиум IEEE по компьютерам и коммуникациям 2021 года (ISCC) . Афины : IEEE . стр.  1–6 . doi : 10.1109/ISCC53001.2021.9631464.
  47. ^ Параса, Шринивас (30 мая 2023 г.). "JDK-8309130: x86_64 AVX512 intrinsics для методов Arrays.sort (массивы int, long, float и double)". OpenJDK . Получено 11 октября 2023 г. .
  48. ^ Tung, Liam (13 июля 2020 г.). «Линус Торвальдс: Надеюсь, AVX-512 от Intel умрет мучительной смертью». ZDNet . Получено 11 октября 2023 г. .
  49. ^ Торвальдс, Линус (11 июля 2020 г.). "Озеро Олдер и AVX-512". realworldtech.com . Получено 11 октября 2023 г. .
  50. ^ «Разреженность обеспечивает 100-кратное ускорение производительности в сетях глубокого обучения: демонстрация технологии» (PDF) . numenta.com . 20 мая 2021 г. . Получено 11 октября 2023 г. .
  51. ^ Афифи-Сабет, Кеумарс (8 октября 2023 г.). «Крошечный стартап помог Intel превзойти AMD и Nvidia в критических тестах ИИ — игра уже окончена?». TechRadar . Получено 11 октября 2023 г.
  52. ^ Мокану, Дечебал; Мокану, Елена (2018). «Масштабируемое обучение искусственных нейронных сетей с адаптивной разреженной связностью, вдохновленное сетевой наукой». Nature Communications . 9 (1): 2383. Bibcode :2018NatCo...9.2383M. doi :10.1038/s41467-018-04316-3. PMC 6008460 . PMID  29921910. 
  53. ^ Соуза, Лукас (30 октября 2020 г.). «Дело в пользу разреженности в нейронных сетях, часть 2: динамическая разреженность». numenta.com . Получено 11 октября 2023 г. .

Взято с "https://en.wikipedia.org/w/index.php?title=AVX-512&oldid=1270301927"