SSE4 - SSE4
SSE4 ( Streaming SIMD Extensions 4 ) - это набор инструкций ЦП SIMD, используемый в микроархитектуре Intel Core и AMD K10 (K8L) . Об этом было объявлено 27 сентября 2006 г. на Форуме разработчиков Intel осенью 2006 г. , а нечеткие детали были изложены в официальном документе ; более точные подробности 47 инструкций стали доступны в презентации на форуме разработчиков Intel весной 2007 года в Пекине . SSE4 полностью совместим с программным обеспечением, написанным для предыдущих поколений микропроцессоров с архитектурой Intel 64 и IA-32. Все существующее программное обеспечение продолжает работать правильно без изменений на микропроцессорах, которые включают SSE4, а также при наличии существующих и новых приложений, которые включают SSE4.
Подмножества SSE4
Intel SSE4 состоит из 54 инструкций. Подмножество, состоящее из 47 инструкций, именуемое SSE4.1 в некоторой документации Intel, доступно в Penryn . Кроме того, SSE4.2 , второе подмножество , состоящее из 7 оставшихся инструкций, является первым доступным в Nehalem основанного Core i7 . Intel считает, что отзывы разработчиков сыграли важную роль в разработке набора инструкций.
Начиная с процессоров на базе Barcelona , AMD представила набор инструкций SSE4a , который имеет 4 инструкции SSE4 и 4 новые инструкции SSE. Этих инструкций нет в процессорах Intel, поддерживающих SSE4.1, а процессоры AMD только начали поддерживать Intel SSE4.1 и SSE4.2 (полный набор инструкций SSE4) в процессорах FX на базе Bulldozer . В SSE4a также была введена функция несовпадения SSE, что означало, что невыровненные инструкции загрузки выполнялись так же быстро, как выровненные версии на выровненных адресах. Это также позволило отключить проверку выравнивания при доступе к памяти ненагруженных операций SSE. Позже Intel представила аналогичные улучшения скорости невыровненного SSE в своих процессорах Nehalem, но не вводила несогласованный доступ с помощью ненагруженных инструкций SSE до AVX .
Путаница в названии
То, что сейчас известно как SSSE3 (Supplemental Streaming SIMD Extensions 3), представленное в линейке процессоров Intel Core 2 , называлось SSE4 в некоторых СМИ, пока Intel не придумала прозвище SSSE3. Компания Intel, получившая внутреннее название Merom New Instructions, изначально не планировала давать им особое название, что подверглось критике со стороны некоторых журналистов. В конце концов Intel разрешила путаницу и зарезервировала имя SSE4 для своего следующего расширения набора инструкций.
Intel использует маркетинговый термин HD Boost для обозначения SSE4.
Новые инструкции
В отличие от всех предыдущих итераций SSE, SSE4 содержит инструкции, выполняющие операции, не относящиеся к мультимедийным приложениям. Он содержит ряд инструкций, действие которых определяется постоянным полем, и набор инструкций, которые принимают XMM0 в качестве неявного третьего операнда.
Некоторые из этих инструкций выполняются одноцикловым механизмом перемешивания в Penryn. (Операции перемешивания переупорядочивают байты в регистре.)
SSE4.1
Эти инструкции были представлены с помощью микроархитектуры Penryn , 45-нм усадки микроархитектуры Intel Core . Поддержка указывается с помощью флага CPUID.01H: ECX.SSE41 [Bit 19].
Инструкция | Описание |
---|---|
MPSADBW
|
Вычислить восемь сумм смещений абсолютных разностей, по четыре за раз (т. Е. | X 0 −y 0 | + | x 1 −y 1 | + | x 2 −y 2 | + | x 3 −y 3 |, | x 0 −y 1 | + | x 1 −y 2 | + | x 2 −y 3 | + | x 3 −y 4 |, ..., | x 0 −y 7 | + | x 1 −y 8 | + | х 2 -y 9 | + | х 3 -y 10 |); эта операция важна для некоторых кодеков HD и позволяет вычислить разницу блоков 8 × 8 менее чем за семь циклов. Один бит трехбитового непосредственного операнда указывает, следует ли использовать y 0 .. y 10 или y 4 .. y 14 из операнда-адресата, два других - x 0 .. x 3 , x 4 .. x 7 , x 8 ..x 11 или x 12 ..x 15 следует использовать из источника. |
PHMINPOSUW
|
Устанавливает нижнее 16-разрядное слово без знака места назначения равным наименьшему 16-битному слову без знака в источнике, а следующее снизу - к индексу этого слова в источнике. |
PMULDQ
|
Упакованное 32-битное «длинное» умножение со знаком, умножение двух (1-го и 3-го) из четырех упакованных целых чисел дает два упакованных 64-битных результата. |
PMULLD
|
Упакованное 32-битное «младшее» умножение со знаком, четыре упакованных набора целых чисел, умноженные на четыре упакованных 32-битных результата. |
DPPS, DPPD
|
Точечный продукт для данных AOS (массив структур). Это требует немедленного операнда, состоящего из четырех (или двух для DPPD) битов, чтобы выбрать, какие из входных данных нужно умножать и накапливать, и еще четыре (или два для DPPD), чтобы выбрать, следует ли помещать 0 или скалярное произведение в соответствующее поле вывода. |
BLENDPS, BLENDPD, BLENDVPS,
BLENDVPD, PBLENDVB, PBLENDW
|
Условное копирование элементов из одного места в другое, основанное (для не-V-формы) на битах в непосредственном операнде и (для V-формы) на битах в регистре XMM0. |
PMINSB, PMAXSB, PMINUW,
PMAXUW, PMINUD, PMAXUD,
PMINSD, PMAXSD
|
Упакованный минимум / максимум для разных типов целочисленных операндов |
ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD
|
Округление значений в регистре с плавающей запятой до целых чисел с использованием одного из четырех режимов округления, указанных в непосредственном операнде. |
INSERTPS, PINSRB, PINSRD/PINSRQ,
EXTRACTPS, 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 (String and Text New Instructions), несколько новых инструкций, которые выполняют поиск символов и сравнение двух операндов по 16 байт одновременно. Они были разработаны (среди прочего) для ускорения анализа XML- документов. Он также добавил инструкцию CRC32 для вычисления циклических проверок избыточности, используемых в определенных протоколах передачи данных. Эти инструкции были впервые реализованы в Nehalem -А Intel Core i7 продуктовой линейки и завершить набор инструкций SSE4. Поддержка указывается с помощью флага CPUID.01H: ECX.SSE42 [Bit 20].
Инструкция | Описание |
---|---|
CRC32
|
Накопите значение CRC32 C, используя полином 0x11EDC6F41 (или, без старшего бита, 0x1EDC6F41). |
PCMPESTRI
|
Упакованное сравнение строк с явной длиной, индекс возврата |
PCMPESTRM
|
Упакованные строки сравнения явной длины, маска возврата |
PCMPISTRI
|
Упакованные строки сравнения неявной длины, индекс возврата |
PCMPISTRM
|
Упакованные строки сравнения неявной длины, маска возврата |
PCMPGTQ
|
Сравнить упакованные подписанные 64-битные данные для большего, чем |
POPCNT и LZCNT
Эти инструкции работают с целыми числами, а не с регистрами SSE, потому что они не являются инструкциями SIMD, но появляются одновременно, и, хотя они были введены AMD с набором инструкций SSE4a, они считаются отдельными расширениями со своими собственными выделенными битами CPUID для обозначения поддержки. Intel внедряет POPCNT, начиная с микроархитектуры Nehalem, и LZCNT, начиная с микроархитектуры Haswell . AMD реализует и то, и другое, начиная с микроархитектуры Барселоны .
AMD называет эту пару инструкций Advanced Bit Manipulation (ABM) .
Инструкция | Описание |
---|---|
POPCNT
|
Счетчик заполнения (количество битов, равное 1). Поддержка указывается с помощью флага CPUID.01H: ECX.POPCNT [Bit 23]. |
LZCNT
|
Ведущий нулевой счет . Поддержка указывается с помощью флага CPUID.80000001H: ECX.ABM [Bit 5]. |
Кодирование lzcnt достаточно похоже на bsr (обратное сканирование битов), что, если lzcnt выполняется на ЦП, не поддерживающем его, например на ЦП Intel до Haswell, он будет выполнять операцию bsr вместо того, чтобы вызывать ошибку недопустимой инструкции, несмотря на другой результат. значения lzcnt и bsr .
Завершающие нули можно подсчитать с помощью инструкций bsf (перемотка вперед) или tzcnt .
SSE4a
Группа инструкций SSE4a была представлена в микроархитектуре AMD в Барселоне . Эти инструкции недоступны для процессоров Intel. Поддержка указывается с помощью флага CPUID.80000001H: ECX.SSE4A [Bit 6].
Инструкция | Описание |
---|---|
EXTRQ/INSERTQ
|
Комбинированные инструкции по сдвигу маски. |
MOVNTSD/MOVNTSS
|
Инструкции по скалярному потоковому хранилищу. |
Поддерживающие процессоры
-
Intel
- Процессоры Silvermont (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Процессоры Goldmont (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Процессоры Goldmont Plus (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Процессоры Tremont (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Процессоры Penryn (поддерживается SSE4.1, кроме Pentium Dual-Core и Celeron )
- Процессоры Nehalem и Westmere (поддерживаются SSE4.1, SSE4.2 и POPCNT, кроме Pentium и Celeron )
- Процессоры Sandy Bridge и новее (поддерживаются SSE4.1, SSE4.2 и POPCNT, включая Pentium и Celeron )
- Процессоры Haswell и новее (поддерживаются SSE4.1, SSE4.2, POPCNT и LZCNT)
-
AMD
- Процессоры на базе K10 (поддерживаются SSE4a, POPCNT и LZCNT)
- "Cat" маломощные процессоры
- Процессоры на базе Bobcat (поддерживаются SSE4a, POPCNT и LZCNT)
- Процессоры на базе Jaguar и новее (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры на базе Puma и новее (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры "тяжелого оборудования" (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры на базе бульдозеров
- Процессоры на базе Piledriver
- Процессоры на базе Steamroller
- Экскаваторные процессоры и новее
- Процессоры на базе Zen (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры на базе Zen + (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры на базе Zen2 (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры на базе Zen3 (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- С ПОМОЩЬЮ
-
Чжаосин
- Процессоры ZX-C и новее (поддерживаются SSE4.1, SSE4.2)
использованная литература
внешние ссылки