SSE4

редактировать

SSE4 (Streaming SIMD Extensions 4 ) - это SIMD CPU набор команд, используемый в микроархитектуре Intel Core и AMD K10 (K8L). Об этом было объявлено 27 сентября 2006 г. на форуме разработчиков Intel осенью 2006 г., с расплывчатыми деталями в официальном документе ; более точные сведения о 47 инструкциях стали доступны на форуме разработчиков Intel весной 2007 г. в Пекине в презентации. SSE4 полностью совместим с программным обеспечением, написанным для предыдущих поколений микропроцессоров архитектуры Intel 64 и IA-32. Все существующее программное обеспечение продолжает правильно работать без изменений на микропроцессорах, которые включают SSE4, а также при наличии существующих и новых приложений, которые включают SSE4.

Содержание

  • 1 Подмножества SSE4
  • 2 Неправильное название
  • 3 Новые инструкции
    • 3.1 SSE4.1
    • 3.2 SSE4.2
    • 3.3 POPCNT и LZCNT
    • 3.4 SSE4a
  • 4 Поддерживающие процессоры
  • 5 Ссылки
  • 6 Внешние ссылки

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

Intel SSE4 состоит из 54 инструкций. Подмножество, состоящее из 47 инструкций, которое в некоторой документации Intel обозначается как SSE4.1, доступно в 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−y0| + | x 1−y1| + | x 2−y2| + | x 3−y3|, | x 0−y1| + | x 1−y2| + | x 2−y3| + | x 3−y4|,..., | x 0−y7| + | х 1−y8| + | х 2−y9| + | х 3−y10|); эта операция важна для некоторых кодеков 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
Упакованное умножение со знаком для двух наборов двух из четырех упакованных целых чисел, 1-го и 3-го на упакованные 4, что дает два упакованных 64-битных результата.
PMULLD
Упакованное умножение со знаком, четыре упакованных набора 32-битных целых чисел, умноженные для получения 4 упакованных 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
Расширение с расширением типа TEST, аналогичное расширению с расширением, аналогичное знаку / нулю PTEST. инструкция, в которой он устанавливает флаг Z равным результату И между его операндами: ZF устанавливается, если DEST AND SRC равно 0. Кроме того, он устанавливает флаг C, если (НЕ DEST) И SRC равен нулю.

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

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

SSE4.2

SSE4.2 добавил STTNI (String и 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).

InstructionDescription
POPCNT
Population count (количество битов установлено равным 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 Barcelona. Эти инструкции недоступны для процессоров Intel. Поддержка указывается с помощью флага CPUID.80000001H: ECX.SSE4A [Bit 6].

ИнструкцияОписание
EXTRQ / INSERTQ
Комбинированные инструкции сдвига маски.
MOVNTSD / MOVNTSS
Скалярные инструкции сохранения потоковой передачи.

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

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-06 04:41:12
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте