В этом подразделе Вы изучите, как откомпилировать и выполнить программы
ПВМ. В последующих подразделах описывается как писать параллельные
программы ПВМ. В этом Вы будете иметь дело с программами-образцами,
поддерживаемыми программным обеспечением ПВМ. Эти образцовые программы
создают полезные шаблоны, на основе которых можно создавать собственные
ПВМ программы.
Первым шагом является копирование программы-образца в свою пользовательскую
область на диске:
% cp -r /PVM_ROOT/examples $HOME/pvm3/examples
% cd $HOME/pvm3/examples
Каталог с примерами содержит файлы Makefile.aimk и Readme,
в которых описано как построить примеры. ПВМ поддерживает архитектурно
независимую программу построения aimk, которая автоматически
определяет PVM_ARCH и прилинковывает любые требующиеся и
специфичные для данной операционной системы библиотеки к разрабатываемому
приложению. aimk автоматически доопределяет соответствующую
$PATH, когда Вы помещаете cshrc.stub в файл .cshrc.
Применение aimk позволяет Вам сохранить исходные тексты и
файл с программой сборки неизменными при компиляции в среде с различными
архитектурами.
Программная модель "ведущий-ведомый" - это наиболее популярная
модель из используемых при распределенных вычислениях. (В области
параллельного программирования вообще, модель ОКМД более популярна).
Для компиляции примера "ведущий-ведомый" на С введите:
% aimk master slave
Если Вы предпочитаете работать c Fortran, откомпилируете версию на
Fortran:
% aimk fmaster fslave
В зависимости от расположения каталога согласно PVM_ROOT,
выражения INCLUDE в заголовках примеров на Fortran могут
нуждаться в изменениях. Если PVM_ROOT не совпадает с HOME/pvm3,
то замените ее таким образом, чтобы она указывала на $PVM_ROOT/include/fpvm3.h.
Заметьте, PVM_ROOT для Fortran не "расширяется" -
поэтому Вы должны добавлять определение достоверного пути.
Программа сборки пересылает исполняемые файлы в $HOME/pvm3/bin/PVM_ARCH
- где ПВМ по умолчанию будет искать их на всех хостах. Если задействованные
файловые системы на всех хостах ПВМ не одинаковы, то Вам понадобится
дополнительно создавать или копировать (в зависимости от архитектуры)
эти исполняемые файлы на хосты в составе ПВМ.
Теперь, задействовав одно окно, запустите ПВМ и сконфигурируйте несколько
хостов. Приводимые примеры разработаны для выполнения на произвольном
числе хостов, включая один. В другом окне смените каталог на HOME/pvm3/bin/PVM_ARCH
и введите:
% master
Программа выдаст запрос о числе задач. В примерах количество задач
не обязательно должно совпадать с количеством хостов. Проверьте несколько
комбинаций.
Первый пример иллюстрирует возможность запустить программу ПВМ из
любого терминала Unix на любом хосте виртуальной машины. Этот процесс
подобен способу, при котором Вы запускали бы последовательную программу
a.out на рабочей станции. В следующем примере, который также
относится к модели "ведущий-ведомый", под названием hitc,
Вы можете увидеть, как порождается работа с консоли ПВМ, а также из
XPVM.
hitc иллюстрирует балансирование динамической загрузки с
применением парадигмы "пула задач". Согласно парадигме пула
задач, ведущая программа управляет большой очередью задач, всегда
посылая "простаивающим" ведомым программам больше заданий для
выполнения - до тех пор, пока очередь не опустеет. Такая парадигма
эффективна в ситуациях, когда хосты очень рознятся по вычислительной
мощности потому, что наименее загруженные или более мощные хосты выполняют
больше работы, причем все хосты остаются занятыми до тех пор, пока
задание не выполнится. Для компиляции hitc введите:
% aimk hitc hitc_slave
С этого момента hitc не требует никакого пользовательского
ввода, он может быть порожден прямо с консоли ПВМ. Запустите консоль
ПВМ и добавьте ограниченное число хостов. В ответ на приглашение консоли
ПВМ введите:
pvm> spavn -> hitc
При порождении, опция -> заставляет все конструкции вывода
на экран в hitc и ему подчиненных направлять информацию в
видимую область консоли. Эта возможность применима при отладке Ваших
первых небольших программ ПВМ. Вы можете поэкспериментировать с этой
опцией, помещая конструкции вывода на экран в hitc.f и hitc_slave.f
и перекомпилируя их.
hitc может использоваться для иллюстрирования возможностей
анимации в реальном масштабе времени для XPVM. Запустите XPVM и постройте
виртуальную машину с четырьмя хостами. Кликните на кнопку tasks
и выберите в меню spawn. Введите hitc, когда XPVM
запросит команду и кликните на start. Вы увидите подсветку
иконок хостов, как только виртуальная машина станет задействованной.
Вы увидите порождение задач hitc_slave и увидите все сообщения,
которые "бродят" между задачами на дисплее Space Time.
Можно выбрать несколько несколько других вариантов просмотра с помощью
XPVM меню views. Способ task output эквивалентен
применению опции -> для консоли ПВМ. Это заставляет стандартный
вывод всех задач принудительно перенаправлять в окно, которое при
этом "всплывает".
Существует одно ограничение на программы, которые порождаются из XPVM
(и консоли ПВМ). Программы не должны включать любой интерактивный
ввод - как, например, запрос о числе подчиненных задач для запуска
или о том, насколько велика решаемая задача. Этот тип информации может
быть считан из файла или помещен в командную строку в качестве аргументов,
но при этом нет никакой возможности пользовательского ввода с клавиатуры
в потенциально удаленную задачу.
Знаете ли Вы, что оптимизационная модель - это математическая модель, имеющая форму задачи математического программирования и цель - нахождение некоторого оптимума.