stringtranslate.com

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

В вычислительной технике Streaming SIMD Extensions ( SSE ) — это расширение набора команд одной инструкции, нескольких данных ( SIMD ) для архитектуры x86 , разработанное Intel и представленное в 1999 году в серии центральных процессоров (ЦП) Pentium III вскоре после появления передовых микроустройств (AMD) 3DNow! . 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.

Вскоре после выпуска оригинального Athlon в августе 1999 года компания AMD добавила подмножество SSE, 19 из них, называемое новыми инструкциями MMX [3] и известное как несколько вариантов и комбинаций SSE и MMX, см. [расширения]. В конечном итоге 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. Рассмотрим такую ​​операцию, как сложение векторов, которая очень часто используется в приложениях компьютерной графики. Чтобы сложить два четырехкомпонентных вектора одинарной точности с использованием x86, требуются четыре инструкции сложения с плавающей запятой.

 vec_res . х = v1 . х + v2 . Икс ; vec_res . у = v1 . у + v2 . й ; vec_res . z = v1 . г + v2 . з ; vec_res . ш = v1 . ш + v2 . ш ;                   

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

 movaps xmm0 , [ v1 ] ;xmm0 = v1.w | v1.z | v1.у | 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 и IA-32, том 1: Базовая архитектура» . Интел. Апрель 2022 г. стр. 5-16–5-19. Архивировано из оригинала 25 апреля 2022 года . Проверено 16 мая 2022 г.
  2. ^ аб Дифендорф, Кейт (8 марта 1999 г.). «Pentium III = Pentium II + SSE: архитектура SSE в Интернете повышает производительность мультимедиа» (PDF) . Отчет микропроцессора . 13 (3). Архивировано (PDF) из оригинала 17 апреля 2018 г. Проверено 1 сентября 2017 г.
  3. ^ «Расширения AMD к руководству по наборам инструкций 3DNow и MMX» (PDF) . Advanced Micro Devices, Inc., март 2000 г. Архивировано из оригинала (PDF) 17 мая 2008 г. . Проверено 18 апреля 2024 г.
  4. Вэнс, Эшли (3 августа 2007 г.). «AMD планирует однопоточное ускорение с помощью расширений x86». Регистр . Архивировано из оригинала 27 апреля 2011 года . Проверено 24 августа 2017 г.
  5. ^ «Технология AMD64: 128-битный набор инструкций SSE5» (PDF) . АМД . Август 2007 г. Архивировано (PDF) из оригинала 25 августа 2017 г. . Проверено 24 августа 2017 г.
  6. ^ «Технология AMD64. Руководство программиста по архитектуре AMD64, том 6: 128-битные и 256-битные инструкции XOP и FMA4» (PDF) . АМД. Ноябрь 2009 г. Архивировано (PDF) из оригинала 31 января 2017 г. . Проверено 24 августа 2017 г.
  7. Гиркар, Милинд (1 октября 2013 г.). «Расширенные векторные расширения Intel® (Intel® AVX)». Интел . Архивировано из оригинала 25 августа 2017 года . Проверено 24 августа 2017 г.
  8. ^ «Загрузите утилиту идентификации процессоров Intel®» . Интел. 24 июля 2017 года. Архивировано из оригинала 25 августа 2017 года . Проверено 24 августа 2017 г.

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