Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Лекции ЦЭВМруский вариант11.doc
Скачиваний:
205
Добавлен:
07.02.2016
Размер:
15.82 Mб
Скачать

§22.4. Типы данных

МMX поддерживает данные в упакованном формате. Это означает, что каждый 64-битовый регистр MMX может интерпретироваться как:

1. Восемь байтов;

2. Четыре слова;

3. Два двойных слова;

4. Одна 64-разрядная переменная. То, как интерпретируется конкретный регистр, отлично отображается в мнемонике команды. К примеру, инструкция PADDB складывает два операнда, полагая, что они являются набором байтов, a PADDW считает операнды набором слов.

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

Умножение

PMULHW

PMULLW

Вычитание

PSUBB

PSUBD

PSUBSB

PSUBSW

PSUBUSB

PSUBUSW

PSUBW

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

проверка равенства

PCMPEQB PCMPEQD

PCMPEQW сравнение PCMPGTB PCMPGTD

PCMPGTW

команды упаковки/распаковки

PUNPCKHBW PUNPCKHDQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD PACKSSDW PACKSSWB PACKUSWB

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

PAND

PANDN

POR

PXOR

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

данных

MOVD

MOVQ

Команда

сдвига

Логический сдвиг

Влево

PSLLD

PSLLQ

PSLLW

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

Арифметический сдвиг вправо PSRAD PSRAW

Сложение PADDB

PADDD

PADDSB PADDUSB

PADDSW PADDUSW

Логический сдвиг вправо PSRLD PSRLQ

PADDW

Сложение и умножение

Команды, очищавшие регистры

PMADDWD

EMMS

§22.5. Краткое описание команд

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

MOVD

Формат MOVD mmregl, reg32/mem32

MOVD reg32/mem32, mmregl Описание

Инструкция MOVD пересылает 32 младших бита регистра ММХ в регистр общего назначения или память Или же из регистра общего назначения/памяти в регистр ММХ В последнем случае, кроме собственно пересылки, биты 32-64 соответствующего регистра обнуляются

PADDB

Формат

PADDB mmregl, mmreg2/mem64 Описание

Складывает восемь 8-разрядных чисел операнда источника (ММХ - регистра или 64-разрядного поля памяти) и восемь 8-разрядных чисел операнда-получателя (регистра ММХ) В случае переполнения полученные значения заворачиваются (то есть 255+10=9) без установки флага переноса при подсчете последующих байтов Результат помещается в операнд-получатель

PADDSW

Формат PADDSW mmregl, mmreg2/mem64

Описание

Складывает четыре 16-битных числа со знаком операнда источника (регистра ММХ или 64-разрядного поля памяти) и четыре соответствующих значения операнда-получателя (регистра ММХ) Если сумма каких-либо двух из них менее чем -32768 (8000h), то результат сложения -32768 (8000h) Аналогично в случае, когда сумма превышает 32767 (7FFFh), возвращаемый результат — 32767 (7FFFh) Результат заносится в операнд-получатель Следующий список возможных ситуаций помогает понять, как происходит сложение.

Если число D250h (-11696) складывается с 88Q7h (-30713), то получаемый результат 8000h (-32768) — минимально возможное 16-разрядное число.

Если число 5321h (+21281) прибавляется в ЕС22h (-5086), то получаемый результат 3F43h (+ 16195).

Сумма 16-разрядного числа7007П (+28679) и OFF9h (+4098) дает результат 7PFFh (+32767) — максимально возможное положительное число.

Если к FFFFh(-1) прибавить FFFFh(-1), то получим FFFEh (-2)/

Описание:

Инструкция PAND выполняет логическую операцию «и» над операндами Результат заносится в операнд-получатель Если соответствующие биты источника и получателя равны единице, то значение итогового бита единица Эта команда может использоваться для распаковки упакованных переменных при помощи маски, полученной от инструкций сравнения PCMPEQ и PCMPGT

PCMPEQB

Формат :

PCMPEQB mmregl, mmreg2 /mem64

Описание

Сравнивает источник с получателем, рассматривая операнды как упакованные байты. Если биты операндов эквивалентны, то все биты 8-разрядной части получателя устанавливаются равными единице, в противном случае они обнуляются.

PCMPGTD

Формат

PCMPGTB mmregl, mmreg2/mem64

Описание

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

PACKUSWB

Формат

PACKUSWB mmregl, mmreg2/mem64 Описание

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

если слово содержит отрицательное число, то соответствующий ему байт будет равен нулю,

если значение слова превышает 255, то соответствующий ему байт будет равен 255

Рис. А Команда PACKUSWB

PAND

Формат

PAND

mmregl,

inmreg2/mem64

Команды ММХ имеют такой формат:

инструкция mmreg1, mmreg2/mem64

То есть источником может быть как переменная памяти, так и регистр ММХ. А целевым может быть только регистр ММХ, К тому же MOVD и MOVQ допускают пересылки из регистров ММХ в память, Одним из первых вопросов у меня был, зачем так много команд? Ведь количество операций не так уж и велико... Дело в том, что название команды формируется из двух частей. Первая часть говорит о том, что она делает (MOV, PSUB, PADD). Вторая же говорит о том, как она интерпретирует операнды. Рассмотрим команду PACKUSWB. Первая часть строкиPACK — указывает, что будем что-то упаковывать. Вторая же USWBв свою очередь разбивается на двеUS и WB. US говорит о том, что результат будет беззнаковым с сатурацией4', WB же указывает, что источник упакованные слова, результат упакованные байты. Благодаря такой записи смысл инструкции схватывается «на лету», по этой же причине и команд так много. Приведем полный перечень мнемоник:

Р— упакованные данные (Packed data)

В— байт (byte)

W— слово (word)

D— двойное слово (DoubleWord)

Q— 64-битовая переменная (QuadWord)

S— знаковая (Signed)

U— беззнаковая (Unsigned)

SS— знаковая с сатурацией (Signed Saturation)

US—беззнаковая с сатурацией (Unsigned Saturation)

Итак, появились процессоры с ММХ ряд процессоров Intel—Pentium и новый процессор AMD Кб. Допустим, мы их купили, и они уже исправно на нас работают. Будут ли мультимедийные приложения работать быстрее? Ответ да. Благодаря новому набору команд ММХ? Ответ - нет. Дело в том, что процессор Intel-Pentium с технологией ММХ отличается от своего собрата без таковой не только набором команд, но и тем, что у него:

вдвое больший кэш первого уровня (32Кб),

улучшенный блок предсказания условных переходов,

углубленный конвейер.

За счет этого производительность Pentium ММХ возросла на стандартных тестах на 10-20%. Когда же преимущества станут ощутимы в полной мере? Увы не мгновенно. Действительно, факт появления этой технологии на свет не решает наших проблем. Нужно подождать, пока не раскачаются программисты и не напишут приложения, использующие команды, ММХ. Очевидно, что рано или поздно это произойдет. Вопрос только, когда.

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

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

К чему же мы пришли? Очевидно, что технология ММХ это шаг вперед. Аббревиатура ММХ уже стала символом революции. Недаром корпорация Intel пыталась в судебном порядке запретить ее использовать AMD (впрочем, безуспешно). ММХ - технология прекрасно вписывается в существующую архитектуру микропроцессора. Сохраняется полная совместимость с уже написанными программными продуктами. Хотя наряду с этим видны и ограничения, заложенные в нее, которые со временем нужно будет преодолевать.

Соседние файлы в папке КС-ZAO