Быстрое развитие IT технологий позволило в настоящее время даже в мобильных устройствах иметь более чем один процессор, что способствует более быстрому выполнению трудоемких операций при условии использования алгоритмов параллельных вычислений. Однако, еще далеко не все программы и алгоритмы адаптированы для многопроцессорных (многоядерных) архитектур, такие программы работают неэффективно, так как не используют всю мощь современных устройств. Поэтому задача адаптации алгоритмов для параллельных вычислений является важной и актуальной.
В данной работе рассмотрен один из самых эффективных алгоритмов сжатия изображений без потерь PackJPG, который уступает другим алгоритмам этой области лишь по времени работы. Было проведено исследование возможности адаптации данного алгоритма и его реализация для многопроцессорной архитектуры с помощью технологии OpenMP. Выполнена сравнительная оценка времени работы данного алгоритма и его параллельной модификации.
Актуальность работы обусловлена еще и тем, что данный алгоритм дает существенную экономию объема JPEG-изображения (до 26%) без потери качества, что недоступно при использовании архиваторов, но требует значительных затрат времени на сжатие и распаковку. Скорость кодирования составляет 600 килобайт в секунду. Параллельные вычисления позволили бы сократить это время в несколько раз, доведя до приемлемых величин для небольших изображений. Сложность исследования возможности параллельной реализации алгоритма связана с тем, что спецификация программы и математическое описание недоступно в открытой печати , фактически данная работа выполнялась путем анализа алгоритма по исходному коду.
В настоящей дипломной работе был проведен анализ возможности и эффективности параллельной реализации на примере алгоритма packJPG, являющегося компонентом одноименной программы. В процессе выполнения работы был изучен стандарт изображений JPEG и его представление, кодирование и декодирование. Также осуществлен анализ алгоритмов сжатия JPEG без потерь и выявлены основные преимущества и недостатки алгоритма packJPG.
В ходе основного этапа работы был осуществлен анализ кода и выявлены его основные компоненты. Данная процедура потребовала массивного рефакторинга существующего кода. На основе этого было выполнено более детальное описание алгоритма.
Параллельная реализация осуществлялась с помощью техники инкременатального программирования. Процедура реализации выполнялась итеративно. Итерация представляла из себя параллельную реализацию фрагмента кода и оценку эффективности этой модификации. В некоторых частях кода ее произвести оказалось невозможным, в связи со спецификой программы.
Проведенная работа может быть продолжена в виде реализации данного алгоритма для графических вычислительных устройств, так как код наполнен большим количеством циклов, работающих с одноразмерными и двуразмерными векторами. Видеокарта имеет большое количеством ядер для вычисления, что должно увеличить эффективность проведенной реализации, если ее удастся адаптировать для видеокарт.
[1] Mitchell William B. Pennebaker; Joan L. JPEG still image data compression standard.- 1993. -P. 290-293.
[2] Stirner Matthias, Seelmann Gerhard. IMPROVED REDUNDANCY REDUCTION FOR JPEG FILES. - 2007.
[3] А.С. Антонов. Параллельное программирование с использованием OpenMP. — Изд-во МГУ, 2009.
[4] The JPEG Specification // http://www.iso.org/iso/home/store/catalogue_tc/ catalogue_detail.htm?csnumber=59634. — 2012.
[5] The PNG Specification // https://www.w3.org/TR/PNG-Structure.html. — 1996.
[6] The official packJPG site // http://packjpg.encode.ru.
[7] The official OpenMP site // http://www.openmp.org.
[8] The official CMake site // https://cmake.org.
[9] The official valgrind site // http://valgrind.org.