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.
VL, DQ, BW: представлены в Skylake X и Cannon Lake .
IFMA, VBMI: введены с Cannon Lake . [5]
4VNNIW, 4FMAPS: введены в Knights Mill . [6] [7]
VPOPCNTDQ: Инструкция по подсчету популяции векторов . Представлена в Knights Mill и Ice Lake . [8]
VNNI, VBMI2, BITALG: введены в Ice Lake. [8]
VP2INTERSECT: представлен в Tiger Lake.
GFNI, VPCLMULQDQ, VAES: введены с Ice Lake. [8]
Префикс VEX, используемый AVX и AVX2, хотя и был гибким, не оставлял достаточно места для функций, которые Intel хотела добавить в AVX-512. Это привело к определению нового префикса под названием EVEX .
По сравнению с VEX, EVEX имеет следующие преимущества: [7]
Расширенные регистры, бит ширины SIMD и регистры маски операции AVX-512 являются обязательными и требуют поддержки со стороны ОС.
Инструкции 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]
Имя | Наборы удлинителей | Регистры | Типы |
---|---|---|---|
Устаревший SSE | SSE–SSE4.2 | xmm0–xmm15 | одинарные числа с плавающей точкой из SSE2: байты, слова, двойные слова, квадраслова и двойные числа с плавающей точкой |
AVX-128 (ВЕКС) | AVX, AVX2 | xmm0–xmm15 | байты, слова, двойные слова, квадраслова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой |
AVX-256 (ВЕКС) | AVX, AVX2 | ymm0–ymm15 | одинарные числа с плавающей точкой и двойные числа с плавающей точкой из AVX2: байты, слова, двойные слова, четверные слова |
AVX-128 (EVEX) | AVX-512VL | xmm0–xmm31 (k0–k7) | двойные слова, четверные слова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой с AVX512BW: байты и слова. с AVX512-FP16: половина числа с плавающей точкой |
AVX-256 (EVEX) | AVX-512VL | ymm0–ymm31 (k0–k7) | двойные слова, четверные слова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой с AVX512BW: байты и слова. с AVX512-FP16: половина числа с плавающей точкой |
AVX-512 (EVEX) | AVX-512F | zmm0–zmm31 (k0–k7) | двойные слова, четверные слова, одинарные числа с плавающей точкой и двойные числа с плавающей точкой с AVX512BW: байты и слова с AVX512-FP16: половина числа с плавающей точкой |
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ЗММ1 | YMM1 | XMM1 |
ЗММ2 | YMM2 | XMM2 |
ЗММ3 | YMM3 | XMM3 |
ЗММ4 | YMM4 | XMM4 |
ЗММ5 | YMM5 | XMM5 |
ЗММ6 | YMM6 | XMM6 |
ЗММ7 | YMM7 | XMM7 |
ЗММ8 | YMM8 | XMM8 |
ЗММ9 | YMM9 | XMM9 |
ЗММ10 | YMM10 | XMM10 |
ЗММ11 | YMM11 | XMM11 |
ЗММ12 | YMM12 | XMM12 |
ЗММ13 | YMM13 | XMM13 |
ЗММ14 | YMM14 | XMM14 |
ЗММ15 | YMM15 | XMM15 |
ЗММ16 | YMM16 | XMM16 |
ЗММ17 | YMM17 | XMM17 |
ЗММ18 | YMM18 | XMM18 |
ЗММ19 | YMM19 | XMM19 |
ЗММ20 | YMM20 | XMM20 |
ЗММ21 | YMM21 | XMM21 |
ЗММ22 | YMM22 | XMM22 |
ЗММ23 | YMM23 | XMM23 |
ЗММ24 | YMM24 | XMM24 |
ЗММ25 | YMM25 | XMM25 |
ЗММ26 | YMM26 | XMM26 |
ЗММ27 | YMM27 | XMM27 |
ЗММ28 | YMM28 | XMM28 |
ЗММ29 | YMM29 | XMM29 |
ЗММ30 | YMM30 | XMM30 |
ЗММ31 | YMM31 | XMM31 |
Ширина файла регистров 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 имеют новое мини-расширение инструкций, работающих непосредственно с ними. В отличие от остальных инструкций 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 являются просто версиями 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) |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
Добавлен ряд инструкций преобразования или перемещения; они завершают набор инструкций преобразования, доступных в SSE2.
Инструкция | Набор удлинителей | Описание |
---|---|---|
VPMOVQD , VPMOVSQD , VPMOVUSQD , VPMOVQW , VPMOVSQW , VPMOVUSQW , VPMOVQB , VPMOVSQB , VPMOVUSQB , VPMOVDW , VPMOVSDW , VPMOVUSDW , VPMOVDB , VPMOVSDB ,VPMOVUSDB | Ф | Преобразовать вниз квадрослово или двойное слово в двойное слово, слово или байт; ненасыщенный, насыщенный или насыщенный без знака. Обратные инструкции расширения знака/нуля из 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 с намерением записать. |
VSCATTERPF1DPS , VSCATTERPF1QPS , VSCATTERPF1DPD ,VSCATTERPF1QPD | Используя знаковые индексы dword/qword, выполните предварительную выборку ячеек памяти с разреженными байтами, содержащих данные одинарной/двойной точности, используя маску записи k1 и подсказку T1 с намерением записать. |
Два набора инструкций выполняют несколько итераций обработки. Они обычно встречаются только в продуктах Xeon Phi.
Инструкция | Набор удлинителей | Описание |
---|---|---|
V4FMADDPS ,V4FMADDSS | 4FMAPS | Упакованное/скалярное слияние операций умножения-сложения с плавающей точкой одинарной точности (4 итерации) |
V4FNMADDPS ,V4FNMADDSS | 4FMAPS | Упакованная/скалярная одинарная точность с плавающей точкой, объединенная операция умножения-сложения и отрицания (4 итерации) |
VP4DPWSSD | 4VNNIW | Скалярное произведение знаковых слов с двойным накоплением слов (4 итерации) |
VP4DPWSSDS | 4VNNIW | Скалярное произведение знаковых слов с двойным накоплением слов и насыщением (4 итерации) |
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. |
Расширить 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-битным аккумуляторам |
Инструкция | Набор удлинителей | Описание |
---|---|---|
VPOPCNTD ,VPOPCNTQ | VPOPCNTDQ | Возвращает количество бит, установленных на 1 в doubleword/quadword |
VPOPCNTB ,VPOPCNTW | БИТАЛГ | Возвращает количество битов, установленных на 1, в байтах/словах. |
VPSHUFBITQMB | БИТАЛГ | Перемешивание битов из элементов четверного слова с использованием индексов байтов в маску |
Инструкция | Набор удлинителей | Описание |
---|---|---|
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 с 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 |
Инструкции по ускорению ИИ, работающие с числами Bfloat16 .
Инструкция | Описание |
---|---|
VCVTNE2PS2BF16 | Преобразовать два вектора упакованных чисел одинарной точности в один вектор упакованных чисел Bfloat16 |
VCVTNEPS2BF16 | Преобразовать один вектор упакованных чисел одинарной точности в один вектор упакованных чисел Bfloat16 |
VDPBF16PS | Вычислить скалярное произведение двух пар Bfloat16 и объединить результат в одно упакованное число одинарной точности. |
Расширение более раннего набора инструкций 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 . |
VRSQRTPH , VRSQRTSH | Вычислить приближенный обратный квадратный корень упакованных/скалярных чисел FP16. Максимальная относительная ошибка приближения меньше 2 −14 . |
Инструкция | Описание |
---|---|
VCMPPH ,VCMPSH | Сравните упакованные/скалярные числа FP16 и сохраните результат в регистре маски. |
VCOMISH | Сравнить скалярные числа FP16 и сохранить результат в регистре флагов. Сигнализирует об исключении, если исходный операнд — QNaN или SNaN. |
VUCOMISH | Сравнить скалярные числа FP16 и сохранить результат в регистре флагов. Сигнализирует об исключении только в том случае, если исходный операнд — SNaN. |
VMAXPH ,VMAXSH | Выберите максимум из каждой вертикальной пары исходных упакованных/скалярных чисел FP16. |
VMINPH ,VMINSH | Выберите минимум каждой вертикальной пары исходных упакованных/скалярных чисел FP16. |
VFPCLASSPH , VFPCLASSSH | Тестирование упакованных/скалярных чисел FP16 на наличие специальных категорий (NaN, бесконечность, отрицательный ноль и т. д.) и сохранение результата в регистре маски. |
Инструкция | Описание |
---|---|
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 в/из памяти или регистра общего назначения. |
Группа | Устаревшее кодирование | Инструкции | Расширения 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 , , , , , , , ,VMOVLHPS VMOVLPD VMOVLPS VMOVNTDQA VMOVNTDQ VMOVNTPD VMOVNTPS VMOVSD VMOVSHDUP VMOVSLDUP VMOVSS VMOVUPD VMOVUPS VMOVDQA32 VMOVDQA64 VMOVDQU8 VMOVDQU16 VMOVDQU32 VMOVDQU64 | И | И | |||||
ВМУЛЬ | VMULPD , VMULPS , VMULSD ,VMULSS | Н | ||||||
ВОР | VORPD ,VORPS | Н | И | |||||
VSQRT | VSQRTPD , VSQRTPS , VSQRTSD ,VSQRTSS | И | Н | |||||
ВСУБ | VSUBPD , VSUBPS , VSUBSD ,VSUBSS | |||||||
ВУКОМИ | VUCOMISD ,VUCOMISS | Н | ||||||
VUNPCK | VUNPCKHPD , VUNPCKHPS , VUNPCKLPD ,VUNPCKLPS | И | ||||||
VXOR | VXORPD ,VXORPS | Н | И | |||||
VEXTRACTPS | Нет | Да | Нет | VEXTRACTPS | И | Н | Н | |
VINSERTPS | VINSERTPS | |||||||
VPEXTR | VPEXTRB , VPEXTRW , VPEXTRD ,VPEXTRQ | Н | И | И | ||||
ВПИНСР | VPINSRB , VPINSRW , VPINSRD ,VPINSRQ | |||||||
VPACK | Да | Да | Да | VPACKSSWB , VPACKSSDW , VPACKUSDW ,VPACKUSWB | И | Н | ||
ВПАДД | VPADDB , VPADDW , VPADDD , VPADDQ , VPADDSB , VPADDSW , VPADDUSB ,VPADDUSW | И | ||||||
ВПАНД | VPANDD , VPANDQ , VPANDND ,VPANDNQ | Н | ||||||
VPAVG | VPAVGB ,VPAVGW | Н | И | |||||
VPCMP | VPCMPEQB , VPCMPEQW , VPCMPEQD , VPCMPEQQ , VPCMPGTB , VPCMPGTW , VPCMPGTD ,VPCMPGTQ | И | ||||||
VPMAX | VPMAXSB , VPMAXSW , VPMAXSD , VPMAXSQ , VPMAXUB , VPMAXUW , VPMAXUD ,VPMAXUQ | |||||||
ВПМИН | VPMINSB , VPMINSW , VPMINSD , VPMINSQ , VPMINUB , VPMINUW , VPMINUD ,VPMINUQ | |||||||
ВПМОВ | VPMOVSXBW , , , , , VPMOVSXBD , , , , , ,VPMOVSXBQ VPMOVSXWD VPMOVSXWQ VPMOVSXDQ VPMOVZXBW VPMOVZXBD VPMOVZXBQ VPMOVZXWD VPMOVZXWQ VPMOVZXDQ | |||||||
ВПМУЛ | VPMULDQ , VPMULUDQ , VPMULHRSW , VPMULHUW , VPMULHW , VPMULLD , VPMULLQ ,VPMULLW | |||||||
ВПОР | VPORD ,VPORQ | Н | ||||||
VPSUB | VPSUBB , VPSUBW , VPSUBD , VPSUBQ , VPSUBSB , VPSUBSW , VPSUBUSB ,VPSUBUSW | И | ||||||
ВПУНПКК | VPUNPCKHBW , VPUNPCKHWD , VPUNPCKHDQ , VPUNPCKHQDQ , VPUNPCKLBW , VPUNPCKLWD , VPUNPCKLDQ ,VPUNPCKLQDQ | |||||||
VPXOR | VPXORD ,VPXORQ | Н | ||||||
VPSADBW | VPSADBW | Н | И | |||||
ВПШУФ | 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 | И | Н | |||||
VPALIGNR | VPALIGNR | Н | ||||||
ВПЕРМ | VPERMD , VPERMILPD , VPERMILPS , VPERMPD , VPERMPS ,VPERMQ | И | Н | |||||
VPMADD | VPMADDUBSW VPMADDWD | Н | И | |||||
VFMADD | Нет | Нет | Да | VFMADD132PD , , , , , VFMADD213PD , , , , , ,VFMADD231PD VFMADD132PS VFMADD213PS VFMADD231PS VFMADD132SD VFMADD213SD VFMADD231SD VFMADD132SS VFMADD213SS VFMADD231SS | И | Н | ||
VFMADDSUB | VFMADDSUB132PD , VFMADDSUB213PD , VFMADDSUB231PD , VFMADDSUB132PS , VFMADDSUB213PS ,VFMADDSUB231PS | |||||||
VFMSUBADD | VFMSUBADD132PD , VFMSUBADD213PD , VFMSUBADD231PD , VFMSUBADD132PS , VFMSUBADD213PS ,VFMSUBADD231PS | |||||||
VFMSUB | VFMSUB132PD , , , , , VFMSUB213PD , , , , , ,VFMSUB231PD VFMSUB132PS VFMSUB213PS VFMSUB231PS VFMSUB132SD VFMSUB213SD VFMSUB231SD VFMSUB132SS VFMSUB213SS VFMSUB231SS | |||||||
VFNMADD | VFNMADD132PD , , , , , VFNMADD213PD , , , , , ,VFNMADD231PD VFNMADD132PS VFNMADD213PS VFNMADD231PS VFNMADD132SD VFNMADD213SD VFNMADD231SD VFNMADD132SS VFNMADD213SS VFNMADD231SS | |||||||
VFNMSUB | VFNMSUB132PD , , , , , VFNMSUB213PD , , , , , ,VFNMSUB231PD VFNMSUB132PS VFNMSUB213PS VFNMSUB231PS VFNMSUB132SD VFNMSUB213SD VFNMSUB231SD VFNMSUB132SS VFNMSUB213SS VFNMSUB231SS | |||||||
VGATHER | VGATHERDPS , VGATHERDPD , VGATHERQPS ,VGATHERQPD | |||||||
VPGATHER | VPGATHERDD , VPGATHERDQ , VPGATHERQD ,VPGATHERQQ | |||||||
ВПСРАВ | VPSRAVW , VPSRAVD ,VPSRAVQ | И |
Подмножество | Ф | компакт-диск | 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]
Более новые процессоры x86-64 также поддерживают новые инструкции Galois Field (GFNI), которые позволяют реализовать Camellia s-box более простым способом и добиться еще более высокой производительности.