Введение
Расширение набора инструкций для компьютерных чипов
В вычислительной технике расширение потоковых SIMD-инструкций (SSE) — это расширение набора инструкций SIMD (Single Instruction, Multiple Data) для архитектуры x86, разработанное Intel и представленное в 1999 году в серии центральных процессоров Pentium III (CPU) вскоре после появления 3DNow! от Advanced Micro Devices (AMD). SSE содержит 70 новых инструкций (65 уникальных мнемонических кодов, использующих 70 кодировок), большинство из которых работают с данными одинарной точности с плавающей запятой. SIMD-инструкции могут значительно повысить производительность при выполнении одних и тех же операций над несколькими объектами данных. Типичные области применения — обработка цифровых сигналов и графики. Первой попыткой Intel в области SIMD IA 32 был набор инструкций MMX. MMX имел две основные проблемы: он использовал существующие регистры x87 с плавающей запятой, что не позволяло процессорам одновременно работать с данными с плавающей запятой и SIMD, и он работал только с целыми числами. Инструкции SSE с плавающей запятой работают с новым независимым набором регистров — регистрами XMM, а также добавляют несколько целочисленных инструкций, работающих с регистрами MMX. Впоследствии Intel расширила SSE до SSE2, SSE3, SSSE3 и SSE4. Благодаря поддержке математических операций с плавающей запятой, SSE имело более широкое применение, чем MMX, и стало более популярным. Добавление поддержки целых чисел в SSE2 сделало MMX в значительной степени избыточным, хотя в некоторых ситуациях можно добиться дальнейшего повышения производительности, используя MMX параллельно с операциями SSE. Изначально SSE называлось Katmai New Instructions (KNI), Katmai — это кодовое имя первой ревизии ядра Pentium III. В ходе проекта Katmai Intel стремилась отделить его от предыдущей линейки продуктов, особенно от флагманского Pentium II. Позже оно было переименовано в Internet Streaming SIMD Extensions (ISSE) и известно как различные варианты и комбинации SSE и MMX, вскоре после выпуска оригинального Athlon в августе 1999 года, см. расширения 3DNow!. В конечном итоге AMD добавила полную поддержку инструкций SSE, начиная с процессоров Athlon XP и Duron (ядро Morgan).
Инструкции по SSE
SSE представила как скалярные, так и векторные инструкции с плавающей точкой.
Позднейшие версии
SSE2, Willamette New Instructions (WNI), представленный с Pentium 4, является значительным усовершенствованием SSE. SSE2 добавляет две основные функции: поддержку вычислений с двойной точностью (64 бита) для всех операций SSE и выполнение MMX-операций над целыми числами в 128-битных регистрах XMM. В исходном наборе инструкций SSE преобразование в целые числа и из них размещало целочисленные данные в 64-битных MMX-регистрах. SSE2 позволяет программисту выполнять SIMD-вычисления над любым типом данных (от 8-битного целого до 64-битного числа с плавающей точкой) исключительно с использованием векторных регистров XMM, без необходимости использования устаревших регистров MMX или FPU. Он предоставляет ортогональный набор инструкций для работы с распространенными типами данных. SSE3, также известный как Prescott New Instructions (PNI), является инкрементным обновлением SSE2, добавляющим несколько математических инструкций, ориентированных на цифровую обработку сигналов (DSP), и некоторые инструкции для управления процессами (потоками). Он также позволил складывать или умножать два числа, хранящиеся в одном регистре, что было невозможно в SSE2 и более ранних версиях. Эта возможность, известная как горизонтальная в терминологии Intel, стала основным дополнением к набору инструкций SSE3. Расширение AMD 3DNow! также поддерживало подобную функциональность. SSSE3, Merom New Instructions (MNI), является обновлением SSE3, добавляющим 16 новых инструкций, включая перестановку байтов в слове, умножение 16-битных чисел с фиксированной точкой с корректным округлением и инструкции накопления внутри слова. SSSE3 часто путают с SSE4, поскольку этот термин использовался в процессе разработки микроархитектуры Core. SSE4, Penryn New Instructions (PNI), является еще одним важным усовершенствованием, добавляющим инструкцию скалярного произведения, дополнительные целочисленные инструкции, инструкцию popcnt (подсчет установленных битов: подсчет количества битов, установленных в 1, широко используемую, например, в криптографии) и многое другое. XOP, FMA4 и CVT16 — новые итерации, анонсированные AMD в августе 2007 года и пересмотренные в мае 2009 года. Advanced Vector Extensions (AVX), Gesher New Instructions (GNI), — это продвинутая версия SSE, представленная Intel, с расширенной шиной данных с 128 до 256 бит и инструкциями с тремя операндами (вместо двух). Intel выпустила процессоры с поддержкой AVX в начале 2011 года. AVX2 — это расширение набора инструкций AVX. AVX 512 (3.1 и 3.2) — это 512-битное расширение для 256-битных SIMD-инструкций Advanced Vector Extensions для архитектуры набора команд x86.