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]
Как и другие наборы инструкций CPU SIMD предыдущего поколения, SSE4 поддерживает до 16 регистров, каждый шириной 128 бит, которые могут загружать четыре 32-битных целых числа, четыре 32-битных числа с плавающей точкой одинарной точности или два 64-битных числа с плавающей точкой двойной точности. [1] Операции SIMD, такие как поэлементное сложение/умножение векторов и скалярное сложение/умножение векторов, обрабатывают несколько байтов данных в одной инструкции CPU. Параллельная операция обеспечивает заметное увеличение производительности. SSE4.2 представил новые строковые операции SIMD, включая инструкцию для сравнения двух фрагментов строк длиной до 16 байтов каждый. [1] SSE4.2 является подмножеством SSE4 и был выпущен через несколько лет после первоначального выпуска SSE4.
Intel SSE4 состоит из 54 инструкций. Подмножество, состоящее из 47 инструкций, называемое SSE4.1 в некоторой документации Intel, доступно в Penryn . Кроме того, SSE4.2 , второе подмножество, состоящее из семи оставшихся инструкций, впервые доступно в Core i7 на базе Nehalem . Intel считает, что отзывы разработчиков сыграли важную роль в разработке набора инструкций.
Начиная с процессоров на базе Barcelona , AMD представила набор инструкций SSE4a , который содержит четыре инструкции SSE4 и четыре новые инструкции SSE. Эти инструкции отсутствуют в процессорах Intel, поддерживающих SSE4.1, а процессоры AMD начали поддерживать SSE4.1 и SSE4.2 (полный набор инструкций SSE4) Intel только в процессорах 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. (Операции перемешивания изменяют порядок байтов в регистре.)
Эти инструкции были введены с микроархитектурой Penryn , 45 нм укороченной версией микроархитектуры Core от Intel . Поддержка указывается флагом CPUID.01H:ECX.SSE41[Bit 19].
SSE4.2 добавил STTNI (String and Text New Instructions), [10] несколько новых инструкций, которые выполняют поиск символов и сравнение двух операндов по 16 байт за раз. Они были разработаны (помимо прочего) для ускорения анализа XML- документов. [11] Он также добавил CRC32
инструкцию для вычисления циклических проверок избыточности , используемых в некоторых протоколах передачи данных. Эти инструкции были впервые реализованы в линейке продуктов Intel Core i7 на базе Nehalem и завершают набор инструкций SSE4. AMD, с другой стороны, первой добавила поддержку, начиная с микроархитектуры Bulldozer . Поддержка указывается с помощью флага CPUID.01H:ECX.SSE42[Bit 20].
Windows 11 24H2 требует поддержки ЦП POPCNT
, в противном случае ядро Windows не сможет загрузиться. [12]
Эти инструкции работают с целыми числами, а не с регистрами SSE, поскольку они не являются инструкциями SIMD, но появляются в то же время, и хотя AMD представила их с набором инструкций SSE4a, они считаются отдельными расширениями со своими собственными выделенными битами CPUID для указания поддержки. Intel реализует, POPCNT
начиная с микроархитектуры Nehalem и LZCNT
начиная с микроархитектуры Haswell . AMD реализует обе, начиная с микроархитектуры Barcelona .
AMD называет эту пару инструкций Advanced Bit Manipulation (ABM) .
Кодирование LZCNT
использует тот же путь кодирования, что и кодирование BSR
инструкции (bit scan reverse). Это приводит к проблеме, когда LZCNT
вызов на некоторых ЦП, не поддерживающих его, таких как ЦП Intel до Haswell, может неправильно выполнить BSR
операцию вместо того, чтобы вызвать исключение недопустимой инструкции . Это проблема, поскольку результирующие значения LZCNT
и BSR
различаются.
Конечные нули можно подсчитать с помощью инструкций BSF
(побитовое сканирование вперед) или TZCNT
.
Windows 11 24H2 требует поддержки ЦП POPCNT
, в противном случае ядро Windows не сможет загрузиться. [15]
Группа инструкций SSE4a была введена в микроархитектуре Barcelona компании AMD . Эти инструкции отсутствуют в процессорах Intel. Поддержка указывается флагом CPUID.80000001H:ECX.SSE4A[Bit 6]. [17]
Процессоры X86-64 v2 :
POPCNT
поддерживаемые)POPCNT
поддерживаемые)POPCNT
поддерживаемые)POPCNT
поддерживаемые)POPCNT
поддерживаемые, за исключением Pentium и Celeron )POPCNT
и более новые (SSE4.1, SSE4.2 и поддерживаемые, включая Pentium и Celeron )POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)POPCNT
и LZCNT
поддерживаемые)