У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 7 Расширение SSE Теоретическая часть 1

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 5.3.2025

Лабораторная работа №7

Расширение SSE

Теоретическая часть

1. Регистры SSE

Со времени процессора Pentium III (Katmai) появилось новое расширение SSE (Streaming SIMD Extensions - потоковые SIMD-расширения), где SIMD (Single Instruction - Multiple Data) - общий для SSE и ММХ подход к обработке большого количества данных одной командой. Расширение предназначается для современных приложений, работающих с двумерной и трехмерной графикой, видео-, аудио- и другими видами потоковых данных.

В отличие от ММХ, это расширение не использует уже существующие ресурсы процессора, а вводит 8 новых независимых 128-битных регистров данных: ХММО, ХММ1, ХММ2, ХММЗ, ХММ4, ХММ5, ХММ6 и ХММ7. Таким образом, решаются проблемы технологии ММХ - не требуется команд типа EMMS для переключения режимов и можно пользоваться другими расширениями, работая с SSE.

Кроме восьми регистров данных, вводится дополнительный 32-битный регистр управления/состояния MXCSR, который используется для маскирования исключений, выбора режимов и определения состояния флагов:

бит 0: произошло исключение IE

бит 1: произошло исключение DE

бит 2: произошло исключение ZE

бит 3: произошло исключение ОЕ

бит 4: произошло исключение UE

бит 5: произошло исключение РЕ

бит 6: зарезервирован (всегда 0)

бит 7: IM - маска исключения IE

бит 8: DM - маска исключения DE

бит 9: ZM - маска исключения ZE

бит 10: ОМ - маска исключения ОЕ

бит 11: UM - маска исключения UE

бит 12: РМ - маска исключения РЕ

биты 14-13: RC - управление округлением

бит 15: FZ - режим сброса в ноль (flush-to-zero)

биты 31-16: зарезервированы (всегда 0)

Все маскирующие биты по умолчанию (при включении процессора) устанавливаются в 1, так что никакие исключения не обрабатываются.

Поле RC определяет режим округления: 00 - к ближайшему числу, 01 - к отрицательной бесконечности, 10 - к положительной бесконечности, 11 - к нулю. По умолчанию устанавливается в режим округления к ближайшему числу.

Бит FZ включает режим сброса в ноль (по умолчанию выключен). В этом режиме команды SSE не превращают слишком маленькое число с плавающей запятой в денормализованное (как этого требует стандарт IEEE), а возвращают ноль.

Знак нуля соответствует знаку получившегося бы денормализованного числа, и, кроме того, устанавливаются флаги РЕ и UE.

2. Типы данных SSE

Основной тип данных, с которым работают команды SSE - упакованные числа с плавающей запятой одинарной точности. В одном 128-битном регистре размещаются сразу четыре таких числа - в битах 127-96 (число 3), 95-64 (число 2), 3-32 (число 1) и 31-0 (число 0). Это стандартные 32-битные числа с плавающей запятой, используемые числовым сопроцессором. Целочисленные команды SSE могут работать с упакованными байтами, словами или двойными словами. Однако эти команды оперируют данными, находящимися в регистрах ММХ.

3. Команды SSE

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

Команды пересылки данных

Команда

Назначение

Процессор

MOVAPS приемник, источник

Переслать выровненные упакованные числа

PHI

Копирует 128 бит из источника в приемник. Каждый из аргументов может быть либо регистром SSE, либо переменной в памяти, но пересылки типа память-память запрещены. Если адрес переменной некратен 16 байтам (128 битам), вызывается исключение #GP.

Команда

Назначение

Процессор

MOVUPS приемник, источник

Переслать невыравненные упакованные числа

PIII

Копирует 128 бит из источника в приемник. Каждый из аргументов может быть либо регистром SSE, либо переменной в памяти, но пересылки типа память-память запрещены. В тех случаях, когда легко достичь выравнивания всех данных по адресам, кратным 16 байт, рекомендуется пользоваться командой MOVAPS, так как она более эффективна.

Команда

Назначение

Процессор

MOVHPS приемник, источник

Переслать старшие упакованные числа

PHI

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

Команда

Назначение

Процессор

MOVLPS приемник, источник

Переслать младшие упакованные числа

PIII

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

Команда

Назначение

Процессор

MOVHLPS приемник, источник

Переслать старшие упакованные числа в младшие

PHI

Копирует старшие 64 бита источника в младшие 64 бита приемника. Старшие 64 бита приемника не изменяются. И приемником, и источником могут быть только регистры SSE.

Команда

Назначение

Процессор

MOVLHPS приемник, источник

Переслать младшие упакованные числа в старшие

PIII

Копирует младшие 64 бита источника в старшие 64 бита приемника. Младшие 64 бита приемника не изменяются. И приемником, и источником могут быть только регистры SSE.

Команда

Назначение

Процессор

MOVMSKPS приемник, источник

Переслать маску в переменную

PHI

В приемник (32-битный регистр центрального процессора) записывается 4-битная маска, отвечающая знакам четырех вещественных чисел, находящихся в источнике (128-битный регистр SSE). Фактически бит 0 приемника устанавливается равным биту 31 источника, бит 1 - биту 63, бит 2 - биту 95, бит 3 - биту 127, а биты 4-31 приемника обнуляются.

Команда

Назначение

Процессор

MOVSS приемник, источник

Переслать одно вещественное число

PIII

Копирует младшие 64 бита из источника в приемник. Если приемник - регистр, его старшие 96 бит обнуляются. Если приемник — переменная в памяти, старшие 96 бит не изменяются. Каждый из аргументов может быть либо регистром SSE, либо переменной в памяти, но пересылки типа память-память запрещены.

Арифметические команды

Команда

Назначение

Процессор

ADDPS приемник, источник

Сложение упакованных вещественных чисел

PHI

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

Команда

Назначение

Процессор

ADDSS приемник, источник

Сложение одного вещественного числа

PIII

Выполняет сложение нулевых (занимающих биты 31-0) чисел с плавающей запятой в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в биты 31-0 приемника, биты 127-32 остаются без изменений.

Команда

Назначение

Процессор

SUBPS приемник, источник

Вычитание упакованных вещественных чисел

PHI

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

Команда

Назначение

Процессор

SUBSS приемник, источник

Вычитание одного вещественного числа

PIII

Выполняет вычитание нулевого (занимающего биты 31-0) числа с плавающей запятой в источнике (переменная или регистр SSE) из числа, находящегося в приемнике (регистр SSE). Результат записывается в биты 31-0 приемника, биты 127-32 остаются без изменений.

Команда

Назначение

Процессор

MULPS приемник, источник

Умножение упакованных вещественных чисел

PHI

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

Команда

Назначение

Процессор

MULSS приемник, источник

Умножение одного вещественного числа

PIII

Выполняет умножение нулевых (занимающих биты 31-0) чисел с плавающей запятой в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в биты 31-0 приемника, биты 127-32 остаются без изменений.

Команда

Назначение

Процессор

DIVPS приемник, источник

Деление упакованных вещественных чисел

PHI

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

Команда

Назначение

Процессор

DIVSS приемник, источник

Деление одного вещественного числа

PHI

Выполняет деление нулевого (занимающего биты 31-0) числа с плавающей запятой в приемнике (регистр SSE) на нулевое число, находящееся в источнике (переменная или регистр SSE). Результат записывается в биты 31-0 приемника, биты 127-32 остаются без изменений.

Команда

Назначение

Процессор

SQRTPS приемник, источник

Корень из упакованных вещественных чисел

PHI

Определяет значение квадратных корней от каждого из четырех чисел с плавающей запятой, находящихся в источнике (регистр SSE или переменная), и записывает их в приемник (регистр SSE).

Команда

Назначение

Процессор

SQRTSS приемник, источник

Корень из одного вещественного числа

PIII

Определяет значение квадратного корня из нулевого (занимающего биты 31-0) числа с плавающей запятой из источника (регистр SSE или переменная) и записывает результат в биты 31-0 приемника (регистр SSE).

Команда

Назначение

Процессор

RCPPS приемник, источник

Обратная величина для упакованных чисел

PIII

Выполняет деление единицы на каждое из четырех чисел с плавающей запятой, находящихся в источнике (регистр SSE или переменная), и записывает результаты в приемник (регистр SSE). Максимальное значение ошибки - 1,5х2~12.

Команда

Назначение

Процессор

RCPSS приемник, источник

Обратная величина для одного числа

PII

Выполняет деление единицы на нулевое (занимающее биты 31-0) число с плавающей запятой из источника (регистр SSE или переменная) и записывает результат в биты 31-0 приемника (регистр SSE). Максимальное значение ошибки - 1,5х2~12.

Команда

Назначение

Процессор

RSQRTPS приемник, источник

Обратный корень из упакованных чисел

PHI

Определяет обратные величины от квадратных корней (1/sqrtQ) каждого из четырех чисел с плавающей запятой, находящихся в источнике (регистр $SE или переменная), и записывает их в приемник (регистр SSE). Максимальное значение ошибки -  

Команда

Назначение

Процессор

RSQRTSS приемник, источник

Обратный корень из одного числа

PIII

Определяет обратную величину от квадратного корня (1/sqrtQ) нулевого числа (занимающего биты 31-0) числа с плавающей запятой из источника (регистр SSE или переменная) и записывает результат в биты 31-0 приемника (регистр SSE). Максимальное значение ошибки - .

Команда

Назначение

Процессор

MAXPS приемник, источник

Максимум для упакованных вещественных чисел

PIII

Определяет максимальные числа с плавающей запятой в каждой из четырех пар чисел, находящихся в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в приемник. Если источник или приемник содержит не-число (SNAN), оно возвращается в приемник без изменений.

При сравнении двух нулей возвращается нуль из источника. Если не-число сравнивается с другим не-числом, то возвращается не-число из приемника.

Команда

Назначение

Процессор

MAXSS приемник, источник

Максимум для одной пары вещественных чисел

PIII

Определяет максимальные числа с плавающей запятой в нулевой паре чисел (биты 31—0), находящихся в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в приемник. Биты 127-32 приемника не изменяются. Если источник или приемник содержит не-число (SNAN), оно возвращается в приемник без изменений. При сравнении двух нулей возвращается нуль из источника. Если не-число сравнивается с другим не-числом, возвращается не-число из приемника.

Команда

Назначение

Процессор

MINPS приемник, источник

Минимум для упакованных вещественных чисел

PHI

Определяет минимальные числа с плавающей запятой в каждой из четырех пар чисел, находящихся в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в приемник. Если источник или приемник включает не-число (SNAN), возвращается содержимое другого не-числа из аргументов. При сравнении двух нулей возвращается нуль из источника. Если нечисло сравнивается с другим не-числом, возвращается не-число из источника.

Команда

Назначение

Процессор

MINSS приемник, источник

Минимум для одной пары вещественных чисел

PHI

Определяет минимальные числа с плавающей запятой в нулевой паре чисел (биты 31-0), находящихся в источнике (переменная или регистр SSE) и приемнике (регистр SSE). Результат записывается в приемник. Биты 127-32 приемника не изменяются. Если источник или приемник включает не-число (SNAN), то возвращается содержимое другого аргумента. При сравнении двух нулей возвращается нуль из источника. Если не-число сравнивается с другим не-числом, возвращается не-число из источника.

Команды сравнения

Команда

Назначение

Процессор

CMPPS приемник, источник, предикат

Сравнение упакованных вещественных чисел

PIII

Для каждой из четырех пар вещественных чисел, находящихся в источнике (переменная или регистр SSE) и приемнике (регистр SSE), возвращает либо 0(ложь), либо 0FFFFFFFFh (истина), в зависимости от результата сравнения. Тип сравнения определяется предикатом (число):

Предикат

Проверяемое утверждение

0 (eq)

Приемник равен источнику

1 (It)

Приемник строго меньше источника

2 (le)

Приемник меньше'или равен источнику

3 (unord)

Приемник или источник являются не-числом

4 (neq)

Приемник не равен источнику

5 (nit)

Приемник больше или равен источнику

6 (nie)

Приемник строго больше источника

7 (ord)

Ни приемник, ни источник не являются не-числом

Если один из операндов - не-число, результатом сравнения является 0 для предикатов 0, 1, 2, 7 и истина для предикатов 3, 4, 5, 6.

Команда

Назначение

Процессор

CMPSS приемник, источник, предикат

Сравнение одной пары упакованных чисел

PIII

Выполняет сравнение нулевых (занимающих биты 31-0) вещественных чисел из источника и приемника аналогично команде CMPPS. Биты 127-32 приемника не изменяются.

Команда

Назначение

Процессор

COMISS приемник, источник

Сравнение одной пары чисел с установкой флагов

PIII

Выполняет сравнение нулевых (занимающих биты 31-0) вещественных чисел из источника (переменная или регистр SSE) и приемника (регистр SSE) и устанавливает флаги ZF, PF, CF регистра EFLAGS в соответствии с результатом. Флаги OF, SF, AF обнуляются. Если одно из сравниваемых чисел - не-число, все три флага (ZF, PF, CF) устанавливаются в 1. Если сравниваемые числа равны, то ZF = 1, PF = CF = 0. Если приемник меньше источника, то CF = 1, ZF = PF = 0. Если приемник больше источника - CF = ZF = PF = 0.

Команда

Назначение

Процессор

UCOMISS приемник, источник

Сравнение одной пары неупорядоченных чисел с установкой флагов

PHI

Эта команда полностью аналогична COMISS, но она приводит к исключению #1, если один из операндов SNAN или QNAN; UCOMISS только если один из операндов - SNAN.

Команды преобразования типов

Команда

Назначение

Процессор

CVTPI2PS приемник, источник

Преобразовать упакованные целые в вещественные

PIII

Преобразует два 32-битных целых числа со знаком из источника (регистр ММХ или 64-битная переменная) в два упакованных вещественных числа в приемнике (регистр SSE). Если преобразование нельзя выполнить точно, результат округляется в соответствии с MXCSR. Биты 127-64 приемника не изменяются.

Команда

Назначение

Процессор

CVTPS2PI приемник, источник

Преобразовать упакованные вещественные в целые

PIII

Преобразует младшие два 32-битных вещественных числа из источника (регистр SSE или 64-битная переменная) в два упакованных целых числа со знаком в приемнике (регистр ММХ). Если преобразование нельзя выполнить точно, результат округляется в соответствии с MXCSR. Если результат больше максимального 32-битного числа со знаком, возвращается целая неопределенность (S0000000h).

Команда

Назначение

Процессор

CVTSI2SS приемник, источник

Преобразовать целое в вещественное

PIII

Преобразует 32-битное целое число со знаком из источника (переменная или 32-битный регистр) в вещественное число в приемнике (регистр SSE). Если преобразование нельзя выполнить точно, результат округляется в соответствии с MXCSR. Биты 127-32 приемника не изменяются.

Команда

Назначение

Процессор

CVTSS2SI приемник, источник

Преобразовать вещественное в целое

PIII

Преобразует нулевое (младшее) вещественное число из источника(регистр SSE или 32-битная переменная) в 32-битное целое число со знаком в приемнике (32-битный регистр). Если преобразование нельзя выполнить точно, результат округляется в соответствии с MXCSR. Если результат больше максимального 32-битного числа со знаком, возвращается целая неопределенность (S0000000h).

Команда

Назначение

Процессор

CVTTPS2PI приемник, источник

Преобразование вещественных в целые с обрезанием

PIII

Выполняется аналогично CVTPS2PI, но, если результат не может быть представлен точно, он всегда округляется в сторону нуля (обрезается).

Команда

Назначение

Процессор

CVTTSS2SI приемник, источник

Преобразование вещественного в целое с обрезанием

PHI

Выполняется аналогично CVTSS2SI, но, если результат не может быть представлен точно, он всегда округляется в сторону нуля (обрезается).

Логические операции

Команда

Назначение

Процессор

ANDPS приемник, источник

Логическое И для SSE

PIII

Выполняет операцию побитового «логического И» для источника (регистр SSE или 128-битная переменная) и приемника (регистр SSE) и помещает результат в приемник.

Команда

Назначение

Процессор

ANDNPS приемник, источник

Логическое НЕ-И для SSE

PHI

Выполняет операцию НЕ над содержимым приемника (регистр SSE), затем выполняет операцию И над результатом и содержимым источника (регистр SSE или 128-битная переменная) и записывает результат в приемник.

Команда

Назначение

Процессор

ORPS приемник, источник

Логическое ИЛИ для SSE

PHI

Выполняет операцию побитового «логического ИЛИ» для источника (регистр SSE или 128-битная переменная) и приемника (регистр SSE) и помещает результат в приемник.

Команда

Назначение

Процессор

XORPS приемник, источник

Логическое исключающее ИЛИ для SSE

PIII

Выполняет операцию побитового «логического исключающего ИЛИ» для источника (регистр SSE или 128-битная переменная) и приемника (регистр SSE) и помещает результат в приемник.

Целочисленные SIMD-команды

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

Команда

Назначение

Процессор

PAVGB приемник, источник PAVGW приемник, источник

Усреднение байтов с округлением

Усреднение слов с округлением

PIII

PIII

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

Команда

Назначение

Процессор

PEXTRW приемник, источник, индекс

Распаковать одно слово

PIII

Выделяет 16-битное слово из источника (регистр ММХ) с номером, определяемым как младшие два бита индекса (непосредственно заданное число), и помещает его в младшую половину 32-битного регистра-приемника.

Команда

Назначение

Процессор

PINSRW приемник, источник, индекс

Запаковать одно слово

PHI

Считывает слово из источника (16-битная переменная или 32-битный регистр, во втором случае используется младшая половина регистра) и помещает его в приемник (регистр ММХ) в положение, задаваемое младшими двумя битами индекса (непосредственно заданное число). Другие три слова в приемнике не изменяются.

Команда

Назначение

Процессор

PMAXUB приемник, источник

Максимум для упакованных байтов

PHI

Для каждой из восьми пар упакованных байтов из источника (регистр ММХ или 64-битная переменная) или приемника(регистр ММХ) в приемник записывается максимальный байт в паре. Сравнение выполняется без учета знака.

Команда

Назначение

Процессор

PMAXSW приемник, источник

Максимум для упакованных слов

PHI

Для каждой из четырех пар упакованных слов из источника (регистр ММХ или 64-битная переменная) или приемника (регистр ММХ) в приемник записывается максимальное слово в паре. Сравнение выполняется с учетом знака.

Команда

Назначение

Процессор

PMINUB приемник, источник

Минимум для упакованных байтов

PIII

Для каждой из восьми пар упакованных байтов из источника (регистр ММХ или 64-битная переменная) или приемника (регистр ММХ) в приемник записывается минимальный байт в паре. Сравнение выполняется без учета знака.

Команда

Назначение

Процессор

PMINSW приемник, источник

Минимум для упакованных слов

PIII

Для каждой из четырех пар упакованных слов из источника (регистр ММХ или 64-битная переменная) или приемника (регистр ММХ) в приемник записывается минимальное слово в паре. Сравнение выполняется с учетом знака.

Команда

Назначение

Процессор

PMOVMSKB приемник, источник

Считать байтовую маску

PIII

В приемнике (32-битный регистр) каждый из младших 8 бит устанавливается равным старшему (знаковому) биту соответствующего байта источника (регистр ММХ). Биты 31-8 приемника обнуляются.

Команда

Назначение

Процессор

PMULHUW приемник, источник

Старшее умножение без знака

PHI

Умножить упакованные беззнаковые слова из источника (регистр ММХ или 64-битная переменная) и из приемника (регистр ММХ) и поместить старшие 16 бит 32-битного результата в соответствующее слово в приемнике.

Команда

Назначение

Процессор

PSADBW приемник, источник

Сумма абсолютных разностей

PIII

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

Команда

Назначение

Процессор

SHUFW приемник, источник, индекс

Переставить упакованные слова

PIII

Вместо каждого из четырех слов приемника (регистр ММХ) размещается слово из источника (регистр ММХ или 64-битная переменная) с номером, указанным в соответствующей паре битов индекса (непосредственно заданное 8-битное число). Так, вместо слова 0 (биты 15-0) приемника будет записано слово из источника с номером, равным значению битов 1 и 0 индекса. Например, если индекс равен 10101010b, второе слово источника будет скопировано во все четыре слова приемника.

Команды упаковки

Команда

Назначение

Процессор

SHUFPS приемник, источник, индекс

Переставить упакованные вещественные

PIII

Помещает в старшие два вещественных числа приемника (регистр SSE) любые из четырех чисел, находившихся в источнике (регистр SSE или 128-битная переменная). В младшие два числа приемника помещает любые из четырех чисел, находившихся в приемнике. По индексу (непосредственный операнд) определяется, какие именно числа упаковываются подобным образом. Биты 1 и 0 указывают номер числа из приемника, которое будет записано в нулевую позицию приемника; биты 3 и 2 - номер числа из приемника, которое будет записано в первую позицию приемника. Биты 5 и 4 устанавливают номер числа из источника, которое будет записано в третью позицию, а биты 7 и 6 - номер числа из источника, которое будет записано в четвертую позицию.

Команда

Назначение

Процессор

UNPCKHPS приемник, источник

Распаковать старшие вещественные числа

PIII

В нулевую позицию приемника (регистр SSE) записывается второе число из приемника, в первуюпозицию - второе число из источника (регистр SSE или 128-битная переменная), во вторую позицию - третье (старшее) число приемника, в третью (старшую) позицию - третье (старшее) число источника.

Команда

Назначение

Процессор

UNPCKLPS приемник, источник

Распаковать младшие вещественные числа

PHI

В нулевую позицию приемника (регистр SSE) записывается нулевое (младшее) число из приемника, в первую позицию - нулевое (младшее) число из источника (регистр SSE или 128-битная переменная), во вторую позицию — первое число приемника, в третью (старшую) позицию - первое число источника.

Команды управления состоянием

Команда

Назначение

Процессор

LDMXCSR источник

Загрузить регистр MXCSR

PIII

Помещает значение источника (32-битная переменная) в регистр управления и состояния SSE MXCSR.

Команда

Назначение

Процессор

STMXCSR приемник

Сохранить регистр MXCSR

PIII

Помещает значение регистра MXCSR в приемник (32-битная переменная).

Команда

Назначение

Процессор

FXSAVE приемник

Сохранить состояние FPL), MMX, SSE

PIII

Сохраняет содержимое всех регистров FPU, ММХ и SSE в приемнике (512-

байтовая область памяти).

Команда

Назначение

Процессор

FXRSTOR источник

Восстановить состояние FPU, MMX, SSE

PIII

Восстанавливает содержимое всех регистров FPU, ММХ и SSE из источника (512-байтовой области памяти, заполненной командой FXSAVE). Формат области памяти, используемой командами FXSAVE/FXRSTOR для Pentium III, имеет следующий вид:

байты 1-0: FCW

байты 3-2: FSW

байты 5-4: FTW

байты 7-6: FOP

байты И-8: FTP

байты 13-12: FCS

байты 19-16: FDP

байты 21-20: FDS

байты 27-24: MXCSR

байты 41-32: STO или ММО

байты 57-48: ST1 или ММ1

байты 73-64: ST2 или ММ2

байты 89-80: ST3 или ММЗ

байты 105-96: ST4 или ММ4

байты 121-112: ST5 или ММ5

байты 137-128: ST6 или ММ6

байты 153-144: ST7 или ММ7

байты 175-160: ХММО

байты 191-176: ХММ1

байты 207-192: ХММ2

байты 223-208: ХММЗ

байты 239-224: ХММ4

байты 255-240: ХММ5

байты 271-256: ХММ6

байты 287-272: ХММ7

Остальные байты зарезервированы.

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

Команда

Назначение

Процессор

MASKMOVQ источник, маска

Запись байтов минуя кэш

PHI

Данные из источника (регистр ММХ) записываются в память по адресу DS:EDI (или DS:DI). При этом старший бит каждого байта в маске (регистр ММХ) определяет, записывается ли соответствующий байт источника в память или нет. То есть бит 7 маски разрешает запись нулевого байта (битов 7-0) источника и т. д. Если байт не записывается, соответствующий байт в памяти обнуляется. Эта команда введена для того, чтобы по возможности уменьшить загрязнение кэша при работе с потоками данных, типичными для SSE, если основным типом данных является байт.

Команда

Назначение

Процессор

MOVNTQ приемник, источник

Запись 64 бит минуя кэш

PHI

Содержимое источника (регистр ММХ) записывается в приемник (64-битная переменная в памяти), сводя к минимуму загрязнение кэша.

Команда

Назначение

Процессор

MOVNTPS приемник, источник

Запись 128 бит минуя кэш

PIII

Содержимое источника (регистр SSE) записывается в приемник (128-битная

переменная в памяти), сводя к минимуму загрязнение кэша.

Команда

Назначение

Процессор

PREFETCHTO адрес

PREFETCHT1 адрес

PREFETCHT2 адрес

PREFETCHNTA адрес

Перенести данные в кэш ТО

Перенести данные в кэш Т1

Перенести данные в кэш Т2

Перенести данные в кэш NTA

PIII

PIII

PIII

PHI

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

  •  TO - поместить данные в кэш всех уровней;
  •  T1 - пометить данные в кэш всех уровней, кроме нулевого;
  •  Т2 — поместить данные в кэш всех уровней, кроме нулевого и первого;
  •  NTA - поместить данные в кэш для постоянных данных.

Реализация этих команд может отличаться для разных процессоров, и процессор не обязан их выполнять - команды рассматриваются только как подсказки. Объем данных, переносимых в кэш, также может различаться, но не должен быть меньше 32 байт.

Команда

Назначение

Процессор

SFENCE

Защита записи

PIII

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

4. Определение поддержки SSE

Перед тем как начинать работать с расширениями SSE (согласно документации Intel), нужно убедиться, что выполнены следующие три условия:

1. Бит 2 регистра CRO (эмуляция сопроцессора) должен быть равен нулю.

2. Бит 9 регистра CR4 (поддержка команд FXSAVE/FXRSTOR) должен быть

равен 1.

3. Бит 25 регистра EDX после команды CPUID (поддержка SSE) должен быть

равен 1.

5. Исключения

Особые ситуации при выполнении команд SSE вызывают новое системное исключение #XF (INT 19), обработчик которого может прочитать содержимое регистра MXCSR, чтобы определить тип исключения и выполнить соответствующие действия. Кроме того, команды SSE могут вызывать и обычные системные исключения - #UD (неопределенная команда), #NM (расширение отсутствует), #SS (переполнение стека), #GP (общая ошибка защиты), #PF (ошибка страничной защиты), #АС (невыровненное обращение к памяти).

Собственные исключения, вызываемые командами SSE и отраженные при помощи флагов в регистре MXCSR, - это:

  •  #1 — невыполнимая команда (вызывается перед выполнением команды);
  •  #Z - деление на ноль (вызывается перед выполнением команды);
  •  #D - денормализованный операнд (вызывается перед выполнением команды);
  •  #О - переполнение (вызывается после выполнения команды);
  •  #U - антипереполнение (вызывается после выполнения команды);
  •  #Р - потеря точности (вызывается после выполнения команды).

Практическая часть.

Замечание. Так как технология SSE появилась только в процессоре Pentium III, то требуются новые версии компилятора, поддерживающего соответствующие инструкции. Таким компилятором является, например, Visual Studio 2010, т.к. VS 6.00 была выпущена в 1997 году. Поэтому эту лабораторную работу необходимо выполнить в Visual Studio 2010.

Пример №1. Найти сумму 2-х векторов.

Решение.

Задания для самостоятельной работы

  1.  Ознакомьтесь с теоретическим материалом.
  2.  Разберите все примеры из практической части лабораторной работы, т.е. наберите и просмотрите их работу.
  3.  Выполните индивидуальные задания.

Индивидуальные варианты

№1. Составить программу, которая находит разность 2-х векторов (начальные значения вводим самостоятельно).




1. КУРСОВАЯ РАБОТА на тему Роль Интернет рекламы в индустрии туризма Автор- студент 3 курса 311 гр
2. Связям с общественностью
3. Проблема гуманизма в пьесе Горького На дне
4. 1ап0 ~ А10а~тімділік А10а п0 ~ А14тж0~ А19та0б А2к к10м А2кк10м А3ж ~7~ А3ж~7~ А4
5. темам охранной сигнализации контроля доступа и телевизионного наблюдения.
6. М. Давидов В.М. Малахова О
7. Преступления против здоровья населения и общественной нравственности В Конституции провозглашаются ва
8. Реферат- Административная реформа в Российской Федерации
9. Артефакт http---ndrey
10. Документоведение