stringtranslate.com

Потоковые расширения SIMD

В вычислительной технике потоковые расширения SIMD ( SSE ) — это расширение набора инструкций SIMD для архитектуры x86 , разработанное корпорацией Intel и представленное в 1999 году в серии центральных процессоров (ЦП) Pentium III вскоре после появления 3DNow! от Advanced Micro Devices (AMD) . SSE содержит 70 новых инструкций (65 уникальных мнемоник [1] ​​с использованием 70 кодировок), большинство из которых работают с данными с плавающей точкой одинарной точности . Инструкции SIMD могут значительно повысить производительность, когда необходимо выполнить одни и те же операции над несколькими объектами данных. Типичными приложениями являются цифровая обработка сигналов и обработка графики .

Первой попыткой Intel IA-32 SIMD был набор инструкций MMX . У MMX было две основные проблемы: он повторно использовал существующие регистры с плавающей точкой x87, из-за чего процессоры не могли работать с данными с плавающей точкой и SIMD одновременно, и он работал только с целыми числами . Инструкции с плавающей точкой SSE работают с новым независимым набором регистров, регистрами XMM, и добавляют несколько целочисленных инструкций, которые работают с регистрами MMX.

SSE впоследствии был расширен Intel до SSE2 , SSE3 , SSSE3 и SSE4 . Поскольку он поддерживает математику с плавающей точкой, он имел более широкие области применения, чем MMX, и стал более популярным. Добавление поддержки целых чисел в SSE2 сделало MMX в значительной степени избыточным, хотя в некоторых ситуациях [ когда? ] можно добиться дальнейшего повышения производительности, используя MMX параллельно с операциями SSE.

SSE изначально назывался Katmai New Instructions ( KNI ), Katmai — кодовое название первой ревизии ядра Pentium III. В ходе проекта Katmai Intel стремилась отличить его от своей более ранней линейки продуктов, в частности от флагманского Pentium II . Позднее он был переименован в Internet Streaming SIMD Extensions ( ISSE [2] ), затем в SSE.

AMD добавила подмножество SSE, 19 из них, называемых новыми инструкциями MMX [3] и известных как несколько вариантов и комбинаций SSE и MMX, вскоре после выпуска оригинального Athlon в августе 1999 года, см. расширения 3DNow!. В конечном итоге AMD добавила полную поддержку инструкций SSE, начиная с процессоров Athlon XP и Duron ( ядро Morgan ).

Регистры

SSE изначально добавил восемь новых 128-битных регистров, известных как XMM0через XMM7. Расширения AMD64 от AMD (первоначально называвшиеся x86-64 ) добавили еще восемь регистров XMM8через XMM15, и это расширение дублируется в архитектуре Intel 64. Также есть новый 32-битный регистр управления/состояния, MXCSR. Регистры XMM8через XMM15доступны только в 64-битном режиме работы.

SSE использовал только один тип данных для регистров XMM:

Позднее SSE2 расширил использование регистров XMM, включив в него:

Поскольку эти 128-битные регистры являются дополнительными машинными состояниями, которые операционная система должна сохранять при переключении задач , они отключены по умолчанию, пока операционная система явно не включит их. Это означает, что ОС должна знать, как использовать инструкции FXSAVEи FXRSTOR, которые являются расширенной парой инструкций, которые могут сохранять все состояния регистров x86 и SSE одновременно. Эта поддержка была быстро добавлена ​​во все основные операционные системы IA-32.

Первый процессор, поддерживающий SSE, Pentium III , разделял ресурсы выполнения между SSE и блоком операций с плавающей точкой (FPU). [2] Хотя скомпилированное приложение может чередовать инструкции FPU и SSE бок о бок, Pentium III не будет выдавать инструкции FPU и SSE в одном и том же такте . Это ограничение снижает эффективность конвейеризации , но отдельные регистры XMM позволяют смешивать операции SIMD и скалярные операции с плавающей точкой без снижения производительности из-за явного переключения режимов MMX/плавающая точка.

Инструкции SSE

SSE представил как скалярные , так и упакованные инструкции с плавающей точкой.

Инструкции с плавающей точкой

Целочисленные инструкции

Другие инструкции

Пример

Следующий простой пример демонстрирует преимущество использования SSE. Рассмотрим такую ​​операцию, как сложение векторов, которая очень часто используется в приложениях компьютерной графики. Чтобы сложить два вектора одинарной точности с четырьмя компонентами с использованием x86, требуется четыре инструкции сложения с плавающей точкой.

 vec_res.x = v1.x + v2.x ; vec_res.y = v1.y + v2.y ; vec_res.z = v1.z + v2.z ; vec_res.w = v1.w + v2.w ;                   

Это соответствует четырем инструкциям x86 FADD в объектном коде. С другой стороны, как показывает следующий псевдокод, одна 128-битная инструкция «packed-add» может заменить четыре инструкции скалярного сложения.

 movaps xmm0 , [ v1 ] ;xmm0 = v1.w | v1.z | v1.y | v1.x addps xmm0 , [ v2 ] ;xmm0 = v1.w+v2.w | v1.z+v2.z | v1.y+v2.y | v1.x+v2.x movaps [ vec_res ], xmm0 ;xmm0           

Более поздние версии

Идентификация

Следующие программы можно использовать для определения того, какие версии SSE поддерживаются в системе (если таковые имеются):

Ссылки

  1. ^ "Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture". Intel. Апрель 2022 г. стр. 5-16–5-19. Архивировано из оригинала 25 апреля 2022 г. Получено 16 мая 2022 г.
  2. ^ ab Diefendorff, Keith (8 марта 1999 г.). "Pentium III = Pentium II + SSE: архитектура Internet SSE повышает производительность мультимедиа" (PDF) . Microprocessor Report . 13 (3). Архивировано (PDF) из оригинала 17 апреля 2018 г. . Получено 1 сентября 2017 г. .
  3. ^ "AMD Extensions to the 3DNow and MMX Instruction Sets Manual" (PDF) . Advanced Micro Devices, Inc. Март 2000 г. Архивировано из оригинала (PDF) 17 мая 2008 г. Получено 18 апреля 2024 г.
  4. ^ Вэнс, Эшли (3 августа 2007 г.). "AMD plots single thread boost with x86 extensions". The Register . Архивировано из оригинала 27 апреля 2011 г. . Получено 24 августа 2017 г. .
  5. ^ "AMD64 Technology: 128-Bit SSE5 Instruction Set" (PDF) . AMD . Август 2007. Архивировано (PDF) из оригинала 25 августа 2017 г. . Получено 24 августа 2017 г. .
  6. ^ "AMD64 Technology AMD64 Architecture Programmer's Manual Volume 6: 128-Bit and 256-Bit XOP and FMA4 Instructions" (PDF) . AMD. Ноябрь 2009. Архивировано (PDF) из оригинала 31 января 2017 г. . Получено 24 августа 2017 г. .
  7. ^ Girkar, Milind (1 октября 2013 г.). "Intel® Advanced Vector Extensions (Intel® AVX)". Intel . Архивировано из оригинала 25 августа 2017 г. . Получено 24 августа 2017 г. .
  8. ^ "Загрузить утилиту идентификации процессоров Intel®". Intel. 24 июля 2017 г. Архивировано из оригинала 25 августа 2017 г. Получено 24 августа 2017 г.

Внешние ссылки