Jump to content

Потоковые 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] ), затем ССЕ.

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

Регистры [ править ]

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

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

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

  • два 64-битных числа двойной точности с плавающей запятой или
  • два 64-битных целых числа или
  • четыре 32-битных целых числа или
  • восемь 16-битных коротких целых чисел или
  • шестнадцать 8-битных байтов или символов.

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

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

Инструкции SSE [ править ]

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

Инструкции с плавающей запятой [ править ]

  • Перемещение данных из памяти в регистр/регистра в память/регистра в регистр
    • Скаляр – MOVSS
    • Упакованный – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS, MOVMSKPS
  • Арифметика
    • Скаляр – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
    • Упакованный – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
  • Сравнивать
    • Скаляр – CMPSS, COMISS, UCOMISS
    • Упакованный – CMPPS
  • Перетасовка и распаковка данных
    • Упакованный – SHUFPS, UNPCKHPS, UNPCKLPS
  • Преобразование типов данных
    • Скаляр – CVTSI2SS, CVTSS2SI, CVTTSS2SI
    • Упакованный – CVTPI2PS, CVTPS2PI, CVTTPS2PI
  • Побитовые логические операции
    • Упакованный – ANDPS, ORPS, XORPS, ANDNPS

Целочисленные инструкции [ править ]

  • Арифметика
    • PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
  • Перемещение данных
    • PEXTRW, PINSRW
  • Другой
    • PMOVMSKB, PSHUFW

Прочие инструкции [ править ]

  • MXCSR управление
    • LDMXCSR, STMXCSR
  • Управление кэшем и памятью
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

Пример [ править ]

Следующий простой пример демонстрирует преимущество использования 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-битная инструкция «упакованного сложения» может заменить четыре инструкции скалярного сложения.

 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

Более поздние версии [ править ]

  • SSE2 , Новые инструкции Willamette (WNI), представленные в Pentium 4 , представляют собой значительное усовершенствование SSE. В SSE2 добавлены две основные функции: операции с плавающей запятой двойной точности (64 бита) для всех операций SSE и целочисленные операции MMX над 128-битными регистрами XMM. В исходном наборе инструкций SSE преобразование в целые числа и обратно помещало целочисленные данные в 64-битные регистры MMX. SSE2 позволяет программисту выполнять математические операции SIMD с любым типом данных (от 8-битного целого числа до 64-битного числа с плавающей запятой) полностью с помощью файла векторных регистров XMM без необходимости использования устаревших регистров MMX или FPU. Он предлагает ортогональный набор инструкций для работы с распространенными типами данных.
  • SSE3 , также называемый новыми инструкциями Prescott (PNI), представляет собой постепенное обновление SSE2, добавляющее несколько математических инструкций, ориентированных на DSP, и некоторые инструкции по управлению процессами (потоками). Это также позволяло складывать или умножать два числа, хранящихся в одном регистре, что было невозможно в SSE2 и более ранних версиях. Эта возможность, известная в терминологии Intel как горизонтальная, стала основным дополнением к набору инструкций SSE3. AMD 3DNow! расширение тоже может сделать последнее.
  • SSSE3 , Merom New Instructions (MNI), представляет собой обновление SSE3, добавляющее 16 новых инструкций, которые включают перестановку байтов в слове, умножение 16-битных чисел с фиксированной точкой с правильным округлением и инструкции накопления внутри слова. SSSE3 часто путают с SSE4, поскольку этот термин использовался во время разработки микроархитектуры Core .
  • SSE4 , новые инструкции Penryn (PNI), — еще одно важное усовершенствование, добавляющее инструкцию скалярного произведения , дополнительные целочисленные инструкции, popcnt инструкция ( подсчет населения : подсчет количества битов, установленных в 1, широко используется, например, в криптографии ) и многое другое.
  • XOP , FMA4 и CVT16 — новые версии, анонсированные AMD в августе 2007 года. [4] [5] и пересмотрено в мае 2009 г. [6]
  • Advanced Vector Extensions (AVX), Gesher New Instructions (GNI), представляет собой расширенную версию SSE, анонсированную Intel, с расширенным каналом данных со 128 бит до 256 бит и инструкциями с 3 операндами (вместо 2). Intel выпустила процессоры в начале 2011 года с поддержкой AVX. [7]
  • AVX2 — это расширение набора инструкций AVX.
  • AVX-512 (3.1 и 3.2) — это 512-битные расширения 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора команд x86.

Идентификация [ править ]

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

  • Утилита идентификации процессоров Intel [8]
  • CPU-Z — утилита идентификации процессора, материнской платы и памяти.
  • lscpu — предоставляется пакетом util-linux в большинстве дистрибутивов Linux.

Ссылки [ править ]

  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 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4ad801813580745514c17b572c16bc4b__1714295700
URL1:https://arc.ask3.ru/arc/aa/4a/4b/4ad801813580745514c17b572c16bc4b.html
Заголовок, (Title) документа по адресу, URL1:
Streaming SIMD Extensions - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)