SSE2 (Streaming SIMD Extensions 2)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 13:14, 2 июня 2017.

SSE2 (англ. Streaming SIMD Extensions 2, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium 4. Набор SSE2 добавил 144 новые команды к SSE, в котором было только 70 команд.

Поддержка инструкций SSE2 является обязательным условием использования современного программного обеспечения. В частности, без этого набора команд не будут работать популярные браузеры Google Chrome и Яндекс-браузер. На компьютере без SSE2 также невозможно использовать Windows 8, Windows 10, Microsoft Office 2013 и др.[Источник 1].

Особенности

Процессор, поддерживающий SSE2, требуется для установки Windows 8 и Microsoft Office 2013, ОС и ряд других программ Windows.[Источник 2].

  1. SSE2 использует восемь 128-битных регистров, включённых в архитектуру x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности.
  2. SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.
  3. SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше.
  4. SSE2 включает в себя две части – продолжение SSE и продолжение MMX.
  5. Продолжение SSE работает с вещественными числами.
  6. Продолжение MMX работает с целыми. В SSE2 регистры по сравнению с MMX удвоились (64 бита -> 128 битов). Т.к. скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа получает двукратный прирост производительности. Если программа уже была оптимизирована под MMX, то оптимизация под SSE2 даётся сравнительно легко в силу сходности системы команд.
  7. SSE2 включает в себя ряд команд управления кэш, предназначенных для минимизации загрязнения кэша при обработке объёмных потоков данных.
  8. SSE2 включает в себя сложные дополнения к командам преобразования чисел.

Инструкции

SSE2 расширяет технологию MMX и технологию SSE с добавлением 144 инструкций, поставляющих увеличения производительности через широкий диапазон приложений. Команды SIMD для работы с целыми числами, введенными с технологией MMX, увеличены с 64 до 128 бит, что обеспечивает удвоение эффективной скорости исполнения операций с целыми числами типа SIMD.

Инструкции по SIMD плавающей точки двойной точности допускают две операции с плавающей точкой, которые будут одновременно выполняться в Формате SIMD, Эта поддержа операций двойной точности помогает ускорить создание контента, финансовое, разработка и научные приложения.[Источник 3].

Команды SSE2

Исходные команды SSE были также улучшены для поддержки гибкого и более высокого динамического диапазона вычислительной мощности, поддерживая арифметические операции на многократных типах данных (например, двойные слова и четверные слова). Инструкции SSE2 позволяют разработчикам ПО иметь максимальную гибкость, чтобы реализовать алгоритмы и обеспечить улучшения производительности когда рабочее программное обеспечение, такое как MPEG 2, MP3, 3D графические адаптеры и т.д.


Команда Описание
ADDPD Векторное сложение Double
ADDSD Скалярное сложение Double
ANDPD Поразрядное логическое И над Double
ANDNPD Поразрядное логическое И-НЕ над Double
CLFLUSH Сброс в память строки кэша, содержащей адрес
CMPPD Векторное сравнение Double
CMPSD Скалярное сравнение Double
COMISD Скалярное сравнение упорядоченных значений и установка EFLAGS
CVTDQ2PD Преобразование двух упакованных DWord в два Double
CVTDQ2PS Преобразование четырех упакованных знаковых DWord в четыре упакованных Float
CVTPD2DQ Преобразование двух упакованных Double в два упакованных DWord
CVTPD2PI Преобразование двух упакованных Double в два упакованных DWord
CVTPD2PS Преобразование двух упакованных Float в два упакованных Double
CVTSD2SI Преобразование скалярного Double в DWord
CVTSD2SS Преобразование скалярного Double в Float
CVTSI2SD Преобразование скалярного DWord в Double
CVTSS2SD Преобразование скалярного Float в Double
CVTTPD2P Преобразование усечением двух упакованных Double в два DWord
CVTTPD2DQ Преобразование усечением двух упакованных Double в два DWord
CVTTPS2DQ Преобразование усечением четырех упакованных Float в четыре знаковых DWord
CVTTSD2SI Преобразование усечением скалярного Double в Float
DIVPD Векторное деление Double
DIVSD Скалярное деление Double
LFENCE Упорядочить операции загрузки
MASKMOVDQU Выборочная запись байт из источника в память
MAXPD Вычисление максимальных упакованных значений Double
MAXSD Скалярное вычисление максимального значения Double
MFENCE Упорядочить операции загрузки и сохранения
MINPD Вычисление минимальных упакованных значений Double
MINSP Скалярное вычисление минимального значения Double
MOVAPD Перемещение упакованных выровненных Double
MOVD Перемещение DWord
MOVDQA Перемещение выровненных 128 бит
MOVDQU Перемещение невыровненных 128 бит
MOVDQ2Q Перемещение младшего QWord
MOVHPD Перемещение старшего упакованного Double
MOVLPD Перемещение младшего упакованного Double
MOVMSKPD Извлечение 2-битной знаковой маски упакованных Double
MOVNTDQ Сохранение двух QWord в память без использования кэша
MOVNTI Сохранение DWord из регистра общего назначения в память без использования кэша
MOVNTPD Сохранение двух Double в память без использования кэша
MOVQ Перемещение QWord
MOVQ2DQ Перемещение QWord из MMX-регистра в младшее QWord XMM-регистра
MOVSD Перемещение скалярного Double
MOVUPD Перемещение невыровненных упакованных Double
MULPD Векторное умножение Double
MULSD Скалярное умножение Double
ORPD Поразрядное логическое ИЛИ над Double
PACKSSWB Упаковка со знаковым насыщением слов в байты
PACKSSDW Упаковка со знаковым насыщением двойных слов в слова
PACKUSWB Упаковка с беззнаковым насыщением слов в байты
PADDB Сложение упакованных байт
PADDW Сложение упакованных слов (Word)
PADDD Сложение упакованных двойных слов (DWord)
PADDQ Сложение учетверенных слов (QWord)
PADDSB Сложение упакованных байт со знаковым насыщением
PADDSW Сложение упакованных слов со знаковым насыщением
PADDUSB Сложение упакованных байт с беззнаковым насыщением
PADDUSW Сложение упакованных слов с беззнаковым насыщением
PAND Упакованное логическое И
PANDN Упакованное логическое И-НЕ
PAUSE Улучшить выполнение цикла ожидания-занятости
PAVGB Упакованное среднее байт
PAVGW Упакованное среднее слов
PCMPEQB Сравнение на равенство упакованных байт
PCMPEQW Сравнение на равенство упакованных слов
PCMPEQD Сравнение на равенство упакованных двойных слов
PCMPGTB Сравнение по условию "больше чем" упакованных байт
PCMPGTW Сравнение по условию "больше чем" упакованных слов
PCMPGTD Сравнение по условию "больше чем" упакованных двойных слов
PEXTRW Извлечение 16-битного слова из XMM-регистра
PINSRW Вставка 16-битного слова в регистр XMM
PMADDWD Упакованное знаковое умножение слов с последующим сложением промежуточных результатов в DWord
PMAXSW Возврат максимальных упакованных знаковых слов
PMAXUB Возврат максимальных упакованных беззнаковых байт
PMINSW Возврат минмальных упакованных знаковых слов
PMINUB Возврат минимальных упакованных беззнаковых байт
PMOVMSKB Перемещение байтовой знаковой маски в целочисленный регистр
PMULHUW Упакованное беззнаковое умножение слов с возвратом старших слов результата
PMULHW Упакованное знаковое умножение слов с возвратом старших слов результата
PMULLW Упакованное знаковое умножение слов с возвратом младших слов результата
PMULUDQ Умножение DWord и сохранение результата в XMM-регистре.
POR Упакованное логическое ИЛИ
PSADBW Суммарная разница значений пар беззнаковых упакованных байт
PSHUFD Перераспределение упакованных двойных слов
PSHUFHW Перераспределение упакованных слов в старших DWord
PSHUFLW Перераспределение упакованных слов в младших DWord
PSLLDQ Побайтный сдвиг влево
PSLLW Логический сдвиг слов влево
PSLLD Логический сдвиг двойных слов влево
PSLLQ Логический сдвиг учетверенных слов влево
PSRAW Арифметический сдвиг слов влево
PSRAD Арифметический сдвиг двойных слов влево
PSRLDQ Побайтный сдвиг вправо
PSRLW Логический сдвиг слов вправо
PSRLD Логический сдвиг двойных слов вправо
PSRLQ Логический сдвиг учетверенных слов вправо
PSUBB Вычитание упакованных байт
PSUBW Вычитание упакованных слов
PSUBD Вычитание упакованных двойных слов
PSUBQ Вычитание учетверенных слов
PSUBSB Вычитание упакованных слов со знаковым насыщением
PSUBSW Вычитание упакованных двойных слов со знаковым насыщением
PSUBUSB Вычитание упакованных байт с беззнаковым насыщением
PSUBUSW Вычитание упакованных слов с беззнаковым насыщением
PUNPCKHBW Распаковка старших упакованных байт в слова
PUNPCKHWD Распаковка старших упакованных слов в двойные слова
PUNPCKHDQ Распаковка старших упакованных двойных слов в учетверенные слова
PUNPCKHQDQ Распаковка старших упакованных учетверенных слов в двойные учетверенные слова
PUNPCKLBW Распаковка младших упакованных байт в слова
PUNPCKLWD Распаковка младших упакованных слов в двойные слова
PUNPCKLDQ Распаковка младших упакованных двойных слов в учетверенные слова
PUNPCKLQDQ Распаковка младших упакованных учетверенных слов в двойные учетверенные слова
PXOR Упакованное логическое исключающее ИЛИ
SHUFPD Перестановка упакованных значений Double
SQRTPD Векторное вычисление квадратного корня Double
SQRTSD Скалярное вычисление квадратного корня Double
SUBPD Векторное вычитание Double
SUBSD Скалярное вычитание Double
UCOMISD Неупорядоченное скалярное сравнение Double с установкой флагов в EFLAGS
UNPCKHPD Перенос верхних упакованных значений Double с чередованием
UNPCKLPD Перенос нижних упакованных значений Double с чередованием
XORDP Поразрядное логическое исключающее ИЛИ над Double

Поддержка

Название Поддерживаются Не поддерживаются
AMD Athlon 64, Sempron 64, Turion 64, Phenom Все AMD до Athlon 64
Intel NetBurst (Pentium 4, Xeon, Celeron, Celeron D), Pentium M и Celeron M, Core (2, i5, i7), Atom Все Intel до Pentium 4
VIA C7, Nano VIA C3
Transmeta Efficeon Crusoe

Поскольку SSE2 — расширение IA-32, процессоры, не поддерживающие IA-32, не поддерживают SSE2. Все известные процессоры x86-64 также поддерживают SSE2. Кроме того, не поддерживают IA-32-совместимые процессоры, появившиеся до SSE2.[Источник 4].

Литература

  1. Майкл Мэлоун «The Intel: как Роберт Нойс, Гордон Мур и Энди Гроув создали самую влиятельную компанию в мире» - М.: Эксмо, 2015. — 528 с. ISBN: 978-5-699-77591-0
  2. Барри Брэй Микропроцессоры Intel: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro Processor, Pentium 4. Архитектура, программирование и интерфейсы - СПб.: БХВ-Петербург, 2005. — 1328 с. ISBN: 5-94157-422-3

Источники

  1. SSE2 (Streaming SIMD Extensions 2) // Сhaynikam.info [2016-2017]. Дата обновления: 02.11.2016 г. URL: http://www.chaynikam.info/cpu_sse2.html (Дата обращения 01.05.2017)
  2. Включаем SSE2 Instructions в компьютере // Сайт о BIOS и ПК [2016-2017]. Дата обновления: 03.11.2015 г. URL: http://www.nastrojkabios.ru/protsessor/sse-sse2-instructions.html(Дата обращения .01.05.2017)
  3. Intel® Streaming SIMD Extensions Technology Defined // Intel [2016-2017]. Дата обновления: 16.04.2016 г. URL: http://www.intel.ru/content/www/ru/ru/support/processors/000005779.html (Дата обращения 01.05.2017)
  4. SSE2 // Wikipedia [2013-2017]. Дата обновления: 27.02.2017 г. URL: https://ru.wikipedia.org/wiki/SSE2 (Дата обращения 01.05.2017)