Особенности
Восемь 128-битных регистров XMM.
32-битный регистр флагов (MXCSR).
128-битный упакованный тип данных с плавающей точкой одинарной точности.
Инструкции над вещественными числами одинарной точности.
Инструкции явной предвыборки данных, контроля кэширования данных и контроля порядка операций сохранения.
Регистры
В SSE добавлены восемь 128-битных регистров, которые называются xmm0 — xmm7.
Каждый регистр может содержать четыре 32-битных значения с плавающей точкой одинарной точности.
SSE-команды
Команды для чисел с плавающей точкой
Команды пересылки
Скалярные типы – MOVSS
Упакованные типы – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
Арифметические команды
Скалярные типы – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
Упакованные типы – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
Команды сравнения
Скалярные типы – CMPSS, COMISS, UCOMISS
Упакованные типы – CMPPS
Перемешивание и распаковка
Упакованные типы – SHUFPS, UNPCKHPS, UNPCKLPS
Команды для преобразования типов
Скалярные типы – CVTSI2SS, CVTSS2SI, CVTTSS2SI
Упакованные типы – CVTPI2PS, CVTPS2PI, CVTTPS2PI
Битовые логические операции
Упакованные типы – ANDPS, ORPS, XORPS, ANDNPS
Команды для целых чисел
Арифметические команды
PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
Команды пересылки
PEXTRW, PINSRW
Другие
PMOVMSKB, PSHUFW
Другие команды
Работа с регистром MXCSR
LDMXCSR, STMXCSR
Управление кэшем и памятью
MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
3. SSE2
SSE2 (англ. Streaming SIMD Extensions 2, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium 4. SSE2 расширяет набор инструкций SSE с целью полностью вытеснить MMX. SSE2 добавила 144 новых команд к SSE, в котором было только 70 команд.
Особенности
SSE2 использует восемь 128-битных регистров (xmm0 до xmm7), включённых в архитектуру x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности.
SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.
SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше.
SSE2 включает в себя две части – продолжение SSE и продолжение MMX.
Продолжение SSE работает с вещественными числами.
продолжение MMX работает с целыми. В SSE2 регистры по сравнению с MMX удвоились (64 бита -> 128 битов). Т.к. скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа получает двукратный прирост производительности. Если программа уже была оптимизирована под MMX, то оптимизация под SSE2 даётся сравнительно легко в силу сходности системы команд.
SSE2 включает в себя ряд команд управления кэшем, предназначенных для минимизации загрязнения кэша при обработке неопределенных потоков информации.
SSE2 включает в себя сложные дополнения к командам преобразования чисел.
4. SSE3
SSE3 (PNI — Prescott New Instruction) — третья версия SIMD-расширения Intel, потомок SSE, SSE2 и MMX. Впервые представлено 2 февраля 2004 года в ядре Prescott процессора Pentium 4. В 2005 AMD предложила свою реализацию SSE3 для процессоров Athlon 64 (ядра Venice, San Diego и Newark).
Набор 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).
Наиболее заметное изменение - возможность горизонтальной работы с регистрами. Если говорить более конкретно, добавлены команды сложения и вычитания нескольких значений, хранящихся в одном регистре. Эти команды упростили ряд DSP и 3D-операций. Существует также новая команда для преобразования значений с плавающей точкой в целые без необходимости вносить изменения в глобальном режиме округления.
