Добро пожаловать на домашнюю страницу языка программирования MC#!
Проект MC#
Главная страница 
Язык MC# 
Документация 
Публикации 
 Примеры 
FAQ 

 
Дистрибутивы
Система программирования MC# 

 
Ссылки
Parallel C# 
Polyphonic C# 
Проект SKIF 

 
Контакты
 Контакты 


Mono powered

Microsoft .Net powered


 
   Опыт применения языка MC# в задачах рендеринга

Опыт применения языка MC# в задачах рендеринга

графических изображений.

 

А. Молодченков

Институт программных систем РАН, г. Переславль-Залесский

yoshi@skif.botik.ru

 

Ю. Сердюк

Институт программных систем РАН, г. Переславль-Залесский

yury@serdyuk.botik.ru

 

 

В работе [ 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 сфер.

 

Рис. 1 Промежуточное изображение обрабатываемой сцены.

Рис. 2 График времени работы программы

 

 

Язык 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 г., Владимир, Россия.

 


Весь Переславль