![]() |
|
Опыт применения
языка MC# в задачах рендеринга графических
изображений. А. Молодченков Институт программных систем РАН, г.
Переславль-Залесский Ю. Сердюк Институт программных систем РАН, г. Переславль-Залесский В работе [ 1 ] был представлен язык параллельного, распределенного
программирования MC# для кластерных и GRID-архитектур. Его особенностью является
предоставление в распоряжение программиста высокоуровневых конструкций,
адекватных современным языкам объектно-ориентированного программирования, таким
как С++, C# и Java, и позволяющих разрабатывать сложные
(промышленные) программные комплексы, предназначенные для исполнения на
многопроцессорных архитектурах. В данной работе, мы
представляем новый вариант языка MC#, в котором развиты его базовые конструкции и
уточнена их семантика, а также описываем его применение для разработки
параллельных программ рендеринга графических изображений. Специфическими
конструкциями данного языка являются : - перемещаемые (параллельные) функции/методы, - каналы, - обработчики канальных сообщений, - связки ( средства
синхронизации ). Применение этих
конструкций освобождает программиста от необходимости явно управлять
распределением вычислительных процессов по рабочим узлам кластера или машинам GRID-сети (хотя такая
возможность в языке также предусмотрена) – достаточно лишь указать какие из
функций (вычислительных блоков программы) могут быть исполнены параллельно.
Аналогично, в программах на языке MC# нет необходимости (по сравнению с использованием
интерфейса MPI) в ручном программировании сериализации объектов (данных) для их пересылки
на другой узел (машину) – среда исполнения (Runtime-система) языка производит сериализацию/десериализацию
автоматически. Данный подход лежит в
русле современной тенденции, когда наиболее важные API (Application Programming Interfaces) перетекают в базовые конструкции языка
программирования : по аналогии с тем, как язык Polyphonic C# (http://research.microsoft.com/~nick/polyphony/index.htm) позволяет
обойтись без библиотеки мультипотоковых вычислений, а язык Cw (http://research.microsoft.com/comega/)
позволяет работать с реляционными и слабоструктурированными (XML-) данными, не
привлекая дополнительные API, язык MC# делает ненужной библиотеку для организации
распределенных вычислений, предлагая взамен перечисленные выше конструкции. Таким образом, написание
параллельной, распределенной программы на языке MC# сводится к выделению с помощью специального
ключевого слова movable функций (методов), которые
могут быть перенесены для исполнения на другие машины, и организации их
взаимодействия через каналы и обработчики с использованием связок. Для проверки базовых принципов языка MC# и оценки эффективности
исполнения написанных на нем программ на кластерных системах, мы
реализовали параллельный вариант
простого алгоритма PragRay рендеринга графических изображений методом
обратной трассировки лучей (http://www.brandonfurtwangler.com/software/PragRay.zip). Метод параллелизации заключался в разбиении изображения на
горизонтальные полосы, рендеринг которых осуществлялся на отдельных
процессорах. При этом на каждый процессор посылается описание всей сцены
(которой является, в данном случае, набор 3-хмерных сфер), представленной в
виде массивов объектов-сфер и объектов-источников света. На Рис. 1 показано промежуточное изображение обрабатываемой сцены, воспроизводимое на графической программе-клиенте, а на Рис. 2 – график времени работы программы в зависимости от количества использованных процессоров для сцены из 6000 сфер.
Язык MC# реализован в виде компилятора и Runtime-системы на
платформе Mono (http://www.mono-project.com) – свободно распространяемой реализации .NET для Unix-подобных систем.
Расчеты проводились на кластере K-500 ( 64 2-хпроцессорных узла на базе Intel Xeon 2,8 ГГц )
Объединенного института проблем информатики Национальной академии наук
Беларуси. Сайт проекта MC# - http://u-pereslavl.botik.ru/~vadim/MCSharp/. Литература. [ 1 ] В.
Гузев, Ю. Сердюк. Язык параллельного программирования MC#. – XII Межд. конф. по выч. механике и современным прикладным программным системам, 30 июня –
5 июля 2003 г., Владимир, Россия. |
|