Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Параллельные вычисления лекции.doc
Скачиваний:
67
Добавлен:
10.02.2016
Размер:
979.46 Кб
Скачать

Лекция 10.

Пример 3. Этот пример представляет ключевую команду умножения с накоплением, которая является базовой для многих алгоритмов цифровой обра-

ботки сигналов: суммирования парных произведений, умножения матриц, бы-

строго преобразования Фурье и т.д. Эта команда − упакованное умножение со

сложением PMADD.

Команда PMADD использует в качестве операндов 16-разрядные числа и вырабатывает 32-разрядный результат. Производится умножение четырех пар чисел и получаются четыре 32-разрядных результата, которые затем попарно

складываются, вырабатывая два 32-разрядных числа. Этим и оканчивается вы-

полнение PMADD.

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

Pmadd (Packed Multiply Add)

Пример 4. Следующий пример иллюстрирует операцию параллельного сравнения. Сравниваются четыре пары 16-разрядных слов, и для каждой пары вырабатывается признак “истина” (FFFFh) или “ложь” (0000h).

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

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

Greate Then

Ветвление, основанное на результате сравнения входных данных, обыч-

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

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

раллелизмом ММХ-команд является существенной особенностью технологии

ММХ.

Пример 5. Пример иллюстрирует работу команды упаковки. Она принимает четыре 32-разрядных значения и упаковывает их в четыре 16-разрядных значения, выполняя операцию насыщения, если какое-либо 32-разрядное входное значение не укладывается в 16-разрядный формат результата.

Имеются также команды, которые выполняют противоположное действие

— распаковку, например, то есть преобразуют упакованные байты в упакован-

ные слова.

32

Эти команды особенно важны, когда алгоритму нужна более высокая точ-

ность промежуточных вычислений, как, например, в цифровых фильтрах при

распознавании образов.

Такой фильтр обычно требует ряда умножений коэффициентов на соответ

ствующие значения пикселов с последующей аккумуляцией полученных значе-

ний. Эти операции нуждаются в большей точности, чем та, которую может

обеспечить 8-разрядный формат для пикселов. Решением проблемы точности

является распаковка 8-разрядных пикселов в 16-разрядные слова, выполнение

расчетов в 16-разрядной сетке и затем обратная упаковка в 8-разрядный формат

для пикселов перед записью в память или дальнейшими вычислениями.

Пример 6. Пример на умножение матриц (Matrix Multiply) связан с 3D-

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

над 3D-объектами заключается в многократном умножении матрицы размером

4х4 на четырехэлементный вектор. Вектор имеет значения X, Y, Z и информа-

цию о коррекции перспективы для каждого пиксела. Матрица 4х4 используется

для выполнения операций вращения (rotate), масштабирования (scale), переноса

(translate) и коррекции информации о перспективе для каждого пиксела. Эта

матрица 4х4 используется для многих векторов.

- Rotate & Scale -Translate -Perspective

Приложения, которые работают с 16-разрядным представлением исходных данных, могут широко использовать команду PMADD. Для одной строки матрицы нужна одна команда PMADD, для четырех строк − четыре команды. Более подробный подсчет показывает, что умножение матриц 4х4 требует 28 команд для технологии ММХ, а без нее − 72 команды

Расширение SSE

Технология MMX имеет ряд расширений, называемых SSE (Streaming SIMD Extensions). SSE - это расширение инструкций процессора для потоковой обработки в режиме SIMD (Single Instruction Multiple Data), т.е. когда требуется

применять однотипные операции к потоку данных. Технология SSE позволила

преодолеть проблемы MMX - при использовании MMX невозможно было од-

новременно использовать инструкции сопроцессора, так как его регистры за-

действовались для MMX и работы с вещественными числами.

В общем случае, к архитектуре процессора добавляется ряд инструкций и

несколько 128-битных регистров с различной интерперетацией. Изначально

каждый регистр трактуется как два значения с плавающей точкой двойной точ-

ности (2*64-бит). Однако, операции могут применяться практически ко всем

типам, "помещающимся" в 16 байт. Это означает, например, что появляется

возможность одновременно сложить или умножить с помощью всего одной ин-

струкции два операнда из четырех чисел с плавающей точностью одинарной

точности, двух - с двойной, двух 64-битных целочисленных, 16 8-битных целых

и т.п.

Существуют следующие расширения: SSE, SSE2, SSE3 и SSE4, о которых имеется обширная информация в интеренете.