SSE
Материал из Википедии — свободной энциклопедии
SSE (англ. Streaming SIMD Extensions, потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD, который был представлен годом раньше. Первоначально названием этих инструкций было KNI, что расшифровывалось как Katmai New Instructions (Katmai — название первой версии ядра процессора Pentium III).
Технология SSE позволяла преодолеть 2 основные проблемы MMX — при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры использовались для MMX и работы с вещественными числами.
SSE включает в архитектуру процессора восемь 128-битных регистров (xmm0 до xmm7), каждый из которых трактуется как 4 последовательных значения с плавающей точкой одинарной точности. SSE включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.
Преимущество в производительности достигается в том случае, когда необходимо произвести одну и ту же последовательность действий над разными данными.
Реализация блоков SIMD осуществляется распараллеливанием вычислительного процесса между данными, то есть, когда через один блок проходит поочерёдно множество потоков данных.
[править] Пример
Следующий пример демонстрирует перемножение четырёх пар чисел с плавающей точкой одной инструкцией mulps: (Программа написана на языке ANSI C++ с использованием ассемблерной вставки __asm и инструкций ассемблера для работы с SSE)
float a[4] = { 300.0, 4.0, 4.0, 12.0 };
float b[4] = { 1.5, 2.5, 3.5, 4.5 };
__asm {
movups xmm0, a ; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
movups xmm1, b ; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
mulps xmm1, xmm0 ; // перемножить пакеты плавающих точек: xmm1=xmm1*xmm0
; // xmm10 = xmm10*xmm00
; // xmm11 = xmm11*xmm01
; // xmm12 = xmm12*xmm02
; // xmm13 = xmm13*xmm03
movups a, xmm1 ; // выгрузить результаты из регистра xmm1 по адресам a
};
[править] См. также
[править] Внешние ссылки
| Наборы расширения базовых инструкций процессоров семейства x86 |
|---|
| MMX | MMXEXT | SSE | SSE2 | SSE3 | SSSE3 | SSE4 | 3DNow! | 3DNowExt | SSE5 | AVX | AES |