Как стать автором
Обновить

SIMD на x86 — чудовище Франкенштейна?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.2K

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

Год

Регистры

Типы операций

Макс. элементов

Число команд

Статус

MMX

1997

8×64-бит

Целочисленные

8×8-бит или 2×32-бит

57

устарел

3DNow!

1998

8×64-бит

FP32

2×32-бит

21

удалён

SSE

1999

8/16×128-бит

FP32

4×32-бит

70

активен

SSE2

2000

8/16×128-бит

FP64, целочисленные

2×64-бит, 16×8-бит

144

активен

SSE3

2004

8/16×128-бит

FP, x87

4×32-бит

13

активен

SSSE3

2006

8/16×128-бит

Целочисленные

16×8-бит

32

активен

SSE4.1

2007

8/16×128-бит

FP, целочисленные

4×32-бит

47

активен

SSE4.2

2008

8/16×128-бит

Строковые, CRC, popcnt

16 байт

7

активен

SSE4a

2007

8/16×128-бит

Целочисленные

4

удалён

AVX

2011

16×256-бит

FP32/FP64

8×32-бит, 4×64-бит

32

активен

AVX2

2013

16×256-бит

FP и целочисленные

32×8-бит

256

активен

FMA3

2013

16×128/256-бит

FP

4×64-бит, 8×32-бит

16

активен

FMA4

2011

16×128/256-бит

FP

4×64-бит, 8×32-бит

41

удалён

XOP

2011

16×128/256-бит

Целочисленные

16×8-бит

40

удалён

F16C

2012

16×128/256-бит

FP16 <-> FP32

8×16-бит

2

активен

AVX-512

2016

32×512-бит + маски

FP, целочисленные, маски

64×8-бит

500

частично активен

AMX

2023

8×8192-бит тайлы

INT8, BF16

матрицы 16×64

10

ограниченно активен

AVX10

2024

32×512-бит

FP8, FP16, FP32, INT

512-бит

50

в разработке

Общее количество всех команд во всех этих расширениях — 1342 инструкции!

При этом очень много дублирования / переизобретения функционала. Если бы не обратная совместимость — можно было бы половину удалить (MMX/MMX2, например, точно бы удалить).

От комментариев воздержусь, оставлю эту привилегию читателю ))

При этом SIMD на RiscV очень хвалят, как очень продуманный, минималистичный, при этом мощный и выразительный: https://www.youtube.com/watch?v=lwIBp6cc-HY

PS: Другие наборы команд, которые можно было бы удалить из x86, которые не удаляют из за обратной совместимости (в частости, наборы команд для 16/32-битного режима):

Категория

Примеры

Примерное число инструкций

Причина устаревания

Удаляемо?

MMX

paddb, emms

57

Вытеснен SSE2, не используется

Да

3DNow!

pfadd, pfrcp

21

Удалён из CPU AMD

Да

Сегментация

lds, les, lfs, lgs, arpl

~15

Не используется в x86-64

Да

Task switching

ltr, str, call far, ret far

~10

ОС используют программный планировщик

Да

BCD/строковые устаревшие

daa, das, aam, aad, into

~15

Не используются компиляторами

Да

ESC/WAIT

wait, esc

~5

Для старых FPU, неактуально

Да

XLAT и подобные

xlat

1

Устарела, почти не применяется

Да

Loop-prefixed

loop, loope, loopne

3

Медленнее обычных jmp/cmp

Частично

BOUND

bound

1

Никем не используется

Да

16-битные только

pushaw, popaw, jcxz

~8

Только real/protected mode; не используются в x86-64

Да

32-битные только

pushad, popad, jecxz

~8

Недоступны в x86-64; заменены другими средствами

Да

Старые far-call инструкции

call far ptr, jmp far ptr

~4

Только 16/32-битный сегментный код

Да

INT xx (кроме 0x80/0x3)

int 0x21, int 0x13

много

BIOS/DOS, неактуальны

Да (в usermode)

IN/OUT инструкции

in al, dx / out dx, al

~6

Только для доступа к портам; не применяются в usermode

Частично

Теги:
Хабы:
+9
Комментарии8

Публикации

Ближайшие события