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

от автора

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

Год

Регистры

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

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

Число команд

Статус

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-битного режима):

Категория

Примеры

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

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

Удаляемо?

x87 FPU

fsin, fyl2x, fpatan

~100

Устарели, заменены SSE/AVX

Можно удалить

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

Частично


ссылка на оригинал статьи https://habr.com/ru/articles/913586/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *