Опубликован: 22.04.2008 | Уровень: профессионал | Доступ: платный
Дополнительный материал 12:

Введение в высокоуровневый язык параллельного, распределенного программирования MC#

Цель - изучить модель программирования языка MC# и его специфические конструкции: async- и movable-методы, каналы, обработчики и связки

Высокоуровневый язык параллельного, распределенного программирования MC# предназначен для написания программ, работающих на всем спектре параллельных архитектур - от многоядерных процессоров до Grid-сетей. В случае, когда параллельная программа разрабатывается для исполнения на кластерах или Grid-сети, то она называется параллельной, распределенной программой.

Для исполнения MC#-программ, на машинах должна быть установлена среда исполнения CLR (Common Language Runtime) с соответствующим набором библиотек. На машине с операционной системой Windows, реализацией такой системы является Microsoft .NET Framework, а на машинах с операционной системой Linux - система Mono (http://www.mono-project.com).

Ключевая особенность языка MC# заключается в добавлении к обычным, синхронным методам, так называемых "асинхронных" методов, которые отмечаются в MC#-программах ключевым словом async (а в случае распределенных программ - ключевым словом movable ). При их вызове, происходит порождение нового потока (thread), в котором выполняется вызванный асинхронный метод.

Взаимодействие асинхронных методов в MC#-программе осуществляется с помощью передачи сообщений с использованием специальных средств - каналов и обработчиков канальных сообщений, выделенных в специальные синтаксические категории языка MC#: channels и handlers, соответственно.

Задача 1. Оттранслировать и выполнить, задавая различные значения входного параметра, программу вычисления n-го числа Фибоначчи:


Трансляция MC#-программ осуществляется командой:

mcsc <имя программы>.mcs

Запуск на выполнение осуществляется

  • в Windows, командой
    <имя программы> <входные параметры>
  • в Linux, командой
    mono <имя программы>.exe  <входные параметры>

Объяснить, почему при рекурсивных вызовах программы, необходимо создание новых объектов класса Fib.

Задача 2. Оттранслировать и выполнить модифицированный вариант программы вычисления чисел Фибоначчи с порогом для локального вычисления (см. текст программы ниже):

Если задание выполняется на машине, имеющей два или более ядра (процессора), то для входного параметра n = 40, подобрать оптимальное значение порога, при котором время исполнения программы будет наименьшим.

Задача 3. Оттранслировать и выполнить программу вычисления чисел Фибоначчи с линейным порождением рекурсивных вызовов:

Если задание выполняется на многоядерной (многопроцессорной) машине, то сравнить время выполнения данного варианта программы с вариантом из Задачи 2 при запуске с N = 40 и одинаковым порогом для обеих программ.

Объяснить полученное время выполнения для этих вариантов по сравнению друг с другом.

Дмитрий Молокоедов
Дмитрий Молокоедов
Россия, Новосибирск, НГПУ, 2009
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010