Опубликован: 22.04.2008 | Доступ: свободный | Студентов: 526 / 50 | Оценка: 4.50 / 4.75 | Длительность: 06:55:00
Специальности: Программист
Дополнительный материал 17:

Распределенное программирование на языке MC#

< Дополнительный материал 16 || Дополнительный материал 17
Ключевые слова: печать, множества, объект

Цель - изучить структуру Runtime-системы языка MC# для поддержки распределенных вычислений, процедуры загрузки и остановки Runtime-системы и особенностей распределенного программирования на примере программы All2all.

Под распределенным программированием на языке MC# понимается разработка программ, которые будут исполняться на кластере или (Grid-) сети машин.

Ключевым средством языка MC# для порождения параллельных процессов, которые могут исполняться распределено (т.е., на удаленных машинах), являются movable-методы. Movable-методы - это методы классов языка MC#, которые помечены ключевым словом movable и при вызове которых, система исполнения программ на языке MC# (Runtime-система) планирует и переносит этот метод для исполнения на удаленную машину (обычно, выбираемую исходя из принципа наименьшей ее загруженности среди всех доступных машин).

Прежде чем распределенные программы могут быть запущены, необходимо загрузить Runtime-систему языка MC# командой

mcsboot <имя конфигурационного файла>

где в конфигурационном файле перечисляются имена машин/узлов (по одному имени на строку), на которых предполагается исполнять распределенные программы.

Остановка Runtime-системы производится командой

mcshalt

Одной из ключевых особенностей языка MC# является то, что, в общем случае, во время вызова movable-метода, все необходимые данные, а именно

  1. сам объект, которому принадлежит данный movable-метод, и
  2. его аргументы (как ссылочные, так и скалярные значения)

только копируются (но не перемещаются) на удаленную машину. Следствием этого является то, что все изменения, которые осуществляет movable-метод с внутренними полями объекта, проводятся с полями объекта-копии на удаленной машине, и не переносятся на исходные объекты.

Задача 1. Оттранслировать и выполнить программу


и объяснить ее результаты, выдаваемые на печать, а именно, значения переменной x до и после вызова movable-метода Compute.

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

Задача 2. Оттранслировать и выполнить в распределенном режиме программу All2all, представленную ниже.

В этой программе демонстрируется взаимодействие множества распределенных процессов между собой по принципу "каждый с каждым". Перед началом такого взаимодействия, каждый распределенный процесс из этого множества создает собственный объект класса BDChannel, который служит для взаимодействия с другими процессами множества. Взаимообмен такими объектами происходит через главную программу. Имея объекты BDChannel других процессов, процесс может воспользоваться каналом Send и обработчиком Receive этих объектов (точнее, их прокси-объектов) для посылки сообщений другим процессам и приема сообщений от них.



< Дополнительный материал 16 || Дополнительный материал 17