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

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

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
В не таком уж далеком 1996 году корпорация Intel внедрила в свои процессоры новую мультимедийную технологию под названием MMX (MultiMedia eXtension), которая давала (со слов фирмы) 400-процентный выигрыш в скорости работы с графикой, звуком и т.п.
Особенности MMX: мультимедийный набор 57 команд ; регистры ММХ ММО - ММ7; насыщение при выполнении операций.
Дальнейшее расширение параллельности класса SIMD Single Instruction Multiply Data (одна инструкция - много данных) связано с SSE командами. SSE - Streaming SIMD Extensions.
В Pentium реализовано более 70 новых SIMD-инструкций, оперирующих со специальными 128-битными регистрами XMM0-XMM7. Каждый из этих регистров хранит четыре вещественных числа одинарной точности.
Цель работы: В лабораторной работе предлагается изучить и освоить технологию и команды ММХ - SSE.
Программирование проводится на языке Си (visual C++) , с использованием ассемблера и отладчика.
Информация: Описание ММХ SSE формата. Пример программы.
Задание на выполнение работы
ЧТО НУЖНО ИЗЧИТЬ
1. Механизм команд с векторной (параллельной) обработкой данных.
2. Программирование MMX SSE .
ЧТО НУЖНО СДЕЛАТЬ
1. Напишите программу «Изучение команд ММХ-SSE», аналогично примеру, но с новыми командами. Покажите в отладчике visual C++ выполнение команд и изменение содержимого регистров.
2. По заданию преподавателя покажите выполнение “особенных” команд:
3. Напишите программу №1, выполняющую операции над массивом данных (массив пикселей изображения) с использованием ММХ SSE команд. Определите время ее работы.
4. Напишите программу №2, выполняющую те же функции, что и первая программа, но с использованием базовых команд процессора. Определите время ее работы.
5. Сравните результаты.
ФОРМАТ ММХ КОМАНД
В ММХ используется 4 типа данных
- упакованные байты (8 байт в 64-битовом пакете),
- упакованные слова (4 16-битовых слова в 64-битовом пакете),
- упакованные двойные слова (2 32-битовых двойных слова в 64-битовом пакете)
- учетверенное слово (64 бита).
Формат команды:
instr [dest, src]
dest - destination
src - source
Суффиксы:
US - команда с непредписанным насыщением (unsigned saturation)
S или SS - команда с предписанным насыщением (signed saturation)
Если нет суффиксов US или SS, то арифметическое переполнение (wraparound)
B,W,D,Q - тип данных
Команда |
Мнемоника |
обмена данными |
movd (32), movq (64) movd MM4,mem1 |
арифметические |
padd, … pmadd слово в двойное слово pmulh слово старшая часть pmull слово младшая часть |
логические |
pand, por,pxor, |
сдвига |
psllw MM4,3 сдвиг влево psra, psrl - сдвиг вправо с 1/0 или 0 |
сравнения |
pcmpeq - равно, pcmpgt - больше, |
преобразования |
pack/unpack packuswb M2,M4 |
команда отмены режима ММХ |
EMMS |
Особенности SSE1
В Pentium III реализовано 70 новых SIMD-инструкций, оперирующих со специальными 128-битными регистрами XMM0-XMM7. Каждый из этих регистров хранит четыре вещественных числа одинарной точности. Выполняя операцию над двумя регистрами, SSE фактически оперирует четырьмя парами чисел. Благодаря этому процессор может выполнять до 4-х операций одновременно
Суффиксы: ps - параллельная операция SIMD (maxps xmm1,xmm5)
ss - скалярная операция (операция над 0-31 битами) (addss xmm1,xmm5)
Пример операции перестановки: shufps xmm1,xmm2,9Ch
10(b2)-01(b1)-11(a3)-00(a0) in xmm1
Команды над числами с плавающей точкой
Команды над целыми числами
У микропроцессора Intel Pentium 4 появилась новая группа инструкций, получивших название SSE2, она дополнила все предыдущие команды ММХ SSE. Цифра 2 в названии указывается для того, чтобы отличить новую группу от одноименной, уже поддерживаемой микропроцессором Pentium III. В состав SSE2 входят операции для работы с 64-х разрядными целыми и вещественными (представление с удвоенной точностью) числами. Согласно документации Intel в группу SSE2 входят инструкции, выполняющие 144 новые операции.
Большинство новых инструкций двухадресные. Первый операнд является приемником (dest), а второй источником (src). Приемник, как правило, находится в 128-bit регистре xmm, источник может находиться как в регистре xmm, так и в оперативной памяти (ОЗУ). Исключением являются только инструкции пересылки, у которых приемник может располагаться в ОЗУ. Третий операнд, если он есть, является целым числом, размер которого не превышает одного байта.
При работе с вещественными числами возможно выполнение одной и той же операции над одной или двумя парами чисел. Появляются новые суффиксы.
pd - параллельная операция SIMD, два 64-bit числа расположены в одном 128-bit регистре или в ОЗУ подряд друг за другом.
sd - скалярная операция (операция над 0-63 битами)
SQRTPD xmm, xmm/m128 dest = sqrt(src) |
- извлечение квадратного корня из двух вещественных чисел источника с записью результата в приемник |
MAXPD xmm, xmm/m128 dest = max(dest,src) |
- нахождение в каждой паре большего вещественного числа удвоенной точности |
MINPD xmm, xmm/m128 dest = min(dest,src) |
нахождение в каждой паре меньшего вещественного числа удвоенной точности |
SSE3
Набор SSE3 содержит 13 инструкций. Наиболее заметное изменение - возможность горизонтальной работы с регистрами. Если говорить более конкретно, добавлены команды сложения и вычитания нескольких значений, хранящихся в одном регистре. Эти команды упростили ряд DSP и 3D-операций. Существует также новая команда для преобразования значений с плавающей точкой в целые без необходимости вносить изменения в глобальном режиме округления.
SSE4
SSE4 состоит из 54 инструкций. Добавлены инструкции обработки строк 8/16 битных символов, вычисления CRC32 и др.
2.1 Ускорение видео
2.2 Векторные примитивы
2.3 Вставки/извлечения
2.4 Скалярное умножение векторов
2.5 Смешивания
2.6 Проверки бит
2.7 Округления
2.8 Чтение WC памяти
3.1 Обработка строк
3.2 Подсчет CRC32
3.3 Подсчет популяции единичных бит
3.4 Векторные примитивы
4 Процессоры с SSE4
PHMINPOSUW xmm1, xmm2/m128 (Packed Horizontal Word Minimum)
Поиск среди 16-ти битных беззнаковых полей A0…A7 такого, который имеет минимальное значение (и позицию с меньшим номером, если таких полей несколько). Возвращается 16-ти битное значение и его позиция.
ПРИМЕР программы: Изучение команд ММХ-SSE
#include <stdio.h>
#include <conio.h>
int main(void) {
char qw1[8] = {1, 1, 1, 1, 1, 1, 1, 1};
char qw2[8] = {2, 2, 2, 2, 2, 2, 2, 2};
int a = 1;
int b = 2;
float c[4] = {1, 2, 3, 4};
float d[4] = {5, 6, 7, 8};
double f[2]= {16, 4};
char a128[16] = {1, 18, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31};
char b128[16] = {17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 29, 14, 31, 16};
_asm {
//mmx
movq mm0, qw1
movq mm1, qw2
pcmpeqb mm0, mm1
movq qw1, mm0
}
printf("%s\n", "Summing elements of vectors qw1 + qw2 :");
for (int i = 0; i < 8; i++)
{ printf("%d ", qw1[i]); }
printf("\n");
_asm {
//sse
movups xmm0, c
movups xmm1, d
addps xmm0, xmm1
movups c, xmm0
}
printf("%s\n", "Summing elements of vectors c + d :\n");
for (int i = 0; i < 4; i++)
{ printf("%f ", c[i]); }
_asm {
//sse2
movups xmm1, f
sqrtpd xmm0, xmm1
movups f, xmm0
}
printf("\n%s %f %s %f\n", "Square of ", f[0], "is", f[1]);
_asm {
movups xmm0, a128
movups xmm1, b128
pminub xmm0, xmm1
movups a128, xmm0
}
printf("\n%s\n", "Comparing elements :");
for (int i = 0; i<16; i++)
{ printf("( %d , %d) ; ", a128[i], b128[i]); }
printf("\n%s\n", "Minimum elements :");
for (int i = 0; i<16; i++)
{ printf("%d ", a128[i]); }
return 0;
getch(0);
}
2010
PAGE 1