SSE4 - SSE4
Эта статья может быть слишком техническим для большинства читателей, чтобы понять. Пожалуйста помогите улучшить это к сделать понятным для неспециалистов, не снимая технических деталей. (Июль 2019) (Узнайте, как и когда удалить этот шаблон сообщения) |
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] |
Поддерживающие процессоры
- Intel
- Silvermont процессоры (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Goldmont процессоры (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Голдмонт Плюс процессоры (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Tremont процессоры (поддерживаются SSE4.1, SSE4.2 и POPCNT)
- Penryn процессоров (поддерживается SSE4.1, кроме Двухъядерный Pentium и Celeron )
- Nehalem процессоры и Westmere процессоров (поддерживаются SSE4.1, SSE4.2 и POPCNT, кроме Pentium и Celeron )
- Песчаный Мост процессоры и новее (поддерживаются SSE4.1, SSE4.2 и POPCNT, включая Pentium и Celeron )
- Haswell процессоры и новее (поддерживаются SSE4.1, SSE4.2, POPCNT и LZCNT)
- AMD
- К10 на базе процессоры (поддерживаются SSE4a, POPCNT и LZCNT)
- "Cat" маломощные процессоры
- Bobcat на основе процессоры (поддерживаются SSE4a, POPCNT и LZCNT)
- На базе Ягуара процессоры и новее (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- На основе пума процессоры и новее (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Процессоры "тяжелого оборудования" (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Бульдозерный процессоры
- Пиледривер на базе процессоры [18]
- На базе парового катка процессоры
- Экскаватор на базе процессоры и новее
- На основе дзен процессоры (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- Zen + на основе процессоры (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- На базе Zen2 процессоры (поддерживаются SSE4a, SSE4.1, SSE4.2, POPCNT и LZCNT)
- ЧЕРЕЗ
- Чжаосинь
- Процессоры ZX-C и новее (поддерживаются SSE4.1, SSE4.2)
Рекомендации
- ^ Новинка набора команд Intel Streaming SIMD Extensions 4 (SSE4), Intel.
- ^ Настройка Intel SSE4 для 45-нм микроархитектуры Intel Core нового поколения, Intel.
- ^ Справочник по программированию Intel SSE4
- ^ ""Барселона «Функция процессора: несогласованный доступ к SSE». AMD. Архивировано из оригинал 9 августа 2016 г.. Получено 3 марта, 2015.
- ^ «Внутри микроархитектуры Intel Nehalem». Получено 3 марта, 2015.
- ^ Мой опыт работы с "Conroe", DailyTech
- ^ Расширение самой популярной в мире архитектуры процессора В архиве 24 ноября 2011 г. Wayback Machine, Intel
- ^ «Intel - Решения для центров обработки данных, Интернет вещей и инновации в области ПК». Intel.
- ^ Оценка движения с помощью Intel Streaming SIMD Extensions 4 (Intel SSE4), Intel.
- ^ «Проверка схемы с помощью Intel® Streaming SIMD Extensions 4 (Intel® SSE4)».
- ^ «Ускоритель синтаксического анализа XML с Intel® Streaming SIMD Extensions 4 (Intel® SSE4)».
- ^ Справочник по программированию Intel SSE4 п. 61. См. Также RFC 3385 для обсуждения полинома CRC32C.
- ^ Быстрое параллельное вычисление CRC с использованием инструкции Nehalem CRC32 - Доктор Доббс, 12 апреля 2011 г.
- ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 2B: Справочник по набору команд, N – Z.
- ^ а б Спецификация AMD CPUID
- ^ Рахул Чатурведи (17 сентября 2007 г.). ""Барселона «Характеристика процессора: набор инструкций SSE4a». Архивировано из оригинал 25 октября 2013 г.
- ^ Рахул Чатурведи (2 октября 2007 г.). ""Барселона «Функция процессора: SSE4a, часть 2». Архивировано из оригинал 25 октября 2013 г.
- ^ «AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX».