Jump to content

SSE2

SSE2 ( Streaming SIMD Extensions 2 ) — это один из Intel SIMD (Single Instruction, Multiple Data), дополнительных наборов инструкций процессора представленный Intel в начальной версии Pentium 4 в 2000 году. Инструкции SSE2 позволяют использовать регистры XMM (SIMD) на Процессоры с архитектурой набора команд x86. Эти регистры могут загружать до 128 бит данных и одновременно выполнять такие инструкции, как сложение и умножение векторов.

В SSE2 были представлены инструкции с плавающей запятой двойной точности в дополнение к инструкциям с плавающей запятой одинарной точности и целочисленным инструкциям, найденным в SSE. SSE2 расширяет более ранний набор инструкций SSE, добавляя 144 новых инструкции к предыдущим 70 инструкциям. SSE2 намерен полностью заменить MMX — набор инструкций SIMD, присутствующий в процессорах с архитектурой IA-32. Конкурирующий производитель чипов AMD добавил поддержку SSE2, представив в 2003 году линейки Opteron и Athlon 64 с AMD64 64-разрядными процессорами .

SSE2 был расширен до SSE3 в 2004 году и еще раз расширен до SSE4 в 2006 году.

Большинство инструкций SSE2 реализуют операции с целочисленными векторами, которые также присутствуют в MMX. Вместо регистров MMX используются регистры XMM, которые более широки и позволяют значительно повысить производительность в специализированных приложениях. Еще одним преимуществом замены MMX на SSE2 является отсутствие штрафа за переключение режима при выдаче инструкций x87, присутствующих в MMX, поскольку он совместно использует пространство регистров с FPU x87. SSE2 также дополняет векторные операции с плавающей запятой набора инструкций SSE, добавляя поддержку типа данных двойной точности.

Другие расширения SSE2 включают набор инструкций управления кэшем, предназначенных в первую очередь для минимизации загрязнения кэша при обработке бесконечных потоков информации, а также сложное дополнение инструкций преобразования числового формата.

Реализация AMD SSE2 на платформе AMD64 ( x86-64 ) включает дополнительные восемь регистров, что удваивает общее число до 16 (от XMM0 до XMM15). Эти дополнительные регистры видны только при работе в 64-битном режиме. Intel приняла эти дополнительные регистры в рамках поддержки архитектуры x86-64 (или, на языке Intel, «Intel 64») в 2004 году.

Различия между FPU x87 и SSE2

[ редактировать ]

Инструкции FPU (x87) обеспечивают более высокую точность за счет вычисления промежуточных результатов с точностью 80 бит по умолчанию, чтобы минимизировать ошибку округления в численно нестабильных алгоритмах (см. обоснование конструкции IEEE 754 и ссылки в нем). Однако FPU x87 является только скалярным блоком, тогда как SSE2 может параллельно обрабатывать небольшой вектор операндов.

Если код, разработанный для x87, перенесен на более низкую точность с плавающей запятой SSE2 двойной точности, определенные комбинации математических операций или входных наборов данных могут привести к измеримому числовому отклонению, которое может стать проблемой в воспроизводимых научных вычислениях, например, если результаты вычислений необходимо сравнивать. против результатов, полученных на другой архитектуре машины. Связанная с этим проблема заключается в том, что исторически стандарты языка и компиляторы непоследовательно обрабатывали 80-битные регистры x87, реализующие переменные двойной расширенной точности, по сравнению с форматами двойной и одинарной точности, реализованными в SSE2: округление промежуточных значений повышенной точности. для переменных двойной точности не был полностью определен и зависел от деталей реализации, например, от того, когда регистры были перенесены в память.

Различия между MMX и SSE2

[ редактировать ]

SSE2 расширяет инструкции MMX для работы с регистрами XMM. Таким образом, можно преобразовать весь существующий код MMX в эквивалент SSE2. Поскольку регистр SSE2 в два раза длиннее регистра MMX, для этого может потребоваться изменить счетчики циклов и доступ к памяти. Однако доступна загрузка и сохранение 8-байтовых данных в XMM, поэтому это не является строго обязательным.

Хотя одна инструкция SSE2 может обрабатывать вдвое больше данных, чем инструкция MMX, производительность может незначительно увеличиться. Две основные причины: доступ к данным SSE2 в памяти, не выровненным по границе 16 байт, может повлечь за собой значительные потери, а пропускная способность инструкций SSE2 в старых реализациях x86 была вдвое меньше, чем у инструкций MMX. Intel инструкцию решила первую проблему, добавив в SSE3 для уменьшения накладных расходов на доступ к невыровненным данным и повышения общей производительности невыровненных загрузок, а последнюю проблему - расширив механизм выполнения в микроархитектуре Core в Core 2 Duo и более поздних продуктах.

Поскольку файлы регистрации MMX и x87 являются псевдонимами друг друга, использование MMX не позволит инструкциям x87 работать должным образом. После использования MMX программист должен использовать инструкцию emms (C: _mm_empty()), чтобы восстановить работу файла регистров x87. В некоторых операционных системах x87 используется не очень часто, но все же может использоваться в некоторых критических областях, таких как pow(), где необходима дополнительная точность. В таких случаях поврежденное состояние с плавающей запятой, вызванное неспособностью выдать emms, может остаться незамеченным в течение миллионов инструкций, прежде чем в конечном итоге привести к сбою процедуры с плавающей запятой и возврату NaN. Поскольку проблема не проявляется локально в коде MMX, поиск и исправление ошибки может занять очень много времени. Поскольку SSE2 не имеет этой проблемы и обычно обеспечивает гораздо лучшую пропускную способность и предоставляет больше регистров в 64-битном коде, его следует отдавать предпочтение практически для всех работ по векторизации.

Использование компилятора

[ редактировать ]

Когда SSE2 был представлен в 2000 году, он не поддерживался инструментами разработки программного обеспечения. Например, чтобы использовать SSE2 в проекте Microsoft Visual Studio , программисту приходилось либо вручную писать встроенную ассемблер, либо импортировать объектный код из внешнего источника. Позже пакет процессоров Visual C++ добавил поддержку SSE2 в Visual C++ и MASM .

Компилятор Intel C++ может автоматически генерировать код SSE4 , SSSE3 , SSE3 , SSE2 и SSE без использования ассемблера, написанного вручную.

Начиная с GCC 3, GCC может автоматически генерировать скалярный код SSE/SSE2, если цель поддерживает эти инструкции. Автоматическая векторизация для SSE/SSE2 была добавлена ​​начиная с GCC 4.

Пакет Sun Studio Compiler Suite также может генерировать инструкции SSE2, если используется флаг компилятора -xvector=simd.

Начиная с Microsoft Visual C++ 2012, опция компилятора для создания инструкций SSE2 включена по умолчанию.

Поддержка ЦП

[ редактировать ]

SSE2 — это расширение архитектуры IA-32 , основанное на наборе команд x86 . Таким образом, только процессоры x86 могут включать SSE2. Архитектура AMD64 поддерживает IA-32 в качестве режима совместимости и включает SSE2 в свою спецификацию. [1] [2] Это также удваивает количество регистров XMM, обеспечивая лучшую производительность. SSE2 также является обязательным условием для установки Windows 8. [3] (и более поздних версий) или Microsoft Office 2013 (и более поздних версий) «для повышения надежности сторонних приложений и драйверов, работающих в Windows 8». [4]

Следующие процессоры IA-32 поддерживают SSE2:

Следующие процессоры IA-32 были выпущены после разработки SSE2, но не реализовали его:

См. также

[ редактировать ]
  1. ^ Мац, Майкл; Губичка, Ян; Йегер, Андреас; Митчелл, Марк (январь 2010 г.). «Двоичный интерфейс приложения System V — дополнение к процессору с архитектурой AMD64 — черновая версия 0.99.4» (PDF) . Проверено 26 апреля 2013 г. [ постоянная мертвая ссылка ]
  2. ^ Туман, Агнер. «Оптимизация программного обеспечения на C++: руководство по оптимизации для платформ Windows, Linux и Mac» (PDF) . Архивировано (PDF) из оригинала 8 апреля 2013 г. Проверено 26 апреля 2013 г.
  3. ^ «Руководство по программированию DirectXMath/Внутреннее устройство библиотеки» . Архивировано из оригинала 2 июля 2019 года . Проверено 2 июля 2019 г.
  4. ^ Корпорация Майкрософт. «Что такое PAE, NX и SSE2 и почему мой компьютер должен их поддерживать для запуска Windows 8?» . Архивировано из оригинала 11 апреля 2013 года . Проверено 19 марта 2013 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d0d3e71147fee71c35c06300647df6bc__1714289700
URL1:https://arc.ask3.ru/arc/aa/d0/bc/d0d3e71147fee71c35c06300647df6bc.html
Заголовок, (Title) документа по адресу, URL1:
SSE2 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)