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

Раздел 2. Архитектура и системы команд современных ПЭВМ и ARM7.

 

Тема 2.2. Архитектура IA-32.

 

План:

1. Введение в IA-32.

2. Сочетание 16-ти разрядных и 32-разрядных адресов и данных.

3. Форматы команд и методы адресации.

4. Расширения системы команд.

 

Функциональная классификация машинных команд

 

Система команд Pentium 4, последнего на сегодняшний день процессора архитектуры IA-32, включает в себя около 330 мнемоник машинных команд. Если же считать по кодам операций, то их будет гораздо больше.

Весь набор машинных команд можно разбить на следующие группы:

  1. команды общего назначения, исполняемые целочисленным устройством, в том числе системные команды;
  2. команды сопроцессора;
  3. команды MMX-расширения;
  4. команды XMM-расширения (наборы команд SSE и SSE2).

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

 

 

Рисунок. Команды ассемблера.

 

Машинные команды могут либо совсем не иметь операндов, либо иметь один или два операнда.

Обычно машинная команда имеет два операнда, один из которых является приемником, а второй — источником.

Возможны следующие сочетания источника и приемника:

 

 

Исключения составляют следующие команды:

Цепочечные — могут перемещать данные из памяти в память

Работа со стеком — могут переносить данные из памяти в стек

Команды умножения

Способы задания операндов в команде:

1) операнд задается неявно на микропроцессорном уровне

Примеры:

std ; устанавливает DF=1

push eax ; устанавливает ESP=ESP-4

 

2) операнд задается в самой команде (непосредственный операнд)

Примеры:

num EQU 10 ; определяет константу num

mov al, 5 ; загружает в AL значение 5

add al, num ; устанавливает AL=AL+10

3) адресные операнды задают физическое размещение операнда в памяти

Пример:

mov eax, 0 ; загрузка в EBX двойного

mov ds, ax ; слова, расположенного

mov ebx, ds:0h ; в 0000:00000000h

4) перемещаемые операнды — любые символьные имена, представляющие адреса памяти

Пример:

.data

var1 DW 0CFFh ; объявляется переменная

.code

mov ax, var1 ; загружается в AX

5) регистровый операнд

Примеры:

movq mm0, mm1 ; регистру mm0 присваивается

; значение из регистра mm1

sub eax, esi ; из eax вычитается esi

6) операнд — порт ввода/вывода

Примеры:

in al, 48h ; взять байт из порта 48h

mov al, 20h ; вывести слово в

out dx, al ; порт 20h

7) операнд находится в стеке

Примеры:

push eax ; обменять значения

push ebx ; регистров EAX и EBX

pop eax ; через стек

pop ebx ;

8) операнд находится в памяти

Примеры:

.data

var DD 100 DUP(0)

...

lea esi, var ; загрузить в EAX второй

mov eax, [esi+4] ; элемент массива VAR

 

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

Прямые — эффективный адрес операнда находится непосредственно в коде команды

Косвенные — в самой команде находится лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах.

Относительная прямая адресация:

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

jz METKA ; переход на метку METKA, если ZF=1

mov al, 5

...

METKA:

Абсолютная прямая адресация:

Эффективный адрес операнда формируется из поля смещения команды.

mov eax, DWORD PTR [0h] ; загружает в eax

; двойное слово

; с адреса ds:0h

Косвенная базовая адресация:

Эффективный адрес операнда может находится в любом регистре кроме ESP и EBP.

mov eax, [ecx]

mov al, [ebx]

Косвенная базовая адресация со смещением:

Предназначена для доступа к данным с известным смещением относительно базового адреса.

.data

var DD 5, 6, 7, 8

.code

mov edx, OFFSET var ; загружаем адрес var

mov eax, [edx+8h] ; доступ к 7

mov edx, 4 ;

mov eax, var[edx] ; доступ к 6

Косвенная индексная адресация со смещением:

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

.data

var DD 5, 6, 7, 8

.code

mov edx, 3 ; загружаем адрес var

mov eax, var[edx*4] ; доступ к 8 (=var+edx*4)

Косвенная базовая индексная адресация:

Эффективный адрес формируется как сумма двух регистров общего назначения: базового и индексного. Для индексного регистра возможно масштабирование.

.data

var DD 5, 6, 7, 8

.code

mov ebx, OFFSET var

mov esi, 2

mov eax, [ebx][esi*4] ; доступ к 7 (=ebx+esi*2)

Косвенная базовая индексная адресация со смещением:

Эффективный адрес формируется как сумма двух регистров общего назначения (базового и

индексного) и смещения.

.data

var DD 5, 6, 7, 8

.code

mov ebx, 4

mov esi, 2

mov eax, var[ebx][esi*4] ; доступ к 8 (=var+ebx+esi*4)

 

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

ММХ-технология

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

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

1. арифметические,

2. логические,

3. сдвига,

4. сравнения,

5. передачи данных,

6. упаковки,

7. распаковки,

8. отмены режима ММХ.

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

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

 

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

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

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

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

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

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

 

SPFP-команды используют 8 новых 128-разрядных регистров (ХММ-регистры) и новый тип данных – 128-разрядное значение, содержащее 4 последовательно расположенных («упакованных») 32-разрядных числа с плавающей запятой одинарной точности. При выполнении инструкций с ХММ традиционное оборудование FPU/MMX не используется, что позволяет эффективно смешивать инструкции ММХ с инструкциями над операндами с плавающей точкой.

 

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

SPFP-команды поддерживают два типа операций над упакованными данными с плавающей запятой – параллельные и скалярные. Параллельные операции выполняются над четырьмя 32-разрядными элементами данных, упакованными в каждый 128-разрядный операнд.

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

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

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

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

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

 

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

 

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

 

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

 

Расширение SSE2, введенное в состав Pentium 4 Northwood, значительно расширяет возможности обработки нескольких операндов по принципу SIMD по сравнению с SSE. В нем используется 144 новых команды, обеспечивающих одновременное выполнение операций над несколькими операндами, которые располагаются в памяти и в 128-разрядных регистрах ХММ. В регистрах могут храниться и одновременно обрабатываться два числа с плавающей запятой в формате двойной точности (64 разряда) или 4 числа в формате одинарной точности (32 разряда), любые целочисленные типы данных, способные разместиться в 128-разрядных регистрах.

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

 

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

 

Расширение SSSE3 (Supplemental SSE3 – дополнительное потоковое SIMD-расширение 3) появилось в процессорах с микроархитектурой Intel Core и поддерживается процессором Intel Atom. Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми данными. Каждый из них может работать как с 64-битными (ММХ), так и с 128-битными (ХММ) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды. Новые инструкции включают работу со знаком, сдвиги, перемешивание байт, умножение, горизонтальное сложение/вычитание целых.

 

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

 

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

Ни одна из SSE4 инструкций не работает с 64-битными ММХ-регистрами, только с 128-битными ХММ-регистрами.

 

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

 

Расширение AES-NI (Advanced Encryption Standard New Instructions) – набор из 6 новых SIMD-инструкций, ускоряющий процесс шифрования и дешифрования информации по стандарту AES. Стандарт AES является стандартом шифрования США, принятым в 2000 г. Он специфицирует алгоритм Rijndael, который представляет собой симметричный блочный шифр, работающий с блоками длиной 128 бит, и использует ключи длиной 128, 192 и 256 бит. По заявлению правительства США для взлома шифрования при использовании 128-битного ключа потребуется 149 триллионов лет.

 

Новое расширение AVX (Advanced Vector Extensions) – расширение системы команд х86 для микропроцессоров с новой микроархитектурой Intel Sandy Bridge (2010 г.) и процессоров AMD Bulldozer (2011 г.), анонсированная Intel в 2008 г., представляет различные улучшения, новые инструкции и новую схему кодирования машинных кодов. Размер векторных регистров SIMD увеличивается со 128 (ХММ) до 256 бит (регистры YMM). Существующие 128-битные инструкции будут использовать только младшую половину новых YMM-регистров. В будущем возможно расширение до 512 или 1024 бит. Набор инструкций AVX позволяет использовать любую двухоперандную инструкцию ХММ в трехоперандном виде без модификации двух регистров-источников, с отдельным регистром для результата. Добавлены инструкции с количеством операндов более трех. Новая система кодирования машинных кодов VEX предоставляет новый набор префиксов кода, которые расширяют пространство возможных машинных кодов. Использование YMM-регистров поддерживают операционные системы: Windows 7, Windows Server 2008 R2, Linux (версия ядра 2.6.30).

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

 


Дата добавления: 2021-12-10; просмотров: 62; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!