Федотов Н.Г., Романов С.В. ПРОЕКТИРОВАНИЕ СИСТЕМЫ РАСПОЗНАВАНИЯ ОБРАЗОВ НА ОСНОВЕ СТОХАСТИЧЕСКОЙ ГЕОМЕТРИИ С ПРИМЕНЕНИЕМ МНОГОПОТОЧНЫХ ВЫЧИСЛЕНИЙ С появлением многоядерных процессоров появилась возможность значительно уменьшить время выполнение трудоемких программ, применив в них многопоточные вычисления. Важнейшим и наиболее трудоемким этапом создания программы является разработка алгоритма. При разработке параллельного алгоритма возникают дополнительные проблемы, обусловленные особенностями систем параллельных вычислений. Рассмотрим процесс проектирования многопоточных систем. На первом этапе проводят декомпозицию алгоритма решения задачи, с целью еѐ разделения на блоки меньшего размера, которые впоследствии смогут выполняться на различных процессорах. По аналогии со схемами параллельных вычислений существуют два подхода к декомпозиции алгоритма: функциональная декомпозиция и декомпозиция данных. Декомпозиция данных основана на выделении блоков данных, пригодных для параллельной обработки. В литературе встречаются следующие рекомендации по осуществлению данной декомпозиции: Количество подзадач после декомпозиции должно примерно на порядок превосходить количество процессоров. Это позволяет обеспечить большую гибкость на последующих этапах разработки программы. Следует избегать лишних вычислений и пересылок данных, в противном случае программа может оказаться плохо масштабируемой и не позволит достичь высокой эффективности при решении задач большого объема. Подзадачи должны быть примерно одинакового размера, в этом случае легче обеспечить сбалансированную загрузку процессоров. В идеале сегментация должна быть такой, чтобы с увеличением объема задачи количество подзадач также возрастало (при сохранении постоянным размера одной подзадачи). Это обеспечит хорошую масштабируемость. Функциональная декомпозиция применяется, когда нет структур данных, позволяющих применить декомпозицию данных. Исходный алгоритм разбивается на множество операций, под которые потом подгоняются необходимые данные и их разделение. После декомпозиции данных преступают к проектированию коммуникаций. Подзадачи не существуют независимо им необходимо получать исходные данные и передавать результаты своей работы. Независимо от способа реализации на данном этапе необходимо построить схему обмена данными между подзадачами. Если использовалась функциональная декомпозиция, то схема обмена данными строится между подзадачами. В случае применения декомпозиции данных очень популярным является введения в систему планировщика (master потока), на который ложится задача обмена данными с симметричными потоками. После построения схемы обмена данными необходимо определить тип коммуникаций и технологии их реализации. Выделяют коммуникации следующих типов: локальные — каждая подзадача связана с небольшим набором других подзадач; глобальные — каждая подзадача связана с большим числом других подзадач; синхронные — отправитель и получатель данных координируют обмен; асинхронные — обмен данными не координируется. Предпочтительным является применение локальных коммуникаций. Подзадачи должны иметь примерно одинаковое количество коммуникаций. На двух предыдущих этапах не учитывалась архитектура компьютера. На стадии укрупнения алгоритма количество подзадач приводится к количеству процессоров (или кратному числу). При укрупнении алгоритма решаются следующие задачи: Снижение затрат на коммуникации. Балансировка ресурсоемкости между процессорами. Снижение трудоемкости разработки. На заключительном этапе осуществляется планирование вычислений. Целью данного этапа является окончательная балансировка нагрузки на процессоры. Если на этапе укрупнения удалось достигнуть достаточного уровня сбалансированности, например, реализовав решение задачи в симметричных потоках, то планирование вычислений является формальным определением точек запуска потоков или построения системы планировщика. В противном случае ищутся способы улучшения сбалансированности. Наиболее сложным и эффективным является динамическое управление работой потоков. Существует множество алгоритмов управления загруженностью системы, наиболее известные из них: метод рекурсивной координатной дихотомии, метод рекурсивной дихотомии графа, локальные алгоритмы, вероятностные методы, циклическое планирование. Когда планирование вычислений не дает приемлемого результата, возвращаются к этапу укрупнения и изменяют структуру подзадач. Как было сказано выше, разработка параллельного алгоритма начинается с декомпозиции алгоритма решения задачи на подзадачи. Рассмотрим алгоритм генерации признаков на основе стохастической геометрии Рис.1. Исходными данными для работы блока генерации признаков являются множество изображений, множество функционалов и настройки системы. Уже на данном этапе понятно, что можно использовать модель параллельных данных для построения распределенной системы. Необходимо выполнить декомпозицию данного алгоритма. Начнем декомпозицию с блока построения сканирующих прямых – ресурсоемкой операции, связанной с вычислением тригонометрических функций. В зависимости от настроек системы, формируется множество сканирующих прямых, которые определяются исходным изображением и настройками системы (расстояние между прямыми, количество слоев). Декомпозиция данного блока представлена на рис.2. Получена достаточная декомпозиция для данного блока, т.к. количество подзадач для стандартных настроек и среднего размера изображения превысит 1000. Результатом работы данного блока является множество сканирующих прямых, на основе которых осуществляется расчет функционалов. Рассмотрим блок вычисления функционалов. В результате его работы формируется база данных, содержащая вычисленные значения триплетных признаков. Декомпозиция данного блока представляет собой множество подзадач вычисления триплетных признаков рис.3. Для минимизации использования системных ресурсов, вычисление триплетных признаков осуществляется в форме дерева. При таком подходе сначала вычисляется Т функционал, затем первый P функционал, а затем множество Q функционалов, исходными данными для которого являются результаты вычисления TP. Рассмотрим схему обмена данными между потоками при формировании сканирующих прямых рис.3. Передача данных осуществляется иерархически, что характерно для параллельности данных. Наибольший объем передачи данных осуществляется между подзадачами вычисления характеристик слоя и вычисления сканирующих прямых данного слоя. Осуществляя укрупнение данного блока следует объединить Вычисления слоя и вы- числение множества прямых, принадлежащих данному слою. При стандартных настройках системы осуществляется вычисление 18 слоев, данный уровень декомпозиции хорошо сочетается со стандартным количеством ядер (2 или 4). Сложнее обстоит дело в блоке вычисления признаков. Как было сказано выше данные передаются иерархически: результаты вычисления Т функционала, передаются для вычисления множества P функционалов, а результат вычисления P функционала – множеству Q функционалов. Учитывая малое количество ядер, можно использовать подзадачи вычисления дерева признаков для определенного Т функционала. Недостатком такого подхода является огромная ресурсоемкость (большое количество оперативной памяти необходимо для хранения всех промежуточных результатов вычислений). Для сокращения необходимого объема оперативной памяти, выполним декомпозицию блока вычисления Т функционала, который является наиболее ресурсоемким (около 90 % машинного времени приходится на данный блок кода). Исходными данными для блока вычисления Т функционала является множество слоев сканирующих прямых, что позволяет применить модель параллельности данных. По окончанию вычисления Т функционала, в различных потоках осуществляется вычисление Р функционалов и всего подчиненного дерева Q функционалов рис.4. Подобная схема не приводит к значительному увеличению обмена данными между потоками, но сокращает ресурсоемкость программы в целом. Выполним планирование вычислений. Специфика системы обеспечивает равномерное распределение нагрузки между множеством ядер, поэтому на данном этапе необходимо определить точки запуска потоков. Решение данной задачи сводится к созданию планировщика – дополнительного класса, который будет передавать данные потокам, а также управлять процессом вычисления и контролировать завершенность работы. Рис. 1 Рис. 2 Рис. 3 Рис. 4 Выполним планирование вычислений. Специфика системы обеспечивает равномерное распределение нагрузки между множеством ядер, поэтому на данном этапе необходимо определить точки запуска потоков. Решение данной задачи сводится к созданию планировщика – дополнительного класса, который будет передавать данные потокам, а также управлять процессом вычисления и контролировать завершенность работы. Используя полученный макет можно приступать к реализации данной системы. Полученные схемы взаимодействия между различными объектами системы останутся неизменными независимо от применяемого языка программирования и среды выполнения программы. Классы программы должны реализовывать указанные блоки системы.