Параллельные вычисления в ИММ УрО РАН
 
 

ИПМ им. М.В. Келдыша РАН.

Отдел ИВСиЛС, сектор эксплуатации МВС.

А.В. Баранов

А.О. Лацис

C.В. Сажин

М.Ю. Храмцов

 

КРАТКАЯ ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

ПО ПОДГОТОВКЕ И ЗАПУСКУ ПРОГРАММ

 НА МВС-1000/16.

 

Список коммуникационных сред (библиотек, трансляторов и т. п.), доступных пользователям МВС-1000/16, является открытым. Как минимум, предоставляется возможность использовать следующие средства: MPI (реализация MPICH), MPI (реализация LAM), библиотека TCP Router.

 

1. Команды подготовки и запуска программ.

Подготовка программ, использующих MPI, происходит традиционными командами: mpicc, mpif77 и др. При использовании MPICH и LAM требуются разные версии этих команд. По умолчанию в пути у пользователей находятся варианты для MPICH. Если требуется скомпилировать для LAM, следует указывать полный путь к соответствующим командам, находящимся в /usr/bin.

Таким образом:

mpicc –o prog prog.cтранслировать для MPICH,

/usr/bin/mpicc –o prog prog.cтранслировать для LAM.

 

Запуск программ, подготовленных для MPICH, производится командой mpirun, при этом для указания числа процессоров в задаче используется ключ “-np”, например:

mpirun –np 4 prog – запустить на 4-х процессоров программу, подготовленную для MPICH.

Для запуска программ, рассчитанных на LAM, следует использовать команду lamrun, например:

lamrun –np 4 prog запустить на 4-х процессорах программу, подготовленную для LAM.

Программы, использующие TCP Router, не требуют для подготовки специальных команд. Достаточно указать библиотеку и, в случае программы на “C”,  соответствующий include-файл. Примеры программ, а также команд для их трансляции, можно найти в

/common/router.example

Для запуска подготовленных таким образом программ используется команда routerrun, например:

routerrun –np 4 progзапустить на 4-х процессорах программу, подготовленную для TCP Router.

Все упомянутые выше команды запуска (mpirun, lamrun, routerrun) имеют, помимо ключа “-np”, еще ряд полезных ключей. Подробнее о них можно прочитать в «Инструкции пользователю МВС-1000/16», в описании команды mpirun. Сказанное там о дополнительных ключах mpirun в равной мере относится и к командам lamrun и routerrun.

 

2. Некоторые особенности запуска для TCP Router.

            Запуск программ для TCP Router несколько отличается от запуска программ для обоих вариантов MPI.

Во-первых, стандартные выводы от каждого из процессоров, в отличие от случая MPI, направляются в отдельные файлы, а не в один общий. В тот файл, который называется “output” и который система запуска считает единым стандартным выводом всей параллельной программы, попадает в случае программ на router только стандартный вывод 0-го процессора. Стандартные выводы 1-го, 2-го и т. д. процессоров попадают в расположенные в той же директории файлы “output1”, “output2”  и т. д., соответственно. Эти файлы недоступны для просмотра командой mout, но могут просматриваться пользователем вручную. Подробнее о команде mout, перенаправлении стандартного вывода, размещении соответствующих файлов и подобных вопросах можно прочитать в «Инструкции пользователю».

Во-вторых, при использовании router не полностью автоматизировано управление ресурсами, необходимыми для запуска.

В некоторых, довольно редких случаях это может приводить к отказам при попытке запуска программы командой routerrun, причем в файле output появится диагностика, содержащая слова router.conf”. Если с Вами такое случилось, прочитайте все изложенное ниже, в противном случае – не читайте.

 При запуске командой routerrun параллельной программы в ее текущей директории создается служебный файл с фиксированным именем “router.conf”,  содержимое которого специфично для данного конкретного запуска. Пока на всех процессорах не отработает обращение к функции rf_create(), данный файл не должен ни модифицироваться, ни удаляться. Следовательно, некоторое время после запуска программы командой routerrun запуск той же командой программ из той же текущей директории невозможен. С другой стороны, время, в течение которого запуск невозможен, точному определению не поддается: теоретически ничто не мешает прикладному программисту написать программу, в которой все или некоторые процессы вызывают rf_create(), скажем, через полчаса или час после начала работы, хотя обычно речь идет все-таки о секундах.

В результате возможно появление двух проблем:

1). Вы запускаете программу из той же текущей директории сразу после запуска предыдущей, когда предыдущий файл router.conf еще существует. В этом случае запуск не произойдет, причем в файле output появится соответствующая диагностика. Требуется подождать, пока router.conf исчезнет (его автоматически удалит последний сработавший rf_create() предыдущей программы), и повторить запуск.

2). При выполнении предыдущей программы произошла авария до того, как во всех процессах проработало обращение к rf_create(). В этом случае предыдущий router.conf удалить будет некому, и Вам придется сделать это вручную, чтобы запуск из этой директории снова стал возможен.

            Рекомендации по преодолению указанных трудностей:

1). Всегда начинайте Вашу программу с вызова rf_create() или ее Фортранного эквивалента. До этого вызова не выполняйте никаких рискованных или непредсказуемых по продолжительности действий, как то: обработка параметров командной строки, операции деления и умножения, файловый ввод/вывод.

2). Избегайте одновременного исполнения программ с одной и той же текущей директорией. На практике это совсем не трудно, поскольку подавляющее большинство реальных расчетных программ открывают на запись в текущей директории файлы с фиксированными именами, что делает одновременное выполнение нескольких таких программ бессмысленным.