SSE4 - SSE4

SSE4 (Расширения для потоковой передачи SIMD 4) это SIMD ЦПУ Набор инструкций используется в Intel Основная микроархитектура и AMD K10 (K8L). Об этом было объявлено 27 сентября 2006 года осенью 2006 года. Форум разработчиков Intel, с расплывчатыми деталями в белая бумага;[1] более точные сведения о 47 инструкциях стали доступны на форуме разработчиков Intel весной 2007 г. Пекин, в презентации.[2] SSE4 полностью совместим с программным обеспечением, написанным для предыдущих поколений микропроцессоров архитектуры Intel 64 и IA-32. Все существующее программное обеспечение продолжает работать правильно без изменений на микропроцессорах, которые включают SSE4, а также при наличии существующих и новых приложений, которые включают SSE4.[3]

Подмножества SSE4

Intel SSE4 состоит из 54 инструкций. Подмножество, состоящее из 47 инструкций, именуемое SSE4.1 в некоторой документации Intel доступно в Penryn. Кроме того, SSE4.2, второе подмножество, состоящее из 7 оставшихся инструкций, сначала доступно в Nehalem -основан Core i7. Intel считает, что отзывы разработчиков сыграли важную роль в разработке набора инструкций.

Начиная с Барселона -процессоры, AMD представил SSE4a набор инструкций, состоящий из 4 инструкций SSE4 и 4 новых инструкций SSE. Эти инструкции отсутствуют в процессорах Intel, поддерживающих SSE4.1, а процессоры AMD только начали поддерживать Intel SSE4.1 и SSE4.2 (полный набор инструкций SSE4) в Бульдозер FX процессоры на базе. В SSE4a также была введена функция несовпадения SSE, что означало, что невыровненные инструкции загрузки выполнялись так же быстро, как выровненные версии на выровненных адресах. Это также позволило отключить проверку выравнивания при доступе к памяти ненагруженных операций SSE.[4] Позже Intel представила аналогичные улучшения скорости невыровненного SSE в своих процессорах Nehalem, но не вводила несогласованный доступ с помощью ненагруженных инструкций SSE до тех пор, пока AVX.[5]

Неправильное название

То, что сейчас известно как SSSE3 (Дополнительная потоковая передача SIMD Расширения 3), введенные в Intel Core 2 Линия процессоров, некоторые СМИ называли SSE4, пока Intel не придумала прозвище SSSE3. Компания Intel, получившая внутреннее название Merom New Instructions, изначально не планировала давать им особое название, что подверглось критике со стороны некоторых журналистов.[6] В конце концов Intel разрешила путаницу и зарезервировала имя SSE4 для своего следующего расширения набора инструкций.[7]

Intel использует маркетинговый термин HD Boost обратиться к SSE4.[8]

Новые инструкции

В отличие от всех предыдущих итераций SSE, SSE4 содержит инструкции, выполняющие операции, не относящиеся к мультимедийным приложениям. Он содержит ряд инструкций, действие которых определяется постоянным полем, и набор инструкций, которые принимают XMM0 в качестве неявного третьего операнда.

Некоторые из этих инструкций активируются одноцикловым механизмом перемешивания в Penryn. (Операции перемешивания изменяют порядок байтов в регистре.)

SSE4.1

Эти инструкции были представлены с Микроархитектура Penryn, 45-нм усадка Intel Основная микроархитектура. Поддержка указывается с помощью флага CPUID.01H: ECX.SSE41 [Bit 19].

ИнструкцияОписание
MPSADBW
Вычислить восемь сумм смещений абсолютных разностей, по четыре за раз (т. Е. | X0−y0| + | х1−y1| + | х2−y2| + | х3−y3|, | х0−y1| + | х1−y2| + | х2−y3| + | х3−y4|, ..., | х0−y7| + | х1−y8| + | х2−y9| + | х3−y10|); эта операция важна для некоторых HD кодеки, и позволяет вычислить разность блоков 8 × 8 менее чем за семь циклов.[9] Один бит трехбитового непосредственного операнда указывает,0 .. y10 или у4 .. y14 должны использоваться из операнда назначения, два других должны ли x0..Икс3, Икс4..Икс7, Икс8..Икс11 или х12..Икс15 следует использовать из источника.
PHMINPOSUW
Устанавливает нижнее 16-разрядное слово без знака места назначения равным наименьшему 16-битному слову без знака в источнике, а следующее снизу - к индексу этого слова в источнике.
PMULDQ
Упакованное умножение со знаком на двух наборах двух из четырех упакованных целых чисел, 1-го и 3-го на упакованные 4, дает два упакованных 64-битных результата.
PMULLD
Упакованное умножение со знаком, четыре упакованных набора 32-битных целых чисел, умноженные на 4 упакованных 32-битных результата.
DPPS, DPPD
Скалярное произведение для данных AOS (массив структур). Это требует немедленного операнда, состоящего из четырех (или двух для DPPD) битов, чтобы выбрать, какую из записей во входных данных следует умножать и накапливать, и еще четыре (или два для DPPD), чтобы выбрать, следует ли помещать 0 или скалярное произведение в соответствующее поле вывода.
БЛЕНДПС, BLENDPD, BLENDVPS,BLENDVPD, PBLENDVB, PBLENDW
Условное копирование элементов из одного места в другое на основе (для формы, отличной от V) на битах в непосредственном операнде и (для формы V) на битах в регистре XMM0.
PMINSB, PMAXSB, PMINUW, PMAXUW, ПМИНУД, ПМАКСУД, PMINSD, PMAXSD
Упакованный минимум / максимум для разных типов целочисленных операндов
РАУНДЫ, РАУНДЫ, ROUNDPD, КРУГЛЫЙSD
Округление значений в регистре с плавающей запятой до целых чисел с использованием одного из четырех режимов округления, указанных в непосредственном операнде
ВСТАВКИ, PINSRB, PINSRD/PINSRQ,ВЫДЕРЖКИ, PEXTRB, PEXTRD/PEXTRQ
Команды INSERTPS и PINSR считывают 8, 16 или 32 бита из регистра x86 или ячейки памяти и вставляют их в поле регистра назначения, заданное непосредственным операндом. EXTRACTPS и PEXTR считывают поле из исходного регистра и вставляют его в регистр x86 или ячейку памяти. Например, PEXTRD eax, [xmm0], 1; EXTRACTPS [addr + 4 * eax], xmm1, 1 сохраняет первое поле xmm1 в адресе, заданном первым полем xmm0.
PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ
Упакованный знак / нулевое расширение для более широких типов
PTEST
Это похоже на инструкцию TEST в том, что она устанавливает Z флаг к результату И между его операндами: ZF устанавливается, если DEST AND SRC равно 0. Кроме того, он устанавливает флаг C, если (NOT DEST) AND SRC равно нулю.

Это эквивалентно установке флага Z, если ни один из битов, замаскированных SRC, не установлен, и флага C, если установлены все биты, замаскированные SRC.

PCMPEQQ
Quadword (64 бита) сравнить на равенство
PACKUSDW
Преобразуйте подписанные DWORD в беззнаковые WORD с насыщением.
MOVNTDQA
Эффективное чтение из области памяти комбинирования записи в регистр SSE; это полезно для получения результатов от периферийных устройств, подключенных к шине памяти.

SSE4.2

SSE4.2 добавил STTNI (новые строки и текстовые инструкции),[10] несколько новых инструкций, которые выполняют поиск символов и сравнение двух операндов по 16 байт одновременно. Они были разработаны (среди прочего) для ускорения анализа XML документы.[11] Он также добавил инструкцию CRC32 для вычисления циклический контроль избыточности как используется в определенных протоколах передачи данных. Эти инструкции были впервые реализованы в Nehalem -основан Intel Core i7 продуктовую линейку и выполните набор инструкций SSE4. Поддержка указывается с помощью флага CPUID.01H: ECX.SSE42 [Bit 20].

ИнструкцияОписание
CRC32
Накапливать CRC32 Значение C с использованием полинома 0x11EDC6F41 (или, без старшего бита, 0x1EDC6F41).[12][13]
PCMPESTRI
Упакованные строки сравнения явной длины, индекс возврата
PCMPESTRM
Упакованные строки сравнения явной длины, маска возврата
PCMPISTRI
Упакованные строки сравнения неявной длины, индекс возврата
PCMPISTRM
Упакованные строки сравнения неявной длины, маска возврата
PCMPGTQ
Сравните упакованные подписанные 64-битные данные для большего, чем

POPCNT и LZCNT

Эти инструкции работают с целыми числами, а не с регистрами SSE, потому что они не являются инструкциями SIMD, но появляются одновременно, и хотя они были введены AMD с набором инструкций SSE4a, они считаются отдельными расширениями со своими собственными выделенными битами CPUID для обозначения поддержки. Intel внедряет POPCNT, начиная с Nehalem микроархитектура и LZCNT начиная с Haswell микроархитектура. AMD реализует оба, начиная с Микроархитектура Барселоны.

AMD называет эту пару инструкций Расширенное управление битами (ПРО).

ИнструкцияОписание
POPCNT
Количество населения (количество битов установлено равным 1). Поддержка указывается с помощью флага CPUID.01H: ECX.POPCNT [Bit 23].[14]
LZCNT
Ведущий нулевой счет. Поддержка указывается с помощью флага CPUID.80000001H: ECX.ABM [Bit 5].[15]

Кодировка lzcnt достаточно похож на бср (битовое сканирование в обратном направлении), что если lzcnt выполняется на ЦП, не поддерживающем его, например ЦП Intel до Haswell, он выполнит бср операции вместо того, чтобы вызвать ошибку недопустимой инструкции, несмотря на разные значения результатов lzcnt и бср.

Конечные нули можно подсчитать с помощью bsf (битовое сканирование вперед) или tzcnt инструкции.

SSE4a

Группа инструкций SSE4a была представлена ​​в AMD Микроархитектура Барселоны. Эти инструкции недоступны для процессоров Intel. Поддержка указывается с помощью флага CPUID.80000001H: ECX.SSE4A [Bit 6].[15]

ИнструкцияОписание
EXTRQ/ВСТАВИТЬ
Комбинированные инструкции по сдвигу маски.[16]
МОВНЦД/МОВНЦС
Инструкции по скалярному потоковому хранилищу.[17]

Поддерживающие процессоры

Рекомендации

  1. ^ Новинка набора команд Intel Streaming SIMD Extensions 4 (SSE4), Intel.
  2. ^ Настройка Intel SSE4 для 45-нм микроархитектуры Intel Core нового поколения, Intel.
  3. ^ Справочник по программированию Intel SSE4
  4. ^ ""Барселона «Функция процессора: несогласованный доступ к SSE». AMD. Архивировано из оригинал 9 августа 2016 г.. Получено 3 марта, 2015.
  5. ^ «Внутри микроархитектуры Intel Nehalem». Получено 3 марта, 2015.
  6. ^ Мой опыт работы с "Conroe", DailyTech
  7. ^ Расширение самой популярной в мире архитектуры процессора В архиве 24 ноября 2011 г. Wayback Machine, Intel
  8. ^ «Intel - Решения для центров обработки данных, Интернет вещей и инновации в области ПК». Intel.
  9. ^ Оценка движения с помощью Intel Streaming SIMD Extensions 4 (Intel SSE4), Intel.
  10. ^ «Проверка схемы с помощью Intel® Streaming SIMD Extensions 4 (Intel® SSE4)».
  11. ^ «Ускоритель синтаксического анализа XML с Intel® Streaming SIMD Extensions 4 (Intel® SSE4)».
  12. ^ Справочник по программированию Intel SSE4 п. 61. См. Также RFC 3385 для обсуждения полинома CRC32C.
  13. ^ Быстрое параллельное вычисление CRC с использованием инструкции Nehalem CRC32 - Доктор Доббс, 12 апреля 2011 г.
  14. ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 2B: Справочник по набору команд, N – Z.
  15. ^ а б Спецификация AMD CPUID
  16. ^ Рахул Чатурведи (17 сентября 2007 г.). ""Барселона «Характеристика процессора: набор инструкций SSE4a». Архивировано из оригинал 25 октября 2013 г.
  17. ^ Рахул Чатурведи (2 октября 2007 г.). ""Барселона «Функция процессора: SSE4a, часть 2». Архивировано из оригинал 25 октября 2013 г.
  18. ^ «AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX».

внешняя ссылка