SSE4
![]() | Эта статья может быть слишком технической для понимания большинства читателей . ( Июль 2019 г. ) |
SSE4 ( Streaming SIMD Extensions 4 ) — SIMD ЦП набор инструкций , используемый в микроархитектуре Intel Core и AMD K10 (K8L) . Об этом было объявлено 27 сентября 2006 года на осеннем форуме разработчиков Intel 2006 года с расплывчатыми подробностями в официальном документе ; [1] Более точные сведения о 47 инструкциях стали доступны на форуме разработчиков Intel весной 2007 года в Пекине , в презентации. [2] SSE4 расширил набор инструкций SSE3 , выпущенный в начале 2004 года. Все программное обеспечение, использующее предыдущие инструкции Intel SIMD (например, SSE3), совместимо с современными микропроцессорами, поддерживающими инструкции SSE4. Все существующее программное обеспечение продолжает корректно работать без изменений на микропроцессорах, включающих SSE4, а также при наличии существующих и новых приложений, включающих SSE4. [3]
Как и другие наборы команд SIMD процессора предыдущего поколения, SSE4 поддерживает до 16 регистров, каждый из которых имеет ширину 128 бит, которые могут загружать четыре 32-битных целых числа, четыре 32-битных числа с плавающей запятой одинарной точности или два 64-битных числа с плавающей запятой двойной точности. . [1] Операции SIMD, такие как поэлементное сложение/умножение векторов и скалярное сложение/умножение векторов, обрабатывают несколько байтов данных в одной инструкции ЦП. Параллельная работа обеспечивает заметное увеличение производительности. В SSE4.2 представлены новые строковые операции SIMD, включая инструкцию для сравнения двух строковых фрагментов размером до 16 байт каждый. [1] SSE4.2 является подмножеством SSE4 и был выпущен через несколько лет после первого выпуска SSE4.
Подмножества SSE4
[ редактировать ]Intel SSE4 состоит из 54 инструкций. Подмножество, состоящее из 47 инструкций, называемое в некоторой документации Intel SSE4.1 , доступно в Penryn . Кроме того, SSE4.2 , второе подмножество, состоящее из семи оставшихся инструкций, впервые доступно в Nehalem на базе Core i7 . Intel считает, что отзывы разработчиков сыграли важную роль в разработке набора инструкций.
Начиная с процессоров на базе процессоров Barcelona , AMD представила набор инструкций SSE4a , который включает четыре инструкции SSE4 и четыре новые инструкции SSE. Эти инструкции отсутствуют в процессорах Intel, поддерживающих SSE4.1, а процессоры AMD начали поддерживать Intel SSE4.1 и SSE4.2 (полный набор инструкций SSE4) только в процессорах FX на базе Bulldozer . В SSE4a также была представлена функция смещенного SSE, что означало, что невыровненные инструкции загрузки выполнялись так же быстро, как и выровненные версии по выровненным адресам. Это также позволило отключить проверку выравнивания для операций SSE без загрузки, обращающихся к памяти. [4] Позже Intel представила аналогичные улучшения скорости для невыровненного SSE в своих процессорах Nehalem, но не вводила невыровненный доступ с помощью инструкций SSE без загрузки до AVX . [5]
Путаница в именах
[ редактировать ]То, что сейчас известно как SSSE3 (Supplemental Streaming SIMD Extensions 3), представленное в линейке процессоров Intel Core 2 , в некоторых средствах массовой информации называлось SSE4, пока Intel не придумала прозвище SSSE3. Компания Intel, получившая внутреннее название Merom New Instructions, изначально не планировала присваивать им специальное название, что подверглось критике со стороны некоторых журналистов. [6] В конце концов Intel устранила путаницу и зарезервировала имя SSE4 для своего следующего расширения набора команд. [7]
Intel использует маркетинговый термин HD Boost для обозначения SSE4. [8]
Новые инструкции
[ редактировать ]В отличие от всех предыдущих версий SSE, SSE4 содержит инструкции, выполняющие операции, не специфичные для мультимедийных приложений. Он включает в себя ряд инструкций, действие которых определяется постоянным полем, и набор инструкций, которые принимают XMM0 в качестве неявного третьего операнда.
Некоторые из этих инструкций выполняются однотактным механизмом тасования в Penryn. (Операции перемешивания изменяют порядок байтов в регистре.)
ССЕ4.1
[ редактировать ]Эти инструкции были представлены в микроархитектуре Penryn , уменьшенной на 45 нм микроархитектуре Intel Core . Поддержка указывается флагом CPUID.01H:ECX.SSE41[бит 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 -у 9 |+|х 3 -у 10 |); эта операция важна для некоторых HD кодеков и позволяет вычислить разницу блоков 8×8 менее чем за семь циклов. [9] Один бит трехбитного непосредственного операнда указывает, следует ли использовать 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 | Четверное слово (64 бита) сравнивается на равенство |
PACKUSDW | Преобразуйте подписанные DWORD в беззнаковые WORD с насыщением. |
MOVNTDQA | Эффективное чтение из области памяти с объединением записей в регистр SSE; это полезно для получения результатов от периферийных устройств, подключенных к шине памяти. |
ССЕ4.2
[ редактировать ]В SSE4.2 добавлен STTNI (новые строковые и текстовые инструкции), [10] несколько новых инструкций, выполняющих поиск символов и сравнение двух операндов по 16 байт за раз. Они были разработаны (помимо прочего) для ускорения анализа XML- документов. [11] Он также добавил CRC32
инструкция для вычисления проверок циклическим избыточным кодом , используемых в некоторых протоколах передачи данных. Эти инструкции были впервые реализованы в Nehalem на базе линейке продуктов Intel Core i7 и дополняют набор инструкций SSE4. AMD, с другой стороны, первой добавила поддержку, начиная с микроархитектуры Bulldozer . Поддержка указывается флагом CPUID.01H:ECX.SSE42[бит 20].
Windows 11 24H2 требует, чтобы процессор поддерживал SSE4.2, в противном случае ядро Windows невозможно будет загрузить. [12]
Инструкция | Описание |
---|---|
CRC32 | Накопите значение CRC32 C, используя полином 0x11EDC6F41 (или, без старшего бита, 0x1EDC6F41). [13] [14] |
PCMPESTRI | Упакованные строки сравнения явной длины, индекс возврата |
PCMPESTRM | Упакованные строки сравнения явной длины, маска возврата |
PCMPISTRI | Упакованные строки сравнения неявной длины, индекс возврата |
PCMPISTRM | Упакованные строки сравнения неявной длины, маска возврата |
PCMPGTQ | Сравните упакованные 64-битные данные со знаком на предмет «больше» |
POPCNT
и LZCNT
[ редактировать ] Эти инструкции работают с целыми числами, а не с регистрами SSE, поскольку они не являются инструкциями SIMD, но появляются одновременно, и хотя они представлены AMD с набором инструкций SSE4a, они считаются отдельными расширениями со своими собственными выделенными битами CPUID для обозначения поддержки. Intel реализует POPCNT
начиная с микроархитектуры Nehalem и LZCNT
начиная с микроархитектуры Haswell . AMD реализует и то, и другое, начиная с микроархитектуры Barcelona .
AMD называет эту пару инструкций Advanced Bit Manipulation (ABM) .
Кодировка LZCNT
использует тот же путь кодирования, что и кодирование BSR
(обратное сканирование битов). Это приводит к проблеме, когда LZCNT
вызов некоторых процессоров, не поддерживающих его, например процессоров Intel до Haswell, может неправильно выполнить команду BSR
операцию вместо того, чтобы вызывать исключение недопустимой инструкции . Это проблема, поскольку результирующие значения LZCNT
и BSR
разные.
Конечные нули можно подсчитать с помощью BSF
(битовое сканирование вперед) или TZCNT
инструкции.
Windows 11 24H2 требует, чтобы процессор поддерживал POPCNT
, в противном случае ядро Windows невозможно будет загрузить. [15]
Инструкция | Описание |
---|---|
POPCNT | Подсчет населения (количество битов подсчета установлено в 1). Поддержка указывается флагом CPUID.01H:ECX.POPCNT[бит 23]. [16] |
LZCNT | Счет ведущих нулей . Поддержка указывается с помощью флага CPUID.80000001H:ECX.ABM[бит 5]. [17] |
SSE4a
[ редактировать ]Группа инструкций SSE4a была представлена в микроархитектуре AMD Barcelona . Эти инструкции недоступны в процессорах Intel. Поддержка указывается с помощью флага CPUID.80000001H:ECX.SSE4A[бит 6]. [17]
Инструкция | Описание |
---|---|
EXTRQ / INSERTQ | Комбинированные инструкции по смене маски. [18] |
MOVNTSD / MOVNTSS | Инструкции магазина скалярной потоковой передачи. [19] |
Поддержка процессоров
[ редактировать ]X86-64 v2 Процессоры :
- Интел
- Процессоры 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
поддерживается)
- Процессоры Silvermont (SSE4.1, SSE4.2 и
- АМД
- Процессоры на базе K10 (SSE4a,
POPCNT
иLZCNT
поддерживается) - «Кошачьи» маломощные процессоры
- на базе Bobcat (SSE4a, Процессоры
POPCNT
иLZCNT
поддерживается) - Процессоры на базе Jaguar и новее (SSE4a, SSE4.1, SSE4.2,
POPCNT
иLZCNT
поддерживается) - Процессоры на базе Puma и новее (SSE4a, SSE4.1, SSE4.2,
POPCNT
иLZCNT
поддерживается)
- на базе Bobcat (SSE4a, Процессоры
- Процессоры «Тяжелое оборудование» (SSE4a, SSE4.1, SSE4.2,
POPCNT
иLZCNT
поддерживается)- на базе бульдозера Процессоры
- на базе Piledriver Процессоры [20]
- на базе 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
поддерживается) - Процессоры на базе Zen4 (SSE4a, SSE4.1, SSE4.2,
POPCNT
иLZCNT
поддерживается)
- Процессоры на базе K10 (SSE4a,
- С ПОМОЩЬЮ
- Процессоры Nano 3000, X2, QuadCore (поддержка SSE4.1)
- Процессоры Nano QuadCore серии C4000 (поддержка SSE4.1, SSE4.2)
- Процессоры Eden X4 (поддерживаются SSE4.1, SSE4.2)
- Чжаосинь
- Процессоры ZX-C и новее (поддерживаются SSE4.1, SSE4.2)
Ссылки
[ редактировать ]- ^ Jump up to: а б с Инновационный набор инструкций Intel Streaming SIMD Extensions 4 (SSE4). Архивировано 30 мая 2009 г. в Wayback Machine , Intel.
- ^ Настройка Intel SSE4 для 45-нм микроархитектуры Intel Core следующего поколения. Архивировано 8 марта 2021 г. в Wayback Machine , Intel.
- ^ «Справочник по программированию Intel SSE4» (PDF) . Архивировано (PDF) оригинала 15 февраля 2020 г. Проверено 26 декабря 2014 г.
- ^ « Функция процессора «Барселона»: неверный доступ SSE» . АМД. Архивировано из оригинала 9 августа 2016 года . Проверено 3 марта 2015 г.
- ^ «Внутри микроархитектуры Intel Nehalem» . Архивировано из оригинала 2 апреля 2015 года . Проверено 3 марта 2015 г.
- ↑ Мой опыт работы с «Conroe». Архивировано 15 октября 2013 г. в Wayback Machine , DailyTech.
- ↑ Расширение самой популярной в мире архитектуры процессоров. Архивировано 24 ноября 2011 г. в Wayback Machine , Intel.
- ^ «Intel — решения для центров обработки данных, Интернет вещей и инновации в ПК» . Интел . Архивировано из оригинала 7 февраля 2013 года . Проверено 17 сентября 2009 г.
- ^ Оценка движения с помощью Intel Streaming SIMD Extensions 4 (Intel SSE4). Архивировано 16 июня 2018 г. на Wayback Machine , Intel.
- ^ «Проверка схемы с помощью Intel® Streaming SIMD Extensions 4 (Intel® SSE4)» . Архивировано из оригинала 17 июня 2018 года . Проверено 6 февраля 2012 г.
- ^ «Ускоритель синтаксического анализа XML с Intel® Streaming SIMD Extensions 4 (Intel® SSE4)» . Архивировано из оригинала 17 июня 2018 года . Проверено 6 февраля 2012 г.
- ^ Клотц, Аарон (24 апреля 2024 г.). «Microsoft блокирует использование Windows 11 на некоторых компьютерах круглосуточно — процессор должен поддерживать SSE4.2, иначе операционная система не будет загружаться» . Аппаратное обеспечение Тома . Проверено 29 апреля 2024 г.
- ^ Справочник по программированию Intel SSE4. Архивировано 15 февраля 2020 г., на Wayback Machine, стр. 61. См. также RFC 3385, заархивированный 19 июня 2008 г., на сайте Wayback Machine , где обсуждается полином CRC32C.
- ^ Быстрое параллельное вычисление CRC с использованием инструкции Nehalem CRC32 - доктор Доббс, 12 апреля 2011 г.
- ^ Сен, Саян (17 марта 2024 г.). «Microsoft исправляет ошибочный блок PopCnt, но требования Windows 11 24H2 могут остаться в силе» . Неовин . Проверено 17 марта 2024 г.
- ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 2B: Справочник по набору инструкций, N – Z. Архивировано 8 марта 2011 г., на Wayback Machine .
- ^ Jump up to: а б «Спецификация AMD CPUID» (PDF) . Архивировано (PDF) из оригинала 1 ноября 2013 г. Проверено 30 октября 2013 г.
- ^ Рахул Чатурведи (17 сентября 2007 г.). « Особенность процессора «Барселона»: набор инструкций SSE4a» . Архивировано из оригинала 25 октября 2013 года.
- ^ Рахул Чатурведи (2 октября 2007 г.). « Особенность процессора «Барселона»: SSE4a, часть 2» . Архивировано из оригинала 25 октября 2013 года.
- ^ «AMD FX-Series FX-6300 — FD6300WMW6KHK / FD6300WMHKBOX» . Архивировано из оригинала 17 августа 2017 года . Проверено 9 октября 2015 г.
Внешние ссылки
[ редактировать ]- Справочник по программированию SSE4 от Intel
- Калькулятор PCMPSTR для строковых инструкций SSE 4.2, заархивирован на Ghostarchive.org 10 мая 2022 г.