Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ, СИСТЕМЫ И СЕТИ.doc
Скачиваний:
32
Добавлен:
06.11.2018
Размер:
2.94 Mб
Скачать

3.4. Система команд sse-расширения

Набор SSE-расширения включает 70 команд. Их подробное описание можно найти в фирменном руководстве Intel. Арифметические команды могут выполняться в двух контекстах: скалярном и параллельном. Параллельные арифметические операции обрабатывают одновременно 4 двойных слова и имеют в своей мнемонике суффикс ps, а скалярные - обрабатывают только младшие 32-разрядные двойные слова упакованных операндов, не затрагивая при этом три старших двойных слова. Исключение составляют некоторые команды скалярной пересылки данных. Мнемоническое обозначение этих команд включает суффикс ss.

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

Команды передачи данных.

Включают восемь команд, позволяющих выполнять операции над 128-, 64- и 32-разрядными операндами.

Команды movaps (movups) - пересылка выровненных (невыровненных) по 16-байтовой границе 128-разрядных операндов. В качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти, выходным операндом может служить один из ХММ-регистров. Если адрес ячейки памяти не будет выровнен по 16-байтовой границе, то по команде movaps произойдет исключение общей защиты.

Команда movhps - пересылка невыровненных 64 бит из входного операнда в выходной. Один из операндов обязательно должен быть ХММ-регистром, в качестве второго может выступать 64-разрядная ячейка памяти. Пересылаются только старшие 64 бит входных операндов. Младшие 64 бит обоих операндов не изменяются. Если данные передаются из ХММ-регистра, то пересылке подлежат только старшие 64 бит. Команда не требует выравнивания по 16-байтовой границе адреса ячейки памяти.

Команды movhlps (movlhps) - пересылка невыровненных 64 бит из входного операнда в выходной. Оба операнда должны находиться в ХММ-регистрах. Пересылаются только старшие (младшие) 64 бит входных операндов. В результате выполнения этой команды изменяются младшие (старшие) 64 бит регистра-приемника. Схема выполнения команд показана на рис. 3.9.

0

ХММ1

63

127

0

ХММ0

63

127

Рис. 3.9. Выполнение команд пересылок movhlps и movlhps

Команда irovlps - пересылка невыровненных 64 бит из входного операнда в выходной. Один из операндов обязательно должен быть ХММ-регистром, в качестве второго может выступать 64-разрядная ячейка памяти. Пересылаются только младшие 64 бит входных операндов. Старшие 64 бит обоих операндов не изменяются. Если данные передаются из ХММ-регистра, то пересылке подлежат только младшие 64 бит. Команда не требует выравнивания по 16-байтовой границе адреса ячейки памяти.

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

Команда movss - пересылка 32 младших битов из источника в приемник, при этом один из операндов должен быть ХММ-регистром, а второй - 32-разрядной ячейкой памяти. При выполнении операции пересылки из памяти младшие 32 бита помещаются в младшие 32 разряда ХММ-регистра. Если выполняется пересылка из ХММ-регистра, то выбираются младшие 32 разряда регистра, остальные разряды не изменяются.

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

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

При выполнении параллельных операций (мнемокоды с суффиксом ps) в качестве входного операнда (операнда-источника) выступают один из ХММ-регистров или 128-разрядная ячейка памяти. Выходным операндом (операндом-приемником) является один из ХММ-регистров.

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

Таблица 3.2

Операция

Параллельная

Скалярная

Сложение

addps

Addss

Вычитание

subps

Subss

Умножение

mulps

Mulss

Деление

divps

Divss

Извлечение корня

sqrtps

Sqrtss

Нахождение максимума

maxps

Maxss

Нахождение минимума

minps

Minss

Нахождение обратного значения (1/x)

repps

Repss

Нахождение обратного значения корня

rsqrtps

Rsqrtss

Мнемокоды арифметических команд представлены в табл. 3.2 и табл. 3.3.

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

Таблица 3.3

Операция

Параллельная

Скалярная

Сравнение – условие «равно»

cmpeqps

cmpeqss

Сравнение – условие «меньше»

cmpltps

cmpltss

Сравнение – условие «меньше или равно»

cmpleps

cmpless

Сравнение – условие «неупорядоченности»

cmpunordps

cmpunordss

Сравнение – условие «не равно»

cmpneqps

cmpneqss

Сравнение – условие «не меньше»

cmpnltps

cmpnltss

Сравнение – условие «не меньше или равно»

cmpnleps

cmpnless

Сравнение – условие «упорядоченности»

cmpordps

cmpordss

Скалярное сравнение с установкой eflags

-

comiss

Неупорядоченное сравнение с установкой eflags

-

ucomiss

Две последние команды в табл 3.3 comiss и ucomiss имеют два операнда и выполняют скалярное сравнение младших 32-разрядных операндов. Особенностью этих команд является то, что содержимое обоих операндов после выполнения операции сравнения остается неизменным, а в регистре флагов EFLAGS процессора определенным образом устанавливаются флаги ZF, PF и CF, а флаги OF, SF и AF сбрасываются в 0. В качестве входных операндов обеих команд могут выступать ХММ-регистры или 32-разрядные переменные в памяти, выходными операндами могут быть только ХММ-регистры. Команды ucomiss и comiss отличаются тем, что генерируют исключительные ситуации для различных форматов не-чисел (NAN).

Логические команды

Все логические команды являются параллельными и позволяют выполнять операции логического И, ИЛИ, И-НЕ, исключающего ИЛИ над отдельными парами битов операндов. Каждая команда имеет два операнда: в качестве входного операнда (источника) могут выступать ХММ-регистр или 128-разрядная ячейка памяти, а в качестве выходного (приемника) - ХММ-регистр. После выполнения команды содержимое операнда-источника не изменяется, а результат помещается в операнд-приемник

Команда andps - параллельная операция логического И над парами битов операнда-источника и операнда-приемника.

Команда andnps - параллельная операция логического И-НЕ над парами битов операнда-источника и операнда- приемника.

Команда orps - параллельная операция логического ИЛИ над парами битов операнда-источника и операнда-приемника.

Команда xorps - параллельная операция логического исключающего ИЛИ над парами битов операнда-источника и операнда-приемника.

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

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

Команда cvtps2pi - параллельное преобразование двух младших упакованных 32- 32-разрядных чисел с плавающей точкой в коротком формате в два 32-разрядных целых числа. Команда имеет два операнда. В качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти. Выходным операндом может служить один из регистров ММХ. На результат преобразования влияет установка битов поля rc, определяющего режим округления, регистра управления-состояния (MXCSR).

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

Команда cvttps2pi - параллельное преобразование двух младших упакованных 32-разрядных чисел с плавающей точкой в коротком формате в два 32-разрядных целых числа путем отсечения дробной части исходных операндов. Команда имеет два операнда. В качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти. Выходным операндом может служить один из ММХ-регистров. Установка битов поля rc на результат не влияет.

Команда cvttss2si - скалярное преобразование младшего 32-разрядного числа с плавающей точкой в коротком формате в 32-разрядное целое число путем отсечения дробной части входного операнда. Команда имеет два операнда. В качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти, а выходным операндом может служить один из 32-разрядных регистров общего назначения. Установка битов поля rc.

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

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

Специальные команды.

Включают три команды перемещения, четыре команды управления состоянием и три команды управления кэшированием.

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

Команда перемещения shufps – выполняет параллельное перемещение 32-разрядных упакованных операндов в соответствии с заданной маской. Команда имеет три операнда: входной, выходной и маску. Маска представляет собой непосредственное 8-разрядное значение, задающее порядок перемещения операндов. Младшие 4 бита маски указывают номера двух упакованных чисел приемника, которые становятся младшими упакованными значениями результата, а старшие 4 бита - номера упакованных чисел источника, которые становятся старшими упакованными значениями результата.

Рис. 3.10. Выполнение команды перемещения shufps XMM0,XMM1,27h

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

Команда управления состоянием stmxcsr – сохраняет содержимое регистра управления-состояния в 32-разрядной ячейке памяти, которая является единственным операндом.

Команда управления состоянием ldmxcsr – загружает регистр управления-состояния содержимым 32-разрядной ячейки памяти, которая является единственным операндом.

Команда управления состоянием fxsave - сохраняет состояние ММХ- и SSE-расширения в область памяти размером в 512 байт. В качестве операнда выступает адрес области памяти.

Команда управления состоянием fxrstor - загружает сохраненное состояние ММХ- и SEE-расширения из области памяти размером 512 байт. В качестве операнда выступает адрес области памяти, который должен быть выровнен по 16-байтовой границе.

Команда управления кэшированием maskmovq – выполняет выборочное сохранение в памяти байтов упакованных данных ММХ-регистра. В качестве операнда-источника используется один из ММХ-регистров, а операндом-приемником служит область памяти, адрес которой задан в регистре EDI. Маска указывает, какие байты будут сохранены в памяти, и формируется из старших разрядов каждого байта, находящегося в ММХ-регистре.

Команда управления кэшированием movntq – записывает в память, минуя кэш, целочисленные упакованные данные в формате ММХ. Операндом-источником служит ММХ-регистр, а операндом-приемником - 64-разрядная ячейка памяти.

Команда управления кэшированием movnps - записывает в память, минуя кэш, упакованные числа с плавающей запятой в КВФ формате. Операндом-источником служит ХММ-регистр, а операндом-приемником - 128-разрядная ячейка памяти, адрес которой должен быть выровнен по 16-байтовой границе.

Дальнейшим прогрессом SSE-технологии явилось SSE2-расширение, добавившее 144 новых команды, которые позволили оперировать с такими типами данных как:

• упакованные и скалярные числа с плавающей запятой в КВФ формате;

• упакованные и скалярные числа с плавающей запятой в ДВФ формате;

• упакованные и скалярные целые числа размером 128 бит.

Эта технология предназначена для разработки приложений трехмерной графики, обработки сигналов, кодирования и декодирования, распознавания речи и т. п. Кроме того, SSE2-команды позволяют:

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

• работать с данными различной размерности: байтом, словом, двойным словом, учетверенным словом и двойным учетверенным словом.

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

• быстрое преобразование вещественного числа в целое (соответствующая

команда fisttp заменяет семь «обычных» команд);

• сложные арифметические вычисления (команды addsubps, addsubpd, movsldup, movshdup, movddup);

• кодирование видео (команда 1ddqu);

• обработка графики (команды haddps, hsubps, haddpd, hsubpd);

• синхронизация потоков (команды monitor, mwait).

Детальное описание новых команд можно найти в фирменных источниках Intel.

Контрольные вопросы

  1. В какой модели процессора объединились ЦП и АП в одном кристалле?

  2. Объясните главное назначение ММХ-расширения. Какие новые регистры данных добавились для его реализации?

  3. Чем отличаются программные модели Pentium II и Pentium IV?

  4. Какие форматы вещественных чисел доступны для параллельной обработки в SSE и SSE2 расширениях команд?

  5. Что нового дало совершенствование технологии с введением SS3-расширения?

  6. В чем сущность и каково назначение команд упаковки и распаковки?

  7. Какие операции выполняются быстрее за счет удвоения внутренней тактовой частоты ЦП?

  8. В чем отличие ситуации кэш-промаха и кэш-попадания?

  9. Обратная или прямая запись в основную память используется в ЦП Pentium IV и почему?

  10. Объясните особенности пакетно-сетевой архитектуры ЦП Pentium IV.

  11. Сколько регистров данных образуют программную модель ЦП Pentium IV?

  12. В чем заключается назначение регистра управления-состояния MXCSR?

  13. Что происходит при «переполнении» по команде paddusw MM0,MM1?

  14. Поясните назначение кэш-памяти микрокоманд ЦП.

  15. Перечислите команды управления кэшированием и объясните их предназначение.

  16. Сколько уровней внутренней кэш-памяти включает Pentium IV и как они распределяются между обрабатываемыми данными?

  17. Почему увеличение числа стадий конвейера позволяет увеличить тактовую частоту работы ЦП?

  18. Каков размер блока регистров расширения и для чего эти регистры служат?

  19. Что является задачей блока трассировки и предсказания ветвлений и как он работает?

  20. Объясните суть технологии удвоения внутренней тактовой частоты (Rapid Execution Engine).

  21. Для чего служит кэш-память микрокоманд и что дает ее использование?

  22. В чем заключаются основные отличия архитектуры Pentium MMX и Pentium III?

  23. Дайте сравнительную характеристику ЦП Pentium III и Pentium IV.

  24. Объясните назначение команд упаковки и распаковки и приведите примеры их использования.

  25. Поясните как выполняется умножение по команде ppaddwd MM0,MM1?

  26. На какие типы данных указывает каждый из суффиксов b, w, d, q в ММХ-командах?

  27. Какие действия выполняются по команде pandn (логическое И-НЕ)?

  28. К какому расширению относится команда punpckhbw?

  29. Сколько данных одновременно могут обрабатывать параллельные арифметические операции?

  30. Какие суффиксы имеют мнемокоды скалярных и параллельных операций?