Софийски Университет „Св. Климент Охридски”
Факултет по математика и информатика
Курсов проект
По Системи за паралелна обработка
Задача: Генериране на страници на книга
Изготвил: Александър Боянов Тодоров, фак.№: 80435, 3 курс, Компютърни науки
Ръководител: ас. Христо Христов
Дата: 17.06.2011г. Проверил: ………………….. (подпис)
1.Условие на курсовата задача.
Задачата е да се генерира книга по параметри. За всяка страница от книгата имаме следните параметри: главен герой (момче или момиче), тип на косата (за момче – къса, за момиче – къса, къдрава, дълга), цвят на очите, цвят на косата и цвят на тялото. Цветовете са в шестнайсетичен формат #RRGGBB. Дадени са 33 страници, като всяка страница е изображение в PNG формат 5128х3626 пиксела. За всяка страница имаме следната файлова структура:
Файл
|
Описание
|
base.png
|
фон на страницата
|
boy\base.png
|
основа за момче
|
boy\eye_colour.png
|
маска за очи (оцветява се за произволен цвят)
|
boy\hair_short_colour.png
|
маска за цвят на косата (оцветява се за произволен цвят)
|
boy\hair_short_highlight.png
|
светлосенки на косата
|
boy\hair_short_outline.png
|
очертания на косата
|
boy\highlight.png
|
светлосянка на момчето
|
boy\skin_colour.png
|
маска за кожата (оцветява се за произволен цвят)
|
girl\base.png
|
основа за момиче
|
girl\eye_colour.png
|
маска за очи (оцветява се за произволен цвят)
|
girl\hair_curly_colour.png
|
маска за цвят на къдрава коса (оцветява се за произволен цвят)
|
girl\hair_curly_highlight.png
|
светлосенки на къдрава коса
|
girl\hair_curly_outline.png
|
очертания на къдрава коса
|
girl\hair_long_colour.png
|
маска за цвят на дълга коса (оцветява се за произволен цвят)
|
girl\hair_long_highlight.png
|
светлосенки на дълга коса
|
girl\hair_long_outline.png
|
очертания на дълга коса
|
girl\hair_short_colour.png
|
маска за цвят на къса коса (оцветява се за произволен цвят)
|
girl\hair_short_highlight.png
|
светлосенки на къса коса
|
girl\hair_short_outline.png
|
очертания на къса коса
|
girl\highlight.png
|
светлосянка на момчето
|
girl\skin_colour.png
|
маска за кожата (оцветява се за произволен цвят)
|
Всеки файл от тази файлова структура поддържа прозрачност. Целта е по зададени параметри да се сглоби книжка от всички страници, като всяка страница трябва да е в отделен PNG файл. Сглобяването трябва да може да става и на повече от една нишка.
Изискванията към програмата са следните:
-
Програмата да работи с бази данни MySQL, в която са записани командите, които трябва да изпълни както и зависимостите между тях.
-
Друг параметър задава максималния брой нишки (задачи) на които разделяме работата.
-
Програмата извежда подходящи съобщения на различните етапи от работата си, и записва в базата данни времето отделено за изчисление на всяка команда.
-
Програмата да приема единствен аргумент – конфигурационен файл в ini формат със следната структура:
HOST=localhost
|
хост на Mysql базата данни
|
USER=root
|
потребител за базата данни
|
PASSWORD=***********
|
парола за базата данни
|
DATABASE=storytime
|
база данни, която се ползва
|
MAX_THREADS=8
|
максимален брой нишки
|
MAGICK_HOME=C:\\Program Files\\ImageMagick-6.7.3-Q16
|
път за пакета ImageMagick
|
DYLD_LIBRARY_PATH="C:\\Program Files\\ImageMagick-6.7.3-Q16\\lib"
|
път за пакета ImageMagick
|
MAGICK_TEMPORARY_PATH=E:\\Temp
|
временна папка за пакета ImageMagick
|
MAGICK_MEMORY_LIMIT=1Gb
|
лимит на паметта за пакета ImageMagick
|
MAGICK_MAP_LIMIT=1GB
|
лимит на паметта за пакета ImageMagick
|
MAGICK_THREAD_LIMIT=1
|
лимит за използваните нишки за пакета ImageMagick
|
MAGICK_SYNCHRONIZE=true
|
синхронизиране на I/O операциите за пакета ImageMagick
|
ЗАБЕЛЕЖКА: В условието на задачата се говори за разделянето на работата на две или повече нишки. Работата върху съответната задача на една нишка ще служи за еталон, по който да измерваме евентуално ускорение. Тоест в кода реализиращ решенията на задачите трябва да се предвиди и тази възможност – задачата да бъде решавана от единствена нишка; Пускайки програмата да работи върху задачата с помощта на единствена нишка, ще считаме че използваме серийното решение на задачата;
2.Анализ на задачата
За да се сглоби една страница се изпълняват следните команди, които ползват софтуерния пакет ImgeMagick (http://www.imagemagick.org):
1
|
convert music_02/girl/skin_colour.png +level-colors '#ffdfbe' skin_colour_temp.png
|
2
|
convert music_02/girl/eye_colour.png +level-colors '#a38336' eye_colour_temp.png
|
3
|
convert music_02/girl/hair_curly_colour.png +level-colors '#e68e4f' hair_colour_temp.png
|
4
|
composite -gravity center -compose Multiply music_02/girl/base.png skin_colour_temp.png temp0.png
|
5
|
composite -gravity center -compose Multiply temp0.png eye_colour_temp.png temp1.png
|
6
|
composite -gravity center music_02/girl/hair_curly_outline.png temp1.png temp2.png
|
7
|
composite -gravity center -compose Multiply temp2.png hair_colour_temp.png temp3.png
|
8
|
convert music_02/base.png temp3.png music_02/girl/highlight.png music_02/girl/hair_curly_highlight.png -layers merge result_music_02.png
|
Зависимостта между командите може да бъде описана чрез следната диаграма:
На следващата страница са показани примерни изображения в процеса на сглобяването на страницата.
girl/skin_colour.png
|
|
temp0.png
|
|
skin_colour_temp.png
|
|
girl/hair_curly_outline.png
|
|
girl/eye_colour.png
|
|
temp1.png
|
|
eye_colour_temp.png
|
|
temp2.png
|
|
girl/hair_curly_colour.png
|
|
temp3.png
|
|
hair_colour_temp.png
|
|
base.png
|
|
girl/base.png
|
|
girl/highlight.png
|
|
girl/hair_curly_highlight.png
|
|
result_music_02.png
|
|
2.Описание на курсовия проект
Проекта е реализирана на PHP, Mysql и Java. Чрез PHP се реализира WEB интерфейс за задаване на параметрите. След това се генерират нужните команди и заедно със зависимостите между тях се записват в MySQL база данни. На тази част от проекта няма да се спирам подробно. Чрез Java с помощта на многонишково програмиране, което спомага за разпределянето на работата на няколко нишки, се постига по-добро ускорение и ефективност на целия процес.
За осъществяване на процеса са реализирани 4 класа: class Storytime, class Worker, class Scheduler и class MyProcess.
1) Класа Storytime е за създаден за да прочете данните от конфигурационния файл и да създаде връзка към базата данни. Той стартира едно копие на класа Scheduler
2) Класа Scheduler наследява класа Thread и допрочита конфигурационния файл и зарежда environment variables за бъдещите процеси. Създава и нишка, която на всяка своя итерация следи има ли неизпълнени задачи в базата данни и ако има пуска нишка чрез класа Worker, като следи броят на пуснатите нишки да не надвишава зададения лимит. Ако няма текущи задачи минава в изчакващ режим (заспива за 10 секунди).
3) Класа Worker наследява класа Thread и взима от базата данни първата свободна задача и я възлага на класа MyProcess за изпълнение. Отбелязва в базата данни кога е започнала и кога е свършила работа по съответната задача. Всички действия със базата данни са синхронизирани чрез ключалка (ReentrantLock).
4) Класа MyProcess създава нов процес от софтуерния пакет ImageMagick с параметри зададени от класа Worker, които са взети от базата данни. Изчаква процеса да завърши и следи за нередности по изпълнението му.
Класовете Scheduler и Worker създават нишки като наследяват класа Thread, който е част от пакета java.lang в Java. В този класа имаме метод run(), в който е написан програмния код на всяка нишка, т.е. какво да прави нишката, когато я стартираме.
4.Диаграми на ускорението и ефективността.
Тестването на проекта е на следната конфигурация:
CPU: Intel® Core™ i7-2630QM (2.60GHz, 6MB cache, 4 ядра, 8 нишки)
RAM: 8GB DDR3
SSD: Crucial M4 128GB
HDD: Seagate Momentus 750GB 7200RPM
Разлики между SSD и HDD технологиите:
Дисково устройство
|
последователно писане
|
последователно четене
|
време за достъп
|
Crucial M4 128GB
|
200Mb/с
|
500Mb/s
|
0.217ms
|
Seagate Momentus 750GB
|
90Mb/s
|
90Mb/s
|
7.06ms
|
Целта на тестовете е освен да се покаже ефективността на описания алгоритъм и да се види значението от ползваната технология за съхранение на данни( Solid State Disk и Hard Disk Drive).
За целта ще се оценят ускорението S и ефективността Е на описания алгоритъм при използването на HDD и SSD. Формулите за изчисляването им са:
S(n) =T1/Tn и E(n) = S(n)/n, където n е броя нишки, а Tn е времето необходимо за завършване на работата на алгоритъм с n на брой нишки.
SSD
HDD
Сподели с приятели: |