Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК МПСС.doc
Скачиваний:
38
Добавлен:
09.11.2019
Размер:
11 Mб
Скачать

Лабораторная работа 3.

ВЫЧИСЛЕНИЯ с Использованием ММХ регистров

Цель работы: Написать программу, для исследования возможности ускорения вычислительного процесса при использовании ОКМД команд (MMX).

Краткие теоретические сведения

Типы данных

Основными типами данных для набора инструкций IA MMX являются: упакованный целочисленный с фиксированной запятой, где несколько чисел сгруппированы в одно 64-х разрядное значение. Эти 64-х разрядные значения загружаются в регистры ММХ. Позиция десятичной точки является подразумеваемой, что обеспечивает максимальную гибкость. Поддерживаются знаковые и беззнаковые числа: байт, слово, двойное и учетверенное слово (byte, word, doubleword and quadword).

Есть четыре ММХ типа:

  1. упакованный байт – 8 байт, упакованных в одно 64-битное значение;

  2. упакованное слово – 4 слова, упакованных в одно 64-битное значение;

  3. упакованное двойное слово – два 32-х битных двойных слова, упакованных в одно 64-битное значение;

  4. учетверенное слово - одно 64-битное значение.

Например, цвет пикселя обычно представляется 8-битным целым (байтом). Используя технологию ММХ можно упаковать 8 пикселей в одно 64-ти битное значение и загрузить в регистр MMX. Затем команды MMX будут сразу обрабатывать все 8 пикселей изображения.

Совместимость

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

Инструкции сопроцессора, отвечающие за сохранение/восстановление состояния FPU, также обрабатывают и состояние расширения ММХ. Т.о. ММХ не добавило новых исключений или состояний процессора.

Инструкции

Инструкции ММХ охватывают несколько областей:

  1. базовые арифметические операции, такие как add – сложение, sub – вычитание, mul – умножение и mul-add – умножение-сложение;

  2. операции сравнения;

  3. операции преобразования типов, упаковка/рапаковка данных;

  4. логические операции типа AND, AND NOT,OR и XOR;

  5. операции сдвига;

  6. операции пересылки данных (MOV)

Арифметические и логические инструкции поддерживают различные типы упакованных данных. С учетом этого все расширение ММХ включает 57 кодов операций.

Краткий обзор набора инструкций MMX™

Инструкции и соответствующие мнемоники в таблице сгруппированы по категориям.

Если инструкция поддерживает тип данный байт (B), слово (W), двойное слово (DW) или учетверенное слово (QW), соответствующие аббревиатуры указаны в квадратных скобках. Например, для базовой мнемоники PADD (packed add) возможны следующие варианты: PADDB, PADDW и PADDD.

Категория

Мнемоника

Описание

Арифметические операции

PADD[B,W,D]

Сложение (Add with wrap-around on [byte, word, doubleword])

PADDS[B,W]

Сложение знаковое с насыщением (Add signed with saturation on [byte, word])

PADDUS[B,W]

Сложение беззнаковое с насыщением (Add unsigned with saturation on [byte, word])

PSUB[B,W,D]

Вычитание (Subtract with wrap-around on [byte, word, doubleword])

PSUBS[B,W]

Вычитание знаковое с насыщением (Subtract signed with saturation on [byte, word])

PSUBUS[B,W]

Вычитание беззнаковое с насыщением (Subtract unsigned with saturation on [byte, word])

PMULHW

Packed multiply high on words

PMULLW

Packed multiply low on words

PMADDWD

Умножение упакованных байт и суммирование полученных пар слов (Packed multiply on words and add resulting pairs)

Операции сравнения

PCMPEQ[B,W,D]

Сравнение упакованных на равенство (Packed compare for equality [byte, word,doubleword])

PCMPGT[B,W,D]

Сравнение упакованных на больше (Packed compare greater than [byte, word, doubleword])

Преобразование разрядности

PACKUSWB

Упаковка слов в байты (беззнаковое с насыщением)

Pack words into bytes (unsigned with saturation)

PACKSS[WB,DW]

Упаковка [слов в байты, двойных слов в слова] (знаковое с насыщением)

Pack [words into bytes, doublewords into words] (signed with saturation)

PUNPCKH [BW,WD,DQ]

Распаковка старших [байт, слов, двойных слов] из ММХ регистра.

Unpack (interleave) high-order [bytes, words, doublewords] from MMX register

PUNPCKL [BW,WD,DQ]

Распаковка младших [байт, слов, двойных слов] из ММХ регистра.

Unpack (interleave) low-order [bytes, words, doublewords] from MMX register

Логические

PAND

Битовый (bitwise) AND

PANDN

Битовый (bitwise) AND NOT

POR

Битовый (bitwise) OR

PXOR

Битовый (bitwise) XOR

Сдвиги

PSLL[W,D,Q]

Логический сдвиг влево упакованных [слов, двойных слов, учетверенного слова] на значение указанное в ММХ регистре или в команде

Packed shift left logical [word, doubleword, quadword] by amount specified in MMX register or by immediate value

PSRL[W,D,Q]

Логический сдвиг вправо упакованных [слов, двойных слов, учетверенного слова] на значение указанное в ММХ регистре или в команде

Packed shift right logical [word, doubleword, quadword] by amount specified in MMX register or by immediate value

PSRA[W,D]

Арифметический сдвиг вправо упакованных [слов, двойных слов, учетверенного слова] на значение указанное в ММХ регистре или в команде

Packed shift right arithmetic [word, doubleword] by amount specified in MMX register or by immediate value

Пересылки данных

MOV[D,Q]

Пересылка [двойного или учетверенного] слова в/из ММХ регистра

Move [doubleword, quadword] to MMX register or from MMX register

Управление состоянием FPU и MMX

EMMS

Сброс состояния FPU, переключение между ММХ и FPU режимами

Empty MMX state

Примеры инструкций

В этом разделе кратко описываются несколько примеров ММХ инструкций. Для примера взяты операции с 16-битными словами, однако большинство этих операций существуют и для байт и двойных слов.

Пример 1 иллюстрирует сложение упакованных слов без насыщения. Вычисляется четыре сумма для восьми 16-битных элементов, все они выполняются независимо и параллельно. В данном случае результат самого правого сложения превышает значение, которое может быть представлено 16-ю битами, т.е. происходит переполнение. Результатом сложения FFFFh + 8000h будет 17-битное число. 17-й бит теряется из-за усечения результата, соответственно получается число 7FFFh.

Пример 1 - PADD[W]: Сложение без насыщения

В примере 2 показано сложение упакованных слов с беззнаковым насыщением. Используются те же данные, что и в предыдущем примере. Самое правое сложение дает результат, не помещающийся в 16 бит, следовательно, происходит насыщение. Термин насыщение означает, что при переполнении сложения (или вычитания) результат ограничен максимальным (или минимальным) числом, представимым в данной разрядности. Для беззнаковых 16-битных слов максимальным и минимальным будут FFFFh и 0000h, для знаковых это 7FFFh и 8000h соответственно. Насыщение может оказаться важным при работе с пикселями изображения, когда переполнене может вызвать появление точек черного цвета.

Пример 2 - PADDUS[W]: Сложение с бззнаковым насыщением

Пример 3 показывает работу инструкции PMADDWD, выполняющую умножить-сложить операцию. Эта операция часто используется в алгоритмах обработки сигналов. Эта команда меняет разрядность результата – ее операнды имеют размер слова (16 бит), а результат двойного слова (32 бита).

Пример 3 - PMADDWD: 16b x 16b -> 32b Операция умножение-сложить

Пример 4 иллюстрирует параллельное сравнение упакованных данных. Команда сравнивает четыре пары 16-битных слов. В регистр результата заноситься true/истина (FFFFh) или false/ложь (0000h) отдельно для каждого сравнения. На рисунке можно видеть сравнение по условию «больше» ("greater than"). Эта команда не изменяет флагов процессора.

Пример 4 - PCMPGT[W]: Параллельные сравнения

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

Последний пример (пример 5) показывает механизм работы инструкции упаковки (сокращения разрядности). На вход подаются четыре 32-битных двойных слова в двух различных регистрах, которые упаковываются в четыре 16-битных слова в одном регистре. Если значение исходного операнда (например, b1) превосходит разрядность результата (b1′), преобразование выполняется с насыщением.

Пример 5 - PACKSS[DW]: Инструкция упаковки

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

Задание

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

Допустимая среда разработки – Borland C++ Builder5.0, Borland C++ Builder6.0, Microsoft Visual C++6.0, Microsoft Visual C++7.0 и т.д.

Порядок выполнения работы

Написать программу, реализующую поставленную задачу.

Откомпилировать программу.

Запустить программу. Убедиться в ее корректной работе.

Уметь объяснить работу программы.

Оформить отчет.

Содержание отчета

Ф.И.О., группа, номер, название лабораторной работы и название дисциплины.

Цель работы.

Краткое описание алгоритма работы программы.

Результат работы программы.

Листинг программы.

Выводы.

Рекомендуемая литература

В. Юров “Assembler. Учебник”’;

В. Юров “Assembler. Краткий справочник команд”;

MSDN.