Расширение набора команд SSE4 для архитектуры Intel

Intel уже очень давно использует практику создания специализированных наборов команд в процессорах Intel для повышения производительности специфических ресурсоемких приложений. Одним из первых примеров подобного рода разработок был набор команд для вычислений с плавающей запятой, впервые реализованный в процессоре 8086 в далеком 1978 году. Более современный пример - технология Intel MMX для одновременной обработки данных большего объема, загружаемых в специальные регистры MMX. Эта технология ускоряла работу мультимедийных приложений, например, графики, игр, видео, а также многих других.

В микроархитектуре P6 корпорация Intel впервые представила набор команд Streaming SIMD Extensions (SSE), реализованный в процессоре Pentium III. Набор команд SSE расширял возможности MMX и позволял одновременно выполнять команды SIMD над четырьмя упакованными элементами данных с плавающей запятой одинарной точности. Для этого использовались специальные 128-разрядные регистры (названные XMM0-XMM7).

На базе микроархитектуры NetBurst (процессор Pentium 4) был разработан набор команд SSE2, который стал расширением SSE (и MMX). SSE2 предназначался для повышения степени параллелизма при выполнении команд MMX и SSE. Поддерживалась обработка 128-разрядных целочисленных данных и упакованных данных с плавающей запятой двойной точности. В целом, набор команд SSE2 содержал 144 дополнительные инструкции, которые обеспечивали повышение производительности самых разных приложений.

В процессоре Pentium 4, выпускаемом по 90 нм производственной технологии, был реализован набор команд SSE3. Он включал 13 дополнительных инструкций SIMD, по сравнению с SSE2.

Следующим этапом стал набор команд Supplemental SSE3 на базе микроархитектуры Intel Core. Он реализован в процессорах Xeon 5100 (для серверов и рабочих станций) и Intel Core 2 Duo (для мобильных и настольных ПК). Supplemental SSE3 содержит 32 новых кода операций, включая выравнивание и умножение-суммирование.

SSE4 - самое масштабное и значительное расширение архитектуры Intel ISA со времени появления SSE2, то есть со времен процессора Pentium 4. Набор команд SSE4 включает множество новых инновационных инструкций, которые можно разделить на две основные категории: 1) векторизирующий компилятор и мультимедиа-ускорители; 2) ускорители обработки строк и текстовой информации. Новые инструкции дополняют обширную архитектуру набора команд (instruction set architecture, ISA) Intel 64.

Векторизирующие компиляторные элементы включают в себя усовершенствованные целочисленные операции и операции с плавающей точкой, поддержку упакованных операций DWORD и QWORD, новые операции с плавающей точкой одинарной точности, быстрые регистровые операции, оптимизированные операции памяти и др. Компиляторы, использующие эти векторизирующие элементы, помогут реализовывать их преимущества в широком диапазоне приложений, включая мультимедиа-приложения (например, скорость кодирования видео можно увеличить в полтора раза), а также серверные приложения для высокопроизводительных вычислений.

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

Ниже приведён полный список процессорных команд по подгруппам.

Различные упакованные операции. Процессорные команды DWORD, PMULLD, PMULDQ. Новая поддержка четырех знаковых (и без знака) 32x32 битных умножений за одну инструкцию, а также знаковые умножения вида 32x32->64. Широко применимо для автоматизации компиляторной векторизации обработки данных, написанных на языках программирования высокого уровня (таких, как C и Fortran).

Скалярное произведение с плавающей точкой. Процессорные команды DPPS, DPPD. Повышенная производительность обработки данных типа AOS (массив структур) посредством поддержки скалярных произведений с одинарной и двойной точностью. Создание трехмерного контента, игр. Поддержка языков программирования, таких, как CG и HLSL.

Упакованное сопряжение. Процессорные команды BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW. Условно операция сопряжения копирует одно поле от источника и переносит его в место назначения. Эти новые процессорные команды повысят производительность операций сопряжения для большинства размеров полей посредством упаковки операций умножения в единую инструкцию. Широко применимо для автоматизации компиляторной векторизации обработки данных, а также для приложений, предназначенных для обработки изображений, видеоинформации.

Упакованные целочисленные максимальные и минимальные значения. Процессорные команды PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINDS, PMAXSD. Сравнивает упакованные знаковые/без знака на уровне байт/слов/двойных слов целочисленные значения в операнде назначения и в исходном операнде и возвращает минимальное или максимальное значение за одну инструкцию для каждого запакованного операнда в операнде назначения. Широко применимо для автоматизации компиляторной векторизации обработки данных.

Округление значений с плавающей запятой. Процессорные команды ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD. Эффективно округляет скаляр и упакованный операнд с одинарной или двойной точностью до целочисленного значения с поддержкой требований языков программирования Fortran, JAVA и C99. Применимо в обработке изображений, графики, видеоинформации, приложениях с двухмерной/трехмерной графикой, мультимедиа и игровых ресурсах.

Вставка/извлечение регистров. Процессорные команды INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ. Эти новые процессорные команды упрощают процесс вставки и извлечения между регистрами GPR (или памятью) и XMM. Широко применимо для автоматизации компиляторной векторизации обработки данных, а также для приложений, предназначенных для обработки изображений, видеоинформации.

Упакованное преобразование форматов. Процессорные команды PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ. Преобразует упакованное целочисленное значение (из регистра XMM или памяти) в целочисленное значение более широкого типа со знаковым или нулевым расширением. Широко применимо для автоматизации компиляторной векторизации обработки данных, а также для приложений, предназначенных для обработки изображений, видеоинформации.

Упакованная проверка и установка. Процессорная команда PTEST. Более быстрое ветвление архитектуры SIMD, осуществляемое для поддержки векторизированного кода. Применимо для автоматизации компиляторной векторизации обработки данных, обработки изображений и видеоинформации, создания трехмерного контента.

Упакованное определение идентичности. Процессорные команды PCMPEQQ, PCMPGTQ. Архитектура SIMD определяет идентичность упакованных значений QWORDs в операнде назначения и в исходном операнде. Широко применимо для автоматизации компиляторной векторизации обработки данных, а также для приложений, предназначенных для обработки изображений, видеоинформации.

Упаковка DWORD в беззнаковый формат WORD. Процессорная команда PACKUSDW. Преобразует упакованный знаковый DWORD в упакованный формат WORD без знака посредством беззнакового сосредоточения для обработки условий переполнения. Эта новая процессорная команда завершает набор других команд в этом формате. Широко применимо для автоматизации компиляторной векторизации обработки данных, а также для приложений, предназначенных для обработки изображений, видеоинформации.

Улучшенные строковые операции. Процессорные команды PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM. Эти новые процессорные команды содержат в себе большое количество возможностей обработки строк и текста, которые обычно требуют участия большего количества кодов операции. В результате повышается производительность сканирования вирусов, поиска текста, строковой обработки библиотек, таких, как ZLIB, баз данных, компиляторов.

Несмотря на то, что процессоры Intel Core 2 Duo имеют новую внутреннюю конструкцию, в них реализована версия ISA, практически идентичная набору команд процессоров предыдущего поколения Intel Pentium D, что гарантирует совместимость на уровне приложений. Практически все приложения, разработанные для процессоров Intel Pentium D, смогут выполняться на процессорах Intel Core 2 Duo без каких-либо изменений.

Чтобы получить максимальную выгоду от использования новых инструкций, старые приложения необходимо перекомпилировать с помощью обновленных версий компиляторов Intel или других производителей. В специализированных мультимедиа-приложениях рост производительности может быть очень значительным. Например, перекомпилированные версии программ DivX 6.7 и VirtualDub 1.7.2 демонстрируют рост производительности на 49% на процессоре Core 2 Extreme QX9650 (3,0 ГГц; 1333 МГц системная шина; 12 Мб кэш-памяти второго уровня; набор инструкций SSE4), по сравнению с той же конфигурацией на процессоре Core 2 Extreme QX6850 (3,0 ГГц; 1333 МГц системная шина; 8 Мб кэш-памяти второго уровня; набор инструкций SSE2). В программе TMPGEncoder Xpress 4.4 повышение производительности составляет 42%.

Другие программы при апгрейде с QX6850 (SSE2) на QX9650 (SSE4) ускоряются не так сильно, так что рост производительности в некоторых задачах может, по большей степени, объясняться увеличенным объемом кэш-памяти второго уровня.

Adobe Photoshop CS3 по тестам показывает рост на 5%, Adobe AfterEffects CS3 - на 7%, Cinebench 10 - 9%, Microsoft Excel, метод Монте-Карло - 10%, Company of Heroes - 7%, Quake 4 - 9%, F.E.A.R - 9%, Half-Life 2 Lost Coast - 9%.

Анатолий АЛИЗАР

По материалам документации Intel

Версия для печатиВерсия для печати

Номер: 

01 за 2008 год

Рубрика: 

Hardware
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!