

Кафедра Вычислительной Техники СПбГУ ИТМО
Результаты работы программы:
Результат работы с отключенной оптимизацией (/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 |