AVX-512

редактировать

AVX-512- это 512-битные расширения для 256-битных Advanced Vector Extensions SIMD инструкции для x86 архитектуры набора команд (ISA), предложенные Intel в июле 2013 г. и реализован в процессорах Intel Xeon Phi x200 (Knights Landing) и Skylake-X ; это включает серию Core-X (за исключением Core i5-7640X и Core i7-7740X), а также новое семейство масштабируемых процессоров Xeon и Xeon D-2100 Embedded Series.

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

AVX-512 состоит из нескольких расширений, которые могут быть реализованы независимо. Эта политика является отходом от исторического требования реализации всего блока инструкций. Для всех реализаций AVX-512 требуется только базовое расширение AVX-512F (AVX-512 Foundation).

Содержание

  • 1 Набор команд
  • 2 Кодирование и функции
    • 2.1 Режимы SIMD
    • 2.2 Расширенные регистры
  • 3 Регистры Opmask
    • 3.1 Новые инструкции opmask
  • 4 Новые инструкции в AVX -512 foundation
    • 4.1 Смешивание с использованием маски
    • 4.2 Сравнение с маской
    • 4.3 Маска логического набора
    • 4.4 Сжатие и расширение
    • 4.5 Перестановка
    • 4.6 Побитовая троичная логика
    • 4.7 Преобразования
    • 4.8 Разложение с плавающей запятой
    • 4.9 Арифметика с плавающей запятой
    • 4.10 Широковещательная рассылка
    • 4.11 Разное
  • 5 Новые инструкции по наборам
    • 5.1 Обнаружение конфликтов
    • 5.2 Экспоненциальная и обратная
    • 5.3 Предварительная выборка
    • 5.4 4FMAPS и 4VNNIW
    • 5.5 BW, DQ и VBMI
      • 5.5.1 Инструкции с плавающей запятой
      • 5.5.2 Другие команды
    • 5.6 VBMI2
    • 5.7 VNNI
    • 5.8 IFMA
    • 5.9 VPOPCNTDQ и BITALG
    • 5.10 VP2INTERSECT
    • 5.11 GFNI
    • 5.12 VPCLMULQDQ
    • 5.13 VAES
    • 5.14 BF16
  • 6 Устаревшие инструкции, обновленные с помощью версий с кодировкой EVEX
  • 7 ЦП с AVX-512
  • 8 Производительность
  • 9 См. Также
  • 10 R eferences

Набор команд

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

F, CD, ER, PF
Представлен с Xeon Phi x200 (Knights Landing) и Xeon E5-26xx V5 (Skylake EP / EX "Purley ", ожидается во втором полугодии 2017 года), причем последние два (ER и PF) относятся к Knights Landing.
  • AVX-512 Foundation (F) - расширяет большинство 32-битных и 64-битных инструкций AVX схемой кодирования EVEX для поддержки 512-битных регистров, маски операций, широковещательная передача параметров, а также встроенное округление и управление исключениями, реализованные Knights Landing и Skylake Xeon
  • AVX-512 Инструкции по обнаружению конфликтов (CD) - эффективное обнаружение конфликтов, позволяющее векторизовать больше циклов, реализованный Knights Landing и Skylake X
  • AVX-512 Exponential и Reciprocal Instructions (ER) - экспоненциальные и взаимные операции, предназначенные для помощи в реализации трансцендентные операции, реализованные Knights Landing
  • AVX-512 Prefetch Instructions (PF) - новые возможности предварительной выборки, реализованные Knights Landing
VL, DQ, BW
Представлены в Skylake X и Cannon Lake.
  • AVX-512 Vector Length Extensions (VL) - расширяет большинство операций AVX-512 для работы с регистрами XMM (128-бит) и YMM (256-бит)
  • AVX-512 Doubleword and Quadword Instructions (DQ) - добавляет новые 32-битные и 64-битные инструкции AVX-512
  • AVX-512 Byte and Word Instructions (BW) - расширяет AVX-512 до 8-битных и 16-битные целочисленные операции
IFMA, VBMI
Представлено в Cannon Lake.
  • AVX-512 Integer Fused Multiply Add (IFMA) - объединенное умножение сложения целых чисел с использованием 52-битной точности.
  • AVX-512 Vector Byte Manipulation Instructions (VBMI) добавляет команды перестановки векторных байтов, которых не было в AVX-512BW.
4VNNIW, 4FMAPS
Введено с Knights Mill.
  • Векторные инструкции нейронной сети AVX-512 Точность переменной Word (4VNNIW) - векторные инструкции для глубокого обучения, расширенного слова, переменной точности.
  • AVX-512 Fused Multiply Accumulation Packed Single precision ( 4FMAPS) - векторные инструкции для глубокого обучения, с плавающей запятой, одинарной точности.
VPOPCNTDQ
Vector совокупность инструкция. Введено в Knights Mill и Ice Lake.
VNNI, VBMI2, BITALG
Введено в Ice Lake.
  • AVX-512 Vector Neural Network Instructions (VNNI) - векторные инструкции для глубоких
  • Инструкции 2 по обработке векторных байтов AVX-512 (VBMI2) - загрузка байтов / слов, сохранение и объединение со сдвигом.
  • Битовые алгоритмы AVX-512 (BITALG) - байт / слово манипуляции с битами инструкции, расширяющие VPOPCNTDQ.
VP2INTERSECT
Представлено в Tiger Lake.
  • Пересечение векторной пары AVX-512 с парой регистров маски (VP2INTERSECT).
GFNI, VPCLMULQDQ, VAES
Представлено в Ice Lake.
  • Это не AVX-512 особенности как таковые. Вместе с AVX-512 они позволяют использовать кодированные EVEX версии инструкций GFNI, PCLMULQDQ и AES.

Кодирование и функции

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

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

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

Расширенные регистры, бит ширины SIMD и регистры opmask 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 (поддержка байтов и слов).

ИмяНаборы расширенийРегистрыТипы
Устаревшие SSESSE-SSE4.2xmm0-xmm15одиночные поплавки. Из SSE2: байты, слова, двойные слова, четверные слова и двойные числа с плавающей запятой.
AVX-128 (VEX)AVX, AVX2xmm0-xmm15байты, слова, двойные слова, четверные слова, одинарные и двойные числа с плавающей запятой.
AVX-256 (VEX)AVX, AVX2ymm0-ymm15с одинарным и двойным поплавком. Из AVX2: байты, слова, двойные слова, четверные слова
AVX-128 (EVEX)AVX-512VLxmm0-xmm31 (k1-k7)двойные слова, четверные слова, одинарное и двойное поплавок. С AVX512BW: байты и слова
AVX-256 (EVEX)AVX-512VLymm0-ymm31 (k1-k7)двойные слова, четверные слова, одинарное число с плавающей запятой и двойной поплавок. С AVX512BW: байты и слова
AVX-512 (EVEX)AVX-512Fzmm0-zmm31 (k1-k7)двойные слова, четверные слова, одинарное число с плавающей запятой и двойной поплавок. С AVX512BW: байты и слова

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

Схема регистров x64 AVX-512 как расширение регистров x64 AVX (YMM0-YMM15) и x64 SSE (XMM0-XMM15)
511256255128127 0
ZMM0YMM0XMM0
ZMM1YMM1XMM1
ZMM2YMM2XMM2
ZMM3YMM3XMM3
ZMM4YMM4XMM4
ZMM5YMM5XMM5
ZMM6YMM6XMM6
ZMM7YMM7XMM7
ZMM8YMM8XMM8
ZMM9YMM9XMM9
ZMM10YMM10XMM10
ZMM11YMM11XMM11
ZMM12YMM12XMM12
ZMM13YMM13XMM13
ZMM14YMM14XMM14
ZMM15YMM15XMM15
ZMM16YMM16XMM16
ZMM17YMM17XMM17
ZMM18YMM18XMM18
ZMM19YMM19XMM19
ZMM20YMM20XMM20
ZMM21YMM21XMM21
ZMM22YMM22XMM22
ZMM23YMM23XMM23
ZMM24YMM24XMM24
ZMM25YMM25XMM25
ZMM26YMM26XMM26
ZMM27YMM27XMM27
ZMM28YMM28XMM28
ZMM29YMM29XMM29
ZMM30YMM30XMM30
ZMM31YMM31XMM31

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

Регистры opmask

Большинство инструкций AVX-512 могут указывать один из 8 регистров opmask (k0 – k7). Для инструкций, которые используют регистр маски в качестве маски операции, регистр k0 является специальным: жестко запрограммированная константа, используемая для обозначения немаскированных операций. Для других операций, таких как те, которые записывают в регистр opmask или выполняют арифметические или логические операции, «k0» является действующим, действительным регистром. В большинстве инструкций маска операции используется для управления тем, какие значения записываются в место назначения. Флаг управляет поведением opmask, которое может быть либо «нулевым», при котором обнуляется все, что не выбрано маской, либо «merge», при котором все, что не выбрано, остается нетронутым. Поведение слияния идентично инструкциям по смешиванию.

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

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

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

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

КомандаНабор расширенийОписание
KANDFПоразрядное логическое И Маски
KANDNFПоразрядное логическое И НЕ Маски
KMOVFПеремещение из и в регистры маски или регистры общего назначения
KUNPCKFРаспаковка для регистров маски
KNOTFNOT Mask Register
KORFПобитовое логическое ИЛИ Маски
KORTESTFИЛИ маски И установите флаги
KSHIFTLFРегистры маски сдвига влево
KSHIFTRFРегистры маски сдвига вправо
KXNORFПобитовые логические маски XNOR
KXORFПобитовые логические маски XOR
KADDBW / DQДобавить две маски
KTESTBW / DQПобитовое сравнение и установить флаги

Новые инструкции в AVX-512 Foundation

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

Смешивание с использованием маски

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

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

ИнструкцияНабор расширенийОписание
VBLENDMPDFСмешивание векторов float64 с помощью управления opmask
VBLENDMPSFСмешивание векторов float32 с помощью управления opmask
VPBLENDMDFСмешивание векторов int32 с использованием управления opmask
VPBLENDMQFСмешивание векторов int64 с использованием управления opmask
VPBLENDMBBWСмешивание векторов байтовых целочисленных значений с использованием управления opmask
VPBLENDMWBWСмешать целочисленные векторы слов с помощью управления opmask

Сравнить с маской

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

НемедленноеСравнениеОписание
0EQРавно
1LTМеньше
2LEМеньше или равно
3FALSEОбнулить
4NEQНе равно
5NLTБольше или равно
6NLEБольше
7ИСТИНАУстановить на единицу
ИнструкцияНабор расширенийОписание
VPCMPD

VPCMPUD

FСравнить подписанные / беззнаковые двойные слова с маской
VPCMPQ

VPCMPUQ

FСравнить подписанные / беззнаковые четверные слова с маской
VPCMPB

VPCMPUB

BWСравнить подписанные / неподписанные байты в маске
VPCMPW

VPCMPUW

BWСравнить подписанные / неподписанные слова в маске

Маска логического набора

Последний способ установки масок - использование маски логического набора. Эти инструкции выполняют либо И, либо И НЕ, а затем устанавливают целевую операционную маску на основе значений результата, равных нулю или отличных от нуля. Обратите внимание, что, как и инструкции сравнения, они принимают два регистра opmask, один в качестве назначения, а другой - в качестве обычной маски opmask.

ИнструкцияНабор расширенийОписание
VPTESTMD, VPTESTMQFЛогическое И и установка маски для 32- или 64-битных целых чисел.
VPTESTNMD, VPTESTNMQFЛогическая И-НЕ и установка маски для 32- или 64-битных целых чисел.
VPTESTMB, VPTESTMWBWЛогическое И и установка маски для 8- или 16-битных целых чисел.
VPTESTNMB, VPTESTNMWBWЛогическая И-НЕ и установка маски для 8- или 16-битных целых чисел.

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

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

ИнструкцияОписание
VCOMPRESSPD,

VCOMPRESSPS

Сохранение разреженных упакованных значений с плавающей запятой двойной / одинарной точности в плотной памяти
VPCOMPRESSD,

VPCOMPRESSQ

Сохранение разреженных упакованные целочисленные значения двойного / четверного слова в плотную память / регистр
VEXPANDPD,

VEXPANDPS

Загрузка разреженных упакованных значений с плавающей запятой двойной / одинарной точности из плотной памяти
VPEXPANDD,

VPEXPANDQ

Загрузка разреженной упакованные целочисленные значения двойного / четверного слова из плотной памяти / регистра

Перестановка

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

КомандаНабор расширенийОписание
VPERMBVBMIПерестановка упакованных байтовых элементов.
VPERMWBWПерестановка элементов упакованных слов.
VPERMT2BVBMIПерестановка полного байта, перезапись первого источника.
VPERMT2WBWПолная перестановка слов перезаписывает первый источник.
VPERMI2PD, VPERMI2PSFПолная перестановка с одинарной / двойной плавающей запятой, перезапись индекса.
VPERMI2D, VPERMI2QFПолная перестановка двойного / четверного слова с перезаписью индекса.
VPERMI2BVBMIПереключение полного байта поверх индекса.
VPERMI2WBWПолная перестановка слов с перезаписью индекса.
VPERMT2PS, VPERMT2PDFПолная перестановка с одинарной / двойной плавающей запятой, перезапись первого источника.
VPERMT2D, VPERMT2QFПолная перестановка двойного / четверного слова с перезаписью первого источника.
VSHUFF32x4, VSHUFF64x2,

VSHUFI32x4, VSHUFI64x2

FПеремешать четыре упакованных 128-битных строки.
VPMULTISHIFTQBVBMIВыбрать упакованные невыровненные байты из источников четырех слов.

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

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

Разница в версиях двойного слова и четверного слова заключается только в применении opmask.

ИнструкцияОписание
VPTERNLOGD, VPTERNLOGQПобитовая троичная логика

Таблица истинности :

A0A1A2Двойное И (0x80)Двойное ИЛИ (0xFE)Побитовое смешение (0xCA)
000000
001011
010010
011011
100010
101010
110011
111111

Преобразования

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

КомандаНабор расширенийОписание

VPMOVQD, VPMOVSQD, VPMOVUSQD,
VPMOVQW, VPMOVSQW, VPMOVUSQW,
VPMOVQB, VPMOVSQB, VPMOVUSQB,
VPMOVDW, VPMOVSDW, VPMOV 633>VPMOVDB, VPMOVSDB, VPMOVUSDB

FПреобразование четверного слова или двойного слова в двойное слово, слово или байт; ненасыщенный, насыщенный или насыщенный без знака. Обратный знак / ноль расширяет инструкции из SSE4.1.
VPMOVWB, VPMOVSWB, VPMOVUSWBBWпреобразовать слово с понижением в байт; ненасыщенный, насыщенный или насыщенный без знака.
VCVTPS2UDQ, VCVTPD2UDQ,

VCVTTPS2UDQ, VCVTTPD2UDQ

FПреобразование с усечением или без усечения упакованных чисел с плавающей запятой одинарной или двойной точности в упакованные целые числа без знака с двойным словом.
VCVTSS2USI, VCVTSD2USI,

VCVTTSS2USI, VCVTTSD2USI

FПреобразование со скалярной одинарной или двойной точностью с плавающей запятой в беззнаковое целое двойное слово с усечением или без него.
VCVTPS2QQ, VCVTPD2QQ,

VCVTPS2UQQ, VCVTPD2UQQ,
VCVTTPS2QQ, VCVTTPD2QQ <6332>VCVTTPD2QQ <6332>VCVTTPD2QQ <6332>VCVTTPD2QQ <63382>DQ

Преобразование с усечением или без него упакованных чисел с плавающей запятой одинарной или двойной точности в упакованные целые числа со знаком или без знака.
VCVTUDQ2PS, VCVTUDQ2PDFПреобразование упакованных целых чисел с двойным словом без знака в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2PS, VCVTUSI2PDFПреобразование скалярных целых чисел с двойным словом без знака в числа с плавающей запятой одинарной или двойной точности.
VCVTUSI2SD, VCVTUSI2SSFПреобразование скалярных целых чисел без знака в числа с плавающей запятой одинарной или двойной точности.
VCVTUQQ2PS, VCVTUQQ2PDDQПреобразование упакованных целых четверных слов без знака в упакованные числа с плавающей запятой одинарной или двойной точности.
VCVTQQ2PD, VCVTQQ2PSFПреобразование упакованных четверных целых чисел в упакованные числа с плавающей запятой одинарной или двойной точности.

Декомпозиция с плавающей запятой

Среди уникальных новых функций в AVX-512F - инструкции для декомпозиции значений с плавающей запятой и обработки специальных значений с плавающей запятой. Поскольку эти методы совершенно новые, они также существуют в скалярных версиях.

ИнструкцияОписание
VGETEXPPD, VGETEXPPSПреобразование экспонент упакованных значений fp в значения fp
VGETEXPSD, VGETEXPSSПреобразовать показатель скалярного значения fp в значение fp
VGETMANTPD, VGETMANTPSИзвлечь вектор нормализованных мантисс из вектора float32 / float64
VGETMANTSD, VGETMANTSSИзвлечь float32 / float64 нормализованной мантиссы из скаляра float32 / float64
VFIXUPIMMPD, VFIXUPIMMPSИсправить специальные упакованные значения float32 / float64 <366MSD VFIXUPIMD, VFIXUPIMMSSИсправить специальное скалярное значение float32 / float64

Арифметика с плавающей запятой

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

ИнструкцияОписание
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 w со значением float32 / float64

Широковещательная передача

ИнструкцияНабор расширенийОписание
VBROADCASTSS, VBROADCASTSDF, VLШироковещательная передача одинарного / двойного значения с плавающей запятой
VPBROADCASTB, VPBROADCASTW,
VPBROADCASTD, VPBROADCASTQ
F, VL, DQ, BWBroadcast байт / слово / двойное слово / четырехслово целочисленное значение
VBROADCASTI32X2,
VBROADCASTI64X2, VBROADCASTI32X4,
VBROADCASTI32X8 <128, VBROADCASTI32X8, VBROADCASTI32X8, VBROADCASTI64X4
Передача двух или четырех целочисленных значений двойного / четверного слова

Разное

ИнструкцияНабор расширенийОписание
VALIGND, VALIGNQF, VLВыровнять векторы двойных или четверных слов
VDBPSADBWBWДвойная блочная упакованная абсолютная сумма-разность (SAD) в байтах без знака
VPABSQFУпакованное квадраслово абсолютного значения
VPMAXSQ, VPMAXUQFМаксимум упакованного четвертого слова со знаком / без знака
VPMINSQ, VPMINUQFМинимум упакованных четырехслово со знаком / без знака
VPROLD, VPROLVD,
VPROLQ, VPROLVQ,
VPRORD, VPRORVD,
VPRORQ, VPRORVQ
FПоворот битов влево или вправо
VPSCATTERDD, VPSCATTERDQ,
VPSCATTERQD, VPSCATTERQQ
FДвойное слово / четырехслово с разбросом и двойное слово со знаком и индексы четверного слова
VSCATTERDPS, VSCATTERDPD,
VSCATTERQPS, VSCATTERQPD
FScatter упакованный float32 / float64 с индексами двойного слова и четвертого слова со знаком

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

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

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

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

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

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

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

Prefetch

Инструкции предварительной выборки AVX-512 содержат новые операции предварительной выборки для новых функций разброса и сбора, представленных в AVX2 и AVX-512. T0предварительная выборка означает предварительную выборку в кэш уровня 1, а T1означает предварительную выборку в кэш уровня 2.

ИнструкцияОписание
VGATHERPF0DPS, VGATHERPF0QPS, VGATHERPF0DPD, VGATHERPF0QPDИспользование индексов префикса двойного слова / слова со знаком разреженные байтовые ячейки памяти, содержащие данные с одинарной / двойной точностью, с использованием 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 о намерении писать.

4FMAPS и 4VNNIW

ИнструкцияНабор расширенийОписание
V4FMADDPS, V4FMADDSS4FMAPSPacked / scalar объединенное умножение с плавающей запятой одинарной точности (4 итерации)
V4FNMADDPS, V4FNMADDSS4FMAPSУпакованное / скалярное объединенное умножение с плавающей запятой одинарной точности, объединенное сложение и отрицание (4 итерации)
VP4DPWSSD4VNNIWТочечное произведение слов со знаком с накоплением двойных слов (4 итерации)
VP4DPWSSDS4VNNIWТочечное произведение слова со знаком с накоплением и насыщением двойных слов (4 итерации)

BW, DQ и VBMI

AVX-512DQ добавляет новые инструкции двойного слова и четверного слова. AVX-512BW добавляет байтовые и словарные версии тех же инструкций и добавляет байтовые и словные версии инструкций двойного / четверного слова в 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, VFPCLASSPDDQТипы тестирования упакованных плавающих чисел одинарной и двойной точности балльные значения.
VFPCLASSSS, VFPCLASSSDDQТипы проверки скалярных значений с плавающей запятой одинарной и двойной точности.
VRANGEPS, VRANGEPDDQРасчет ограничения диапазона для упакованных значений с плавающей запятой.
VRANGESS, VRANGESDDQРасчет ограничения диапазона для скалярных значений с плавающей запятой.
VREDUCEPS, VREDUCEPDDQВыполняет преобразование сокращения для упакованных значений с плавающей запятой.
VREDUCESS, VREDUCESDDQВыполняет преобразование сокращения для скалярных значений с плавающей запятой.

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

КомандаНабор расширенийОписание
VPMOVM2D, VPMOVM2QDQПреобразование регистра маски в векторный регистр двойного или четверного слова.
VPMOVM2B, VPMOVM2WBWПреобразование регистра маски в регистр вектора байта или слова.
VPMOVD2M, VPMOVQ2MDQПреобразование двух- или четырехсловного векторного регистра в регистр маски.
VPMOVB2M, VPMOVW2MBWПреобразует регистр вектора байта или слова в регистр маски.
VPMULLQDQУмноженное упакованное четверное слово сохраняет результат с низким значением. Версия VPMULLD, состоящая из четырех слов.

VBMI2

Расширьте VPCOMPRESS и VPEXPAND вариантами байтов и слов. Инструкции по смене новые.

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

VNNI

Команды векторной нейронной сети.

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

IFMA

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

VPOPCNTDQ и BITALG

ИнструкцияНабор расширенийОписание
VPOPCNTD, VPOPCNTQVPOPCNTDQВозвращает количество битов, установленных на 1 в двойном слове / четвертом слове
VPOPCNTB, VPOPCNTWBITALGВозвращает количество битов, установленных на 1 в байтах / word
VPSHUFBITQMBBITALGПеремешать биты из qu элементы adword, использующие байтовые индексы в маске

VP2INTERSECT

ИнструкцияНабор расширенийОписание
VP2INTERSECTD, VP2INTERSECTQVP2INTERSECTВычислить пересечение двойных / четверных слов с

парой регистров маски

GFNI

EVEX-кодированные поле Галуа новые инструкции:

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

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

КомандаОписание
VPCLMULQDQКвадраслово умножения без переноса

VAES

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

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

BF16

инструкции ускорения AI, работающие в формате Bfloat16.

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

Устаревшие инструкции, обновленные с помощью версий с кодировкой EVEX

Устаревшее кодированиеГруппаИнструкцииAVX-512
расширения
SSE
SSE2
MMX
AVX
SSE3
SSE4.1
AVX2
FMA
ДаДаНетVADDVADDPD, VADDPS, VADDSD, VADDSSF, VL
VANDVANDPD, VANDPS, VANDNPD, VANDNPSVL, DQ
VCMPVCMPPD, VCMPPS, VCMPSD, VCMPSSF
VCOMVCOMISD, VCOMISSF
VDIVVDIVPD, VDIVPS, VDIVSD, V DIVSSF, VL
VCVTVCVTDQ2PD, VCVTDQ2PS, VCVTPD2DQ, VCVTPD2PS,

VCVTPH2PSVCVTPS2PH, VCVTPS2DQ, VCVTPS2PD,
VCVTSD2SI, VCVTSD2SS, VCVTSI2SD, VCVTSI2SD, VCVTSI2SD, VCVTSI2SD, VCVTSI2SD, 150>VCVTSS2SD, VCVTSS2SI,
VCVTTPD2DQ, VCVTTPS2DQ, VCVTTSD2SI, VCVTTSS2SI

FCVTTSS2SI

F 675>VMAXPD, VMAXPS, VMAXSD, VMAXSSF, VL
VMINVMINPD, VMINPS, VMINSD, VMINSSF
VMOVVMOVAPD, VMOVAPS, VMOVD, VMOVQ,

VMOVDDUP,
VMOVHLPS, VMOVHPD, VMOVHPD, VMOVLHPS, VMOVLPD, VMOVLPS,
VMOVNTDQA, VMOVNTDQ, VMOVNTPD, VMOVNTPS,
VMOVSD, VMOVSHDUP, VMOVSLDUP, VMOVSS, VMOVUPD, VMOVUPSVMOVDQA32, VMOVDQA64,
VMOVDQU8, VMO VDQU16, VMOVDQU32, VMOVDQU64

F, VL, BW
VMULVMULPD, VMULPS, VMULSD, VMULSSF, VL
VORVORPD, VORPSVL, DQ
VSQRTPVSQRTPD, VSQRTPS, VSQRTSD, VSQRTSSF, VL
VSUBVSUBPD, VSUBPS, VSUBSD, VSUBSSF, VL
VUCOMIVUCOMISD, VUCOMISSF
VUNPCKVUNPCKHPD, VUNPCKHPS, VUNPCKLPD, VUNPCKLPSF, VL
VXORVXORPD, VXORPSVL, DQ
НетДаНетVEXTRACTPSVEXTRACTPSF
VINSERTPSVINSERTPSF
VPALIGNRVPALIGNRVL, BW
VPEXTRVPEXTRB, VPEXTRW, VPEXTRD, VPEXTRQBW, DQ
VPINSRVPINSRB, VPINSRW, VPINSRD, VPINSRQBW, DQ
ДаДаДаVPACKVPACKSSWB, VPACKSSDW, VPACKUSDW, VPACKUSWBVL, BW
VPADDVPADDB, VPADDW, VPADDD, VPADDQ,

VPADDSB, VPADDSW, VPADDUSB, VPADDUSW

F, VL, BW
VPANDVPANDD, VPANDQ, VPANDND, VPANDNQF, VL
VPAVGVPAVGB, VPAVGWVL, BW
VPCMPEQVPCMPEQB, VPCMPEQW, VPCMPEQD, VPCMPEQQF, VL, BW
VPCMPGTVPCMPGTB, VPCMPGTW, VPCMPGTD, VPCMPGTQF, VL, BW
VPMAXVPMAXSB, VPMAXSW, VPMAXSD, VPMAXSQ, VPMAXUB, VPMAXUW, VPMAXUD, VPMAXUQF, VL, BW
VPMINVPMINSB, VPMINSW, VPMINSD, VPMINSQ, VPMINUB, VPMINUW, VPMINUD, VPMINUQF, VL, BW
VPMOVVPMOVSXBW, VPMOVSXBD, VPMOVSXBQ, VPMOVSXWD, VPMOVSXWQ, VP MOVSXDQ,

VPMOVZXBW, VPMOVZXBD, VPMOVZXBQ, VPMOVZXWD, VPMOVZXWQ, VPMOVZXDQ VL, BW

VPMULVPMULDQ, VPMULUDQ, VPMULHRSW, VPMULHUW, VPMULHW, VPMULLD, VPMULLQ, VPMULLWF, VL, BW
VPORVPORD, VPORQF, VL
VPSUBVPSUBB, VPSUBW, VPSUBD, VPSUBQ, VPSUBSB, VPSUBSW, VPSUBUSB, VPSUBUSWF, VL, BW
VPUNPCKVPUNPCKHBW, VPUNPCKHWD, VPUNPCKHDQ, VPUNPCKHQDQ,

VPUNPCKLBW, VPUNPCKLWD, VPUNPCKLDQ, VPUNPCKLQDQ

F, VL, BW
VPXORVPXORD150>VPXORQF, VL
VPSADBWVPSADBWVL, BW
VPSHUFVPSHUFB, VPSHUFHW, VPSHUFLW, VPSHUFD,

VPSLLDQ, VPSLLW, VPSLLD, VPSLLQ,
VPSRAW, VPSRAD, VPSRAQ,
VPSRLDQ, VPSRLW, VPSRLD, VPSRLQ,
VPSLLVW, VPSLLVD, VPSLLVQ,
VPSRLVW, VPSRLVD, VPSRLVQ,
VPSHUFPD, VPSHUFPS

F, VL, BW
НетДаДаVEXTRACTVEXTRACTF32X4, VEXTRACTF64X2, VEXTRACTF32X8, VEXTRACTF64X4,

VEXTRACTI32X4>, VEXTRACTI64X2, VEXTRACTI32X8, VEXTRACTI64X4

F, VL, DQ
VINSERTVINSERTF32x4, VINSERTF64X2 VINSERTF32X8, VINSERTF64x4,

VINSERTI32X4, VINSERTI64X2, VINSERTI32X8, VINSERTI64X4, D150>VINSERTI64X4 <128Q, D150>VINSERTI64X4 <128Q, D150, VINSERTI64X4>VPABS

VPABSB, VPABSW, VPABSD, VPABSQF, VL, BW
VPERMVPERMD, VPERMILPD, VPERMILPS, VPERMPD, VPERMPS, VPERMQF, VL
VPMADDVPMADDUBSWVPMADDWDVL, BW
НетНетДаVFMADDVFMADD132PD, VFMADD213PD, VFMADD231PD,

VFMADD132PS, VFMADD213PS, VFMAD150>VFMADD213PS, VFM , VFMADD213SD, VFMADD231SD,
VFMADD132SS, VFMADD213SS, VFMADD231SS

F, VL
VFMADDS>VFMADDS>VFMADDS>, VFMADDSUB213PD, VFMADDSUB231PD,

VFMADDSUB132PS, VFMADDSUB213PS, VFMADDSUB231PS

F, VLADD132D>VLADSUB231PS. , VFMSUBADD213PD, VFMSUBADD231PD,

VFMSUBADD132PS, VFMSUBADD213PS, VFMSUBADD231PS

F, VLMS <525832>VLMS <525832>VLMSUBADD231PS , VFMSUB213PD, VFMSUB231PD,

VFMSUB132PS, VFMSUB213PS, VFMSUB231PS,
VFMSUB132SD, VFMSUB132SD, VDF 150>VFMSUB231SD,
VFMSUB132SS, VFMSUB213SS, VFMSUB231SS

F, VL
VFNMADDVFNMADD132PD, <1AD12D>VF13PD, <1AD12D>VF13PD 150>VFNMADD231PD,

VFNMADD132PS, VFNMADD213PS, VFNMADD231PS,
VFNMADD132SD, VFNMADD213SD, VFNMADD231SD,
VFNMADD132SS, VFNMAD8D213SSN

VFNMSUBVFNMSUB132PD, VFNMSUB213PD, VFNMSUB231PD,

VFNMSUB132PS, VFNMSUB213PS, <633132>VFNMSUB213PS, <15023>VFNMSUB213PS, <633132>VFNMSUB213PS, <15023>VFNMSUB213PS, <15023>VFNMSUB213PS, <15023>>, VFNMSUB213SD, VFNMSUB231SD,
VFNMSUB132SS, VFNMSUB213SS, VFNMSUB231SS

F, VL <5HER25>VGATHER>VGATHER>, VGATHERDPD, VGATHERQPS, VGATHERQPDF, VL
VPGATHERVPGATHERDD, VPGATHERDQ, VPGATHERQD, VPGATHERQQF, VL
VPSRAVVPSRAVW, VPSRAVD, VPSRAVQF, VL, BW

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

Подмножество AVX-512FCDERPF4FMAPS4VNNIWVPOPCNTDQVLDQBWIFMAVBMIVNNIBF16VBMI2BITALGVPCLMULQDQGFNIVAESVP2INTERSECT
Процессоры Knights Landing (Xeon Phi x200) (2016)ДаДаНет
Процессоры Knights Mill (Xeon Phi x205) (2017)ДаДаНет
Процессоры Skylake-SP, Skylake-X (2017)НетНетНетДаНет
Процессоры Cannon Lake (2018)ДаНет
Каскад Процессоры Lake (2019)НетДаНет
Процессоры Cooper Lake (2020)ДаНет
Процессоры Ice Lake (2019)ДаДаНетДаНет
Процессоры Tiger Lake (2020)Да

QEMU поддерживает эмуляцию AVX-512 в своей TCG.

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

Советник Intel "Vectorization" (начиная с версии 2016 Update 3) поддерживает собственный анализ производительности AVX-512 и качества векторного кода для Intel Xeon Phi 2-го поколения ( под кодовым названием Knights Landing ) процессор. Наряду с традиционным профилем горячих точек, рекомендациями консультантов и «бесшовной» интеграцией диагностики векторизации Intel Compiler, анализ Advisor Survey также предоставляет метрики AVX-512 ISA и новые специфичные для AVX-512 «характеристики», например Разброс, сжатие / расширение, использование маски.

AVX-512 вызывает дросселирование частоты даже больше, чем его предшественники, вызывая штраф для смешанных рабочих нагрузок. Дополнительное понижение частоты запускается 512-битной шириной векторов, и использование 256-битной части AVX-512 (AVX-512VL) не запускает его. В результате gcc и clang по умолчанию предпочитают использовать 256-битные векторы.

См. Также

Ссылки

Последняя правка сделана 2021-06-08 15:25:00
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте