Расширения SSE


Общие сведения

SSE (Streaming SIMD Extensions) - расширение инструкций процессора для потоковой обработки в режиме SIMD (Single Instruction Multiple Data), т.е. когда требуется применять однотипные операции к потоку данных.

Расширение SSE разработано компанией Intel и было впервые применено в процессоре Intel Pentium III с ядром Katmai. Отсюда изначальное название KNI (Katmai New Instructions). Технология SSE позволила преодолеть проблемы MMX - при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры задействовались для MMX и работы с вещественными числами.

В общем случае, к архитектуре процессора добавляется ряд самих инструкций и несколько 128-битных регистров с различной интерперетацией. Тем не менее, хотя изначально каждый регистр трактуется как два значения с плавающей точкой двойной точности (2*64-бит), операции могут применяться практически ко всем типам, "помещающимся" в 16 байт:

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

Таким образом, для получения максимальной отдачи от SSE, следует использовать такие структуры данных, чтобы они максимально укладывались в эти 128-битные регистры. Если это не удается сделать изначально, то среди SSE существуют и специальные для этих целей инструкции.

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

Более подробно об этом можно прочитать в документе Using SSE and SSE2: Misconceptions and Reality на сайте Intel.





  Впервые применено в
SSE Intel Pentium III
SSE2 Intel Pentium IV
SSE3 Intel Pentium IV (Prescott)
SSE4 Intel Core (Penryn)

SSE

SSE включает в архитектуру процессора восемь 128-битных регистров (с xmm0 до xmm7), каждый из которых трактуется как 4 последовательных значения с плавающей точкой одинарной точности. SSE включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.

SSE2

SSE2 использует восемь 128-битных регистров (с xmm0 до xmm7), включённых в архитектуру x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности. SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных. Также SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели MMX, появившийся гораздо ранее.

SSE3

Набор SSE3 содержит 13 инструкций: FISTTP (x87), MOVSLDUP (SSE), MOVSHDUP (SSE), MOVDDUP (SSE2), LDDQU (SSE/SSE2), ADDSUBPD (SSE), ADDSUBPD (SSE2), HADDPS (SSE), HSUBPS (SSE), HADDPD (SSE2), HSUBPD (SSE2), MONITOR (нет аналога в SSE3 для AMD), MWAIT (нет аналога в SSE3 для AMD).

SSE4

SSE4 состоит из 54 инструкций, 47 из них относят к SSE4.1 (только они появятся в процессорах Penryn). Ожидается, что полный набор команд (SSE4.1 и SSE4.2, то есть 47 + оставшиеся 7 команд) будет доступен в процессорах Nehalem. Ни одна из SSE4 инструкций не работает с 64-х битными mmx регистрами (только с 128-ми битными xmm0-15).

Компилятор языка Си от Intel начиная с версии 10 будет генерировать инструкции SSE4 при задании опции -QxS.

Более подробную информацию по SSE4 можно найти на сайте Intel по ссылке.


© Лаборатория Параллельных информационных технологий НИВЦ МГУ
Rambler's Top100