Регистры ммх и sse реферат

Обновлено: 04.07.2024

SSE (англ. Streaming SIMD Extensions , потоковое SIMD-расширение процессора) — это SIMD (англ. Single Instruction, Multiple Data , Одна инструкция — множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD, который был представлен годом раньше. Первоначально названием этих инструкций было KNI — Katmai New Instructions (Katmai — название первой версии ядра процессора Pentium III).

Технология SSE позволяла преодолеть 2 основные проблемы MMX — при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры были общими с регистрами MMX, и возможность MMX работать только с целыми числами.

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

Содержание

Особенности

Регистры

Каждый регистр может содержать четыре 32-битных значения с плавающей точкой одинарной точности.

SSE-команды

Команды для чисел с плавающей точкой

  • Команды пересылки
    • Скалярные типы – MOVSS
    • Упакованные типы – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
    • Скалярные типы – 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

        Пример

        Следующий пример демонстрирует перемножение четырёх пар чисел с плавающей точкой одной инструкцией mulps: (Программа написана на языке ANSI C++ с использованием ассемблерной вставки __asm и инструкций ассемблера для работы с SSE, аргументы записаны согласно стандарту Intel, а не AT&T)

        Тот же пример, но ассемблерная вставка asm выполнена в стандарте AT&T (GNU Assembler)

        См. также

        Ссылки

        • Инструкции x86
        • Расширения архитектуры x86

        Wikimedia Foundation . 2010 .

        Полезное

        Смотреть что такое "SSE" в других словарях:

        SSE 50 — SSE Composite Index Le SSE Composite Index est l indice boursier le plus utilisé pour refléter la performance du marché de la bourse de Shanghai. Les indices les plus connus sont les SSE 50 et SSE 180, regroupant respectivement les 50 et 180 plus … Wikipédia en Français

        SSE — (Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX para procesadores Pentium III, introducida por Intel en febrero de 1999. Las instrucciones SSE son especialmente adecuadas para decodificación de MPEG2, que es el códec… … Wikipedia Español

        SSE — may refer to:In computing: *Senior Software Engineer (UK) *Server Sent Events, a technology to push content to web clients *Simple Sharing Extensions, a specification that extends RSS from unidirectional to bidirectional information flows… … Wikipedia

        SSE — (Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX para procesadores Pentium III, introducida por Intel en febrero de 1999. Las instrucciones SSE son especialmente adecuadas para decodificación de MPEG2, que es el códec… … Enciclopedia Universal

        Sse-ki — Sse ki, die chinesischen Reichsannalen … Pierer's Universal-Lexikon

        SSE — simb. TS geogr. Sud Sud Est … Dizionario italiano

        SSE — (south southeast) n. compass direction between south and southeast … English contemporary dictionary

        SSE — ► ABBREVIATION ▪ south south east … English terms dictionary

        Технология виртуализации Intel VT-x, разработанная для IA-32 и поддерживаемая современными процессорами, использует 10 новых инструкций VM.

        Все 32-нм процессоры Intel семейства Westmere, начиная с двухъядерных процессоров Clarkdale (Core i5 650) поддерживают шесть новых инструкций SIMD, которые Intel назвал AES-NI.

        В основе технологии ММХ лежит расширение набора команд (57 новых команд) для эффективного выполнения типичных мультимедийных алгоритмов, к числу которых относятся и многие алгоритмы, характерные для цифровой обработки сигналов. Это первое существенное изменение в системе команд микропроцессоров семейства х86, начиная с выхода в свет микропроцессора i386. В технологии ММХ использована модель обработки данных SIMD, предусматривающая одновременное выполнение операции над несколькими целочисленными операндами разрядностью 1, 2 или 4 байта.

        ММХ-команды используют восемь 64-разрядных ММХ-регистров с плавающей запятой, и реализуются в том же режиме процессора, что и команды с плавающей запятой. ММХ-команды делятся на следующие группы: арифметические, логические и сдвига, сравнения, передачи данных, упаковки и распаковки, отмены режима ММХ. Все программное обеспечение, созданное для ранее выпущенных процессоров, без всяких изменений может выполняться на процессорах с технологией ММХ.

        Стремясь устранить недостатки, свойственные ММХ-технологии (отсутствие ММХ-команд для работы с плавающей запятой, невозможность выполнения операций с плавающей запятой при выполнении ММХ-команд) Intel решила внести необходимые дополнения в архитектуру процессора Pentium III.

        Новые 70 команд SSE-расширения (Streaming SIMD Extension) делятся на 4 категории:

        · SIMD-команды обработки данных в формате с плавающей запятой одинарной точности (SPFP-команды);

        · дополнительные SIMD-команды для обработки целочисленных данных;

        · команды управления кэшированием;

        · команды сохранения и восстановления состояния процессора.

        Большинство SPFP-команд имеют два операнда. Данные, содержащиеся в первом операнде, после выполнения команды, как правило, замещаются результатами, а данные, содержащиеся во втором операнде, остаются неизменными.

        Скалярные операции выполняются над младшими (занимающие разряды 0–31) элементами данных двух операндов. Остальные три элемента данных не изменяются.

        В расширение SSE включены дополнительные SIMD-команды для работы с целочисленными данными. Эти новые команды расширяют возможности существующего набора команд технологии ММХ. Они выполняют SIMD-операции над несколькими целочисленными данными, упакованными в 64-разрядные группы, загружают и хранят упакованные данные в 64-разрядных ММХ-регистрах.

        Кроме того, в SSE введены команды нового типа, обеспечивающие:

        · управление кэшированием данных с целью повышения эффективности использования кэш-памяти и сокращения числа обращений к основной памяти;

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

        Первая группа команд выполняет запись данных из ММХ (ХММ) регистра в память, минуя кэш. Вторая – обеспечивает запись данных из памяти в кэш различных уровней.

        Кроме ХММ-регистров в микропроцессоре Pentium III появился новый регистр состояния и управления MXCSR. Для работы с этими регистрами требуется поддержка, как со стороны процессора, так и со стороны операционной системы. Чтобы прикладные программы и ОС могли сохранять и восстанавливать состояния новых компонентов процессора, введено несколько команд управления. Первая группа команд управления обеспечивает сохранение в памяти содержимого регистра МХCSR и наоборот – загружает слово состояния из памяти в регистр MXCSR. Вторая группа – сохраняет в памяти состояние процессора (состояние регистров данных FPU, MMX-регистров, ХММ-регистров) и восстанавливает ранее сохраненное состояние процессора.

        Расширения SSE2, SSE3, SSSE3, SSE4

        Расширение SSE3, введенное в состав Pentium 4 Prescott, включает 5 новых операций с комплексными числами, 5 потоковых операций над числами с плавающей запятой, 2 команды для синхронизации потоков и одну специальную инструкцию для применения при кодировании видео.

        Расширение SSE4.1 – появилось в первом процессоре Intel c 45-нм техпроцессом (кодовое наименование Penryn). Набор команд SSE4.1 включает 47 новых инновационных инструкций, основными из которых являются примитивы векторизации для компиляторов и ускорители кодирования видеозаписей с высоким расширением и обработки фотоизображений.

        Расширение SSE4.2 – разработано Intel для процессоров с новой микроархитектурой Nehalem. Введенные в набор SSE4.2 инструкции ориентированы на ускорение обработки строк и текстовой информации.

        Расширения AES-NI, AVX

        Расширение AVX подходит для интенсивных вычислений с плавающей точкой в мультимедиа, научных и финансовых задачах. Увеличивает степень параллелизма и пропускную способность в вещественных SIMD-вычислениях.

        Обобщенный формат команд х86

        Базовый набор команд 32-разрядного интеловского процессора обеспечивает выполнение операций над операндами, которые находятся в регистре, памяти или непосредственно в команде. В набор входят безадресные, одно-, двух- и трехадресные команды. Процессор реализует следующие шесть типов двухадресных команд: регистр – регистр; память – регистр; непосредственный операнд – регистр; регистр – память; память – память; непосредственный операнд – память.

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

        Обобщенный вид формата команды показан на рис. 2.20. Он допускает наличие следующих полей: кода операции (1 или 2 байта); байтов адресации (0, 1 или 2 байта); байтов смещения (0, 1, 2 или 4 байта); байтов непосредственных данных – операндов (0, 1, 2 или 4 байта).

        Команды содержат от 1 до 12 байт. Проведенные оценки показывают, что в среднем длина команды составляет 4–5 байт.

        Рассмотрим назначение основных полей кода команды (рис. 2.20). Код операции (КОП) определяет тип выполняемой операции, а также в некоторых командах в первом байте может содержаться бит W, задающий разрядность операндов:

        W = 0 – операция с байтами;

        W = 1 – операция со словами (16 или 32 разряда).

        КОП Байты адресации Смещение Операнд
        MOD R/M SIB
        1 или 2 байта 0 или 1 байт 0 или 1 байт 0, 1, 2 или 4 байта 0, 1, 2 или 4 байта

        Рис.2.20. Общий формат команд

        В ряде команд первый байт КОП содержит поля reg или sreg, определяющие адреса используемых регистров. Трехбитовое поле reg задает выбираемый регистр в соответствии с разрядностью обрабатываемых операндов. Поле sreg (двух или трехбитовое) определяет адрес сегментных регистров.

        Байт адресации MОD R/M содержит три поля (рис.2.21). Поля MOD и R/M задают адрес одного из операндов, который может храниться в регистре или ячейке памяти. Кодировка этих полей определяет выбираемый способ адресации.

        7 6 5 3 2 0 7 6 5 3 2 0
        MOD REG/КОП R/M SS INDEX BASE
        MOD R/M SIB

        Рис. 2.21. Форматы байтов MOD R/M и SIB

        Для реализации некоторых способов относительной адресации используется байт SIB. Он содержит 3-битовые поля INDEX и BASE, определяющие выбор регистров, используемых в качестве индексного и базового регистров, и поле SS, задающее масштабный коэффициент для модификации значения индекса.

        При выполнении операций с непосредственной адресацией один из операндов задается в последних байтах команды (рис. 2.20). В этом случае КОП ряда команд содержит бит S, определяющий способ использования непосредственно задаваемых данных.

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

        Базовый адрес определяется содержимым 16-разрядного сегментного регистра и зависит от режима работы процессора. Если он работает в режиме обработки 16-разрядных данных (режим реальных адресов), то 20-разрядный базовый адрес формируется путем сдвига содержимого сегментного регистра на 4 разряда влево. Если процессор работает в режиме обработки 32-разрядных данных (защищенный режим), то 32-разрядный базовый адрес содержится в дескрипторе, выбор которого из таблицы дескрипторов осуществляется с помощью селектора – содержимого соответствующего сегментного регистра.

        В качестве относительного адреса используется содержимое регистров общего назначения или эффективный адрес (ЕА), который формируется в соответствии с заданным способом адресации. ЕА является 16- или 32-разрядным и формируется в зависимости от значения полей MOD и R/M и содержимого байта SIB (для 32-разрядных адресов). В общем случае ЕА образуется путем арифметического сложения трех компонентов:

        · содержимого базового регистра;

        · содержимого индексного регистра;

        · 8, 16, 32-разрядного смещения, заданного в одном, двух или четырех байтах команды.

        В зависимости от значений полей MOD и R/M для формирования ЕА используются все или часть этих слагаемых.

        В процессоре осуществляются следующие способы адресации операндов:

        · базово-индексная адресация со смещением.

        В современных микропроцессорах Intel Core i5, i7 базовый набор команд и используемые способы адресации операндов практически полностью совпадают с набором команд и способов адресации в предыдущих моделях Core 2 Duo, Pentium 4. Процессоры обеспечивают реальный и защищенный режимы работы, реализуют сегментную и страничную организации памяти. Таким образом, пользователь имеет дело с хорошо знакомым набором регистров и способов адресации, может работать с базовой системой команд и известными вариантами реализации прерываний и исключений, которые характерны для всех моделей семейств Intel Core и Pentium.

        Основные режимы работы х86-64 архитектуры

        В процессорах данной архитектуры существующие в х86 регистры общего назначения расширены с 32 до 64 бит и к ним добавлены еще 8 новых 64 разрядных регистров.

        Итак, в64-битном режиме обеспечивается поддержка:

        · 64-битных виртуальных адресов;

        · 8 новых и расширенных 64-битных регистров общего назначения;

        · сплошного адресного пространства с единым пространством для инструкций, данных и стека.

        · 64-битных арифметических и логических операций над целыми числами.

        Данный режим снимает ограничение в размерности адресного пространства оперативной памяти, которое в современных 32-разрядных х86 системах составляет 2 32 = 4 Гбайт.

        Режимы работы процессора х86-64 архитектуры

        Режим ОС Необх. переком-пиляция приложе-ний Характеристики
        Длина адреса Длина операнда Дополнит. регистры Размер РОН
        Long Mode 64-битный 64-битная ДА ДА
        Compatibility mode НЕТ НЕТ
        Legacy Mode 32-бит. НЕТ НЕТ
        16-бит.

        Compatibility mode обеспечивает бинарную совместимость с существующими 16- и 32-битными приложениями при работе с 64-битной операционной системой. Этот режим разрешается ОС по принципу отдельных кодовых сегментов. Однако, в отличие от 64-битного режима, сегментация функционирует обычным образом, используя семантику защищенного режима. С точки зрения выполняемого приложения процессор выглядит как обычный х86 центральный процессор (CPU) в защищенном режиме. С точки зрения операционной системы трансляция адресов, работа с прерываниями и исключениями, а также системные структуры данных используют механизмы 64-битного Long Mode.

        Наследственный режим (Legacy Mode) обеспечивает бинарную совместимость с 16- и 32-битными операционными системами; полную совместимость с существующими 32-битными реализациями х86 архитектуры, включающей в себя поддержку сегментированной памяти и 32-битных регистров общего назначения и указателя инструкций; процессор уподобляется обычному 32-разрядному х86 CPU. В этом режиме не задействуется ни одна из 64-битных функций.

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

        Особенности архитектуры Intel 64

        Архитектура Intel 64 (технология EM64T) в сочетании с соответствующим программным обеспечением поддерживает работу 64-разрядных приложений на серверах, рабочих станциях, настольных ПК и ноутбуках. Она, как и х86-64 от AMD, реализует 64-разрядное расширение регистров, те же режимы работы процессора, ту же программную совместимость с 16- и 32-битными приложениями, а главное – эта технология расширяет адресное пространство виртуальной и физической памяти.

        Архитектура Intel 64 поддерживает следующие возможности:

        · 64-разрядное сплошное пространство виртуальных адресов;

        · 64-разрядные регистры общего назначения;

        · 64-разрядная поддержка вычислений с целыми числами;

        · до 1 Тбайт адресного пространства платформы.

        2.5.2. Форматы команд и способы адресации в RISC-процессорах

        Рассмотрим форматы команд на примере процессоров архитектуры Power PC, разработанной корпорациями IBM, Apple и Motorola.

        Все команды имеют длину 32 разряда и могут быть 3-х форматов:

        · 1 формат – КОП (6); RS (5); Rt (5); I (16),

        где КОП(6) – поле кода операции, содержащее 6 разрядов; RS(5), Rt(5) – поля адресов регистров (по 5 разрядов); I(16) – 16-разрядный непосредственный операнд.

        · 2 формат – КОП (6); RS (5); Rt (5); Rk (5).

        · 3 формат – отличается от 2-го формата наличием дополнительного 32-разрядного командного слова, в котором для различных кодов операций могут находиться 32-разрядные непосредственный операнд, смещение или адрес перехода.

        Архитектура Power PC определяет операции регистр – регистр для всех команд обработки. Источником данных являются встроенные регистры или непосредственные операнды. Трехрегистровый формат команд позволяет отличать регистр результатов от 2-х регистров – источников, позволяя использовать их в других командах. Данные пересылаются между памятью и регистрами только специальными командами загрузки/сохранения. Адреса памяти формируются с использованием базового регистра и смещения.

        2.5.3. Особенности системы команд IA-64

        Команды IA-64 можно подразделить: команды работы со стеком регистров (например, alloc); целочисленные команды; команды сравнения и работы с предикатами; команды доступа в память; команды перехода; мультимедийные команды; команды пересылок между регистрами; команды выполнения операций над строками и подсчет числа единиц в слове; команды работы с плавающей запятой.

        Целочисленные команды IA-64 включают арифметические операции (add, sub и др.), операции над битами и сдвиги, а также 32-разрядные операции.

        Формат команд IA-64 содержит 41 разряд и имеет фиксированную длину (рис. 2.22). Поле КОП занимает 14 разрядов, под адрес 64 предикатных регистров (PR) отводится 6 разрядов, три 7-битных поля (GFR) используются для адресации 128 регистров общего назначения (GR) или регистров с плавающей точкой (FR).

        Большинство целочисленных команд трехадресные, а их аргументы находятся в регистрах, однако встречается и литеральное (символьное) представление аргументов. Имеются также модификации команд add и sub, которые являются четырехадресными: в них к сумме/разности регистров прибавляется/вычитается 1.

        КОП PR GFR GFR GFR

        Рис. 2.22. Формат инструкций IA-64

        Т Инструкция 1 Инструкция 2 Инструкция 3

        Рис.2.23. Пакет инструкций IA-64

        Раздел 2.6 перенесен из раздела 3.6 предыдущего пособия

        2.6. Принципы организации системы прерывания программ

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

        Реакция состоит в том, что машина прерывает обработку текущей программы и переходит к выполнению некоторой другой программы (процедуры), специально предназначенной для данного события. По завершению этой программы ЭВМ возвращается к выполнению прерванной программы.

        Рассматриваемый процесс, называемый прерыванием программ, поясняется на рис. 2.24.

        Механизм прерываний предусматривает обработку запросов на обслуживание как от внешних устройств системы, так и от внутренних блоков процессора.

        Под прерываниями в узком смысле слова обычно понимают процесс обработки запросов первого типа – от внешних устройств. Поступление запроса на обслуживание от внутреннего блока процессора свидетельствует о возникновении исключительной ситуации: деление на нуль, переполнение, неправильный код команды и т. п. Запросы, возникающие в таких ситуациях, называются исключениями.

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

        студент 2-ого курса, группы ИП-615
        Проверила: Токмашева Е.И.

        Новосибирск, 2018

        Эволюция наборов SIMD – инструкций …………………………………………………..5

        Расширения SSE2, SSE3, SSSE3, SSE4…….……………………………………………….6

        История появления

        В 1997 году появляется процессор Intel Pentium ММХ с некоторыми встроенными средствами поддержки мультимедиа. Основная ставка Intel в этом процессоре - ускоренная обработка изображения и аудиоданных. Технические характеристики сильно не отличались от Intel Pentium; были добавлены новые инструкции, и повышена максимальная тактовая частота до 233 МГц. В зависимости от контекста, MMX может означать multi-media extensions (мультимедийные расширения) или matrix math extensions (матричные математические расширения). Технология MMX использовалась в старших моделях процессоров Pentium пятого поколения (рис.1) в качестве расширения
        Рис. 1. Вид процессора Intel Pentium MMX сверху и снизу.

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

        В архитектуре процессоров MMX есть два основных усовершенствования. Первое, фундаментальное, состоит в том, что все микросхемы MMX имеют больший внутренний встроенный кэш, чем их собратья, не использующие эту технологию. Это повышает эффективность выполнения каждой программы и всего программного обеспечения независимо от того, использует ли оно фактически команды MMX. Другое усовершенствование MMX состоит в расширении набора команд процессора 57 новыми командами, а также во введении новой возможности выполнения команд, называемой одиночный поток команд—множественный поток данных (Single Instruction—Multiple Data, SIMD).

        В современных мультимедийных и сетевых приложениях часто используются циклы; хотя они занимают около 10% (или даже меньше) объема полного кода приложения, на их выполнение может уйти до 90% общего времени выполнения.

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

        Технология SIMD позволяет ускорить выполнение циклов при обработке графических, анимационных, видео- и аудиофайлов; в противном случае эти циклы отнимали бы время у процессора. Intel также добавила 57 новых команд, специально разработанных для более эффективной обработки звуковых, графических и видеоданных. Эти команды предназначены для выполнения с высокой степенью параллелизма последовательностей, которые часто встречаются при работе мультимедийных программ. Высокая степень параллелизма в данном случае означает, что одни и те же алгоритмы применяются ко многим данным, например к данным в различных точках при изменении графического изображения.

        Такие компании, как AMD и Cyrix, лицензировали у Intel технологию MMX и реализовали ее в собственных процессорах. В феврале 1999 года Intel представила общественности процессор Pentium III, содержащий обновление технологии MMX, получившей название: SSE (Streaming SIMD Extensions - потоковые расширения SIMD).

        Общие сведения
        SSE ( англ. Streaming SIMD Extensions , потоковое SIMD-расширение процессора) — это SIMD ( англ. Single Instruction , Multiple Data , Одна инструкция — множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD , который был представлен годом раньше. Первоначально названием этих инструкций было KNI — Katmai New Instructions (Katmai — название первой версии ядра процессора Pentium III ).

        SSE разработаны компанией Intel и были впервые применены в процессоре Intel Pentium III, с ядром Katmai. Отсюда, изначально носили название KNI (Katmai New Instructions). Технология SSE позволила преодолеть проблемы MMX — при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры использовались для MMX и работы с вещественными числами.

        Эволюция наборов SIMD - инструкций

        SSE-расширение

        Новые 70 команд SSE-расширения (Streaming SIMD ExtensionExtensions) делятся на 4 категории:

        · SIMD-команды обработки данных в формате с плавающей запятой одинарной точности (SPFP-команды);

        ·дополнительные SIMD-команды для обработки целочисленных данных;

        · команды управления кэшированием;

        · команды сохранения и восстановления состояния процессора.

        Большинство SPFP-команд имеют два операнда. Данные, содержащиеся в первом операнде, после выполнения команды, как правило, замещаются результатами, а данные, содержащиеся во втором операнде, остаются неизменными.

        Скалярные операции выполняются над младшими (занимающие разряды 0–31) элементами данных двух операндов. Остальные три элемента данных не изменяются.

        В расширение SSE включены дополнительные SIMD-команды для работы с целочисленными данными. Эти новые команды расширяют возможности существующего набора команд технологии ММХ. Они выполняют SIMD-операции над несколькими целочисленными данными, упакованными в 64-разрядные группы, загружают и хранят упакованные данные в 64-разрядных ММХ-регистрах.

        Кроме того, в SSE введены команды нового типа, обеспечивающие:

        · управление кэшированием данных с целью повышения эффективности использования кэш-памяти и сокращения числа обращений к основной памяти;

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

        Первая группа команд выполняет запись данных из ММХ (ХММ) регистра в память, минуя кэш. Вторая – обеспечивает запись данных из памяти в кэш различных уровней.

        Кроме ХММ-регистров в микропроцессоре Pentium III появился новый регистр состояния и управления MXCSR. Для работы с этими регистрами требуется поддержка, как со стороны процессора, так и со стороны операционной системы. Чтобы прикладные программы и ОС могли сохранять и восстанавливать состояния новых компонентов процессора, введено несколько команд управления. Первая группа команд управления обеспечивает сохранение в памяти содержимого регистра МХCSR и наоборот – загружает слово состояния из памяти в регистр MXCSR. Вторая группа – сохраняет в памяти состояние процессора (состояние регистров данных FPU, MMX-регистров, ХММ-регистров) и восстанавливает ранее сохраненное состояние процессора.

        Расширения SSE2, SSE3, SSSE3, SSE4

        Расширение SSE2 , представляя собой симбиоз ММХ и SSE, обладает большей гибкостью и позволяет добиваться впечатляющего прироста производительности. Команды SSE2 существенно повышают эффективность процессора при реализации трехмерной графики и Интернет-приложений, обеспечение сжатия и кодирования аудио- и видеоданных и в ряде других приложений.

        Расширение SSE3, введенное в состав Pentium 4 Prescott, включает 5 новых операций с комплексными числами, 5 потоковых операций над числами с плавающей запятой, 2 команды для синхронизации потоков и одну специальную инструкцию для применения при кодировании видео.

        Расширение SSE4.1 – появилось в первом процессоре Intel c 45-нм техпроцессом (кодовое наименование Penryn). Набор команд SSE4.1 включает 47 новых инновационных инструкций, основными из которых являются примитивы векторизации для компиляторов и ускорители кодирования видеозаписей с высоким расширением и обработки фотоизображений.

        Расширение SSE4.2 – разработано Intel для процессоров с новой микроархитектурой Nehalem. Введенные в набор SSE4.2 инструкции ориентированы на ускорение обработки строк и текстовой информации.

        Новые технологии SSE позволяют более эффективно работать: с трехмерной графикой, потоками аудио- и видеоданных (DVD-воспроизведение), а также приложениями распознавания речи. В целом SSE обеспечивает следующие преимущества: более высокое разрешение/качество при просмотре и обработке графических изображений; улучшенное качество воспроизведения звуковых и видеофайлов, а также одновременное кодирование и декодирование форматов в мультимедийных приложениях; уменьшение загрузки процессора и повышение точности/скорости реагирования при выполнении программного обеспечения для распознавания речи.

        image

        В настоящее время огромное количество задач требует большой производительности систем. Бесконечно увеличивать количество транзисторов на кристалле процессора не позволяют физические ограничения. Геометрические размеры транзисторов нельзя физически уменьшать, так как при превышении возможно допустимых размеров начинают проявляться явления, которые не заметны при больших размерах активных элементов — начинают сильно сказываться квантовые размерные эффекты. Транзисторы начинают работать не как транзисторы.
        А закон Мура здесь ни при чем. Это был и остается законом стоимости, а увеличение количества транзисторов на кристалле — это скорее следствие из закона. Таким образом, для того, чтобы увеличивать мощность компьютерных систем приходится искать другие способы. Это использование мультипроцессоров, мультикомпьютеров. Такой подход характеризуется большим количеством процессорных элементов, что приводит к независимому исполнение подзадач на каждом вычислительном устройстве.

        Параллельные методы обработки:

        Источник параллелизма Ускорение Усилие программиста Популярность
        Множество ядер 2х-128х Умеренное Высокая
        Множество машин 1х-Бесконечность Умеренно-Высокое Высокая
        Векторизация 2х-8х Умеренное Низкая
        Графические адаптеры 128х-2048х Высокое Низкая
        Сопроцессор 40х-80х Умеренно-высокое Чрезвычайно-низкая

        Способов для повышения эффективности систем много и все довольно различны. Одним из таких способов является использование векторных процессоров, которые в разы повышают скорость вычислений. В отличие от скалярных процессоров, которые обрабатывают один элемент данных за одну инструкцию (SISD), векторные процессоры способны за одну инструкцию обрабатывать несколько элементов данных (SIMD). Большинство современных процессоров являются скалярными. Но многие задачи, которые они решают, требуют большого объема вычислений: обработка видео, звука, работа с графикой, научные расчеты и многое другое. Для ускорения процесса вычислений производители процессоров стали встраивать в свои устройства дополнительные потоковые SIMD-расширения.
        Соответственно при определенном подходе программирования стало возможным использование векторной обработки данных в процессоре. Существующие расширения: MMX, SSE и AVX. Они позволяют использовать дополнительные возможности процессора для ускоренной обработки больших массивов данных. При этом векторизация позволяет добиться ускорения без явного параллелизма. Т.е. он есть с точки зрения обработки данных, но с точки зрения программиста это не требует каких-либо затрат на разработку специальных алгоритмов для предотвращения состояния гонки или синхронизации, а стиль разработки не отличается от синхронного. Мы получаем ускорение без особых усилий, почти совершенно бесплатно. И в этом нет никакой магии.

        Что такое SSE?

        • 2 double
        • 2 long
        • 4 float
        • 4 int
        • 8 short
        • 16 char

        Пример векторизации на С++

        • r0 := a0 + b0
        • r1 := a1 + b1
        • r2 := a2 + b2
        • r3 := a3 + b3
        • r0 := a0 + b0
        • r1 := a1
        • r2 := a2
        • r3 := a3
        • Данные float, загруженные и хранящиеся в __m128 объекте должны иметь 16-байтовое выравнивание
        • Некоторые встроенные функции требуют, чтобы их аргумент был типа констант целых чисел, в силу природы инструкции
        • Результат арифметических операций, действующих на два NAN аргументов, не определен


        Теперь понятно почему в данном цикле такие изменения указателей. На каждой итерации цикла происходит сложение 4-х элементов и сохранение полученного результата по адресам указателя с из регистра xmm0 (для данной программы). Т.е. как мы видим такой подход не изменяет исходных данных, а хранит сумму в регистре и по необходимости передает ее в нужный нам операнд. Это позволяет повысить производительность программы в тех случаях, когда необходимо повторно использовать операнды.
        Рассмотрим код, который генерирует ассемблер для метода _mm_add_ps:

        • Vector — коллекцию статических удобных методов для работы с универсальными векторами
        • Matrix3x2 — представляет матрицу 3х2
        • Matrix4х4 — представляет матрицу 4х4
        • Plane — представляет трехмерную плоскость
        • Quaternion — представляет вектор, используемый для кодирования трехмерных физических поворотов
        • Vector )>)> представляет вектор указанного числового типа, который подходит для низкоуровневой оптимизации параллельных алгоритмов
        • Vector2 — представляет вектор с двумя значениями одинарной точности с плавающей запятой
        • Vector3 — представляет вектор с тремя значениями одинарной точности с плавающей запятой
        • Vector4 — представляет вектор с четырьмя значениями одинарной точности с плавающей запятой

        В вычисление, Потоковые расширения SIMD (SSE) - это одна инструкция, несколько данных (SIMD) Набор инструкций расширение x86 архитектура, разработанная Intel и введены в 1999 г. Pentium III серия из Центральные процессоры (CPU) вскоре после появления Продвинутые Микроустройства (AMD) 3DNow!. SSE содержит 70 новых инструкций, большинство из которых работают над одинарная точность плавающая точка данные. Команды SIMD могут значительно повысить производительность, когда одни и те же операции должны выполняться с несколькими объектами данных. Типичные области применения: цифровая обработка сигналов и обработка графики.

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

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

        SSE изначально назывался Катмай Новые инструкции (KNI), Катмай кодовое название первой ревизии ядра Pentium III. Во время проекта Katmai Intel стремилась отличить его от своей предыдущей линейки продуктов, в частности от своего флагмана. Pentium II. Позже он был переименован Расширения SIMD для потоковой передачи в Интернете (ISSE [1] ), затем SSE. В конце концов AMD добавила поддержку инструкций SSE, начиная с Athlon XP и Duron (Ядро Моргана) процессоры.

        Содержание

        Регистры

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

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

        Первый процессор, поддерживающий SSE, Pentium III, общие ресурсы выполнения между SSE и блок с плавающей запятой (FPU). [1] Хотя составлен приложение может чередовать инструкции 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
            • ПМОВМСКБ, ПШУФВ

            Прочие инструкции

            • MXCSR управление
              • LDMXCSR, STMXCSR
              • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

              Пример

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

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

              Проблемы с программным и аппаратным обеспечением

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

              • Intel и AMD предлагают приложения для определения того, какие расширения поддерживает процессор.
              • В CPUID opcode - это дополнительная инструкция процессора (название происходит от CPU IDentification) для архитектуры x86. Он был представлен Intel в 1993 году, когда представила процессоры Pentium и SL-Enhanced 486.

              Освоение пользовательскими приложениями расширений x86 происходит медленно даже при минимальном базовом уровне MMX и поддержка SSE (в некоторых случаях) отсутствует в приложениях примерно через 10 лет после того, как эти расширения стали общедоступными. Распределенные вычисления ускорили использование этих расширений в научном сообществе, и многие научные приложения отказываются работать, если ЦП не поддерживает SSE2 или SSE3.

              Использование нескольких версий приложения для работы с множеством различных наборов доступных расширений - это самый простой способ решить проблему оптимизации расширений x86. Программные библиотеки и некоторые приложения начали поддерживать несколько типов расширений, намекая на то, что полное использование доступных инструкций x86 может, наконец, стать обычным явлением через 5-15 лет после того, как инструкции были первоначально введены.

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

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

              Читайте также: