Кафедра Вычислительной Техники СПбГУ ИТМО

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

Результат работы с отключенной оптимизацией (/Od):

Loading "Kitty320x200.bmp"...

Mirroring image \w "MirrorCPP"... 406 ticks.

Mirroring image \w "MirrorASM"... 31 ticks.

Mirroring image \w "MirrorMMX"... 31 ticks.

All done.

Для продолжения нажмите любую клавишу . . .

Результат работы с полной оптимизацией (/Ox):

Loading "Kitty320x200.bmp"...

Mirroring image \w "MirrorCPP"... 187 ticks.

Mirroring image \w "MirrorASM"... 47 ticks.

Mirroring image \w "MirrorMMX"... 31 ticks.

All done.

Для продолжения нажмите любую клавишу . . .

Описание использованных MMX команд:

movq выполняет пересылку 8 байт (регистр память, память регистр или регистр регистр). Например, в программе инструкция movq mm0, [esi+ebx] помещает 8 байт из памяти начиная с адреса esi+ebx в регистр mm0 (8 байтный MMX регистр).

Раевский Сергей Сергеевич, группа 2103

11

Кафедра Вычислительной Техники СПбГУ ИТМО

Выводы по работе программы:

Из приведенных результатов работы видно, что функция на ассемблере и MMX справляются с заданием за примерно одинаковое время, а функция на C++ оказалась самой медленной (при отключенной оптимизации). Это на 100% согласуется с результатами предыдущей работы, т.к. и в этом случае компилятор размещает счетчики циклов в памяти, а не в регистрах, и, кроме того, сам код написан неоптимально можно было бы скоратить количество и сложность рассчетов, необходимых для вычисления нужной ячейки памяти. Поэтому, даже при включении полной оптимизации функция на C++ проигрывает по времени ее ассемблерным конкурентам.

Вопросы:

1.Опишите структуру BMP-файла без палитры.

Файл разбит на 3 основных раздела: заголовок файла растровой графики, информационный заголовок растрового массива и данные растрового массива. Заголовок файла растровой графики содержит информацию о файле, в том числе адрес, с которого начинается область данных растрового массива. В информационном заголовке растрового массива содержатся сведения об изображении, хранящемся в файле, например, его высоте и ширине в пикселях.

Формат данных растрового массива в файле BMP зависит от числа бит, используемых для кодирования данных о цвете каждого пикселя. Файлы с глубиной 16 и 24 бит/пиксель не имеют таблиц цветов; в этих файлах значения пикселей растрового массива непосредственно характеризуют значения цветов RGB.

2.Что означают первые два байта в BMP-файле ?

Эти два байта сигнатура, по которой можно проверить, что данный файл является файлом формата BMP. Они должны содержать символы ‘B’ и ‘M’. Однако, это, конечно, является недостаточным условием для соответствия содержимого файла формату BMP. Более правильно будет проверить соответствие длинны файла значению второго поля заголовка, соответствие длины растрового массива его разрешению и глубине цвета, прежде чем сделать окончательный вывод.

3.Как в BMP-файле без палитры располагаются данные растрового массива? Какие у такого способа расположения достоинства и недостатки?

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

4. Сколько байт за один цикл меняют местами каждый из алгоритмов ( С++, ASM, ASM+MMX ) ?

Алгоритмы на С++ и ASM оперируют 4-х байтными блоками, а MMX – 8- ми байтными.

Раевский Сергей Сергеевич, группа 2103

12

Кафедра Вычислительной Техники СПбГУ ИТМО

5.Правильно ли Ваша программа работает с bmp файлами разного размера (разрешения)? Попробуйте в качестве входного изображения использовать bmp файл размера 501х300 пикселей.

Если ширина не кратна четырем (или восьми, в случае с MMX), то программа работает некорректно. Это легко объяснить тем, что в копировании учавствуют блоки размером 4(8) байт, в то время, как используется глубина цвета в 3 байта на пиксель.

Раевский Сергей Сергеевич, группа 2103

13

Соседние файлы в папке лабораторные работы (отчеты) по ассемблеру