Инструкция по компиляции и запуску параллельных программ, страница 2

Если пользователь на машине с номером 02 выполняет команду:   run.sh  02  4  file.exe, то:

- ветвь параллельной программы с номером 0 будет запущена на машине с номером 02,

- ветвь параллельной программы с номером 1 будет запущена на машине с номером 03,

- ветвь параллельной программы с номером 2 будет запущена на машине с номером 04, и

- ветвь параллельной программы с номером 3 будет запущена на машине с номером 05.

Если пользователь на машине с номером 12 выполняет команду:   run.sh  12  4  file.exe, то

- ветвь параллельной программы с номером 0 будет запущена на машине с номером 12,

- ветвь параллельной программы с номером 1 будет запущена на машине с номером 01,

- ветвь параллельной программы с номером 2 будет запущена на машине с номером 02, и

- ветвь параллельной программы с номером 3 будет запущена на машине с номером 03.

Т.е. при запуске на четырех машинах 0-я ветвь выполняется на машине с номером указанным в команде и каждая следующая ветвь на машине с большим на единицу номером.

Если пользователи на любой машине с номерами  01 ÷ 12 выполняют команду:  run.sh  01 12  file.exe, то:

- ветвь параллельной программы с номером 0 будет запущена на машине с номером 01,

- ветвь параллельной программы с номером 1 будет запущена на машине с номером 02,

- ветвь параллельной программы с номером 2 будет запущена на машине с номером 03, и т.д.

- ветвь параллельной программы с номером 11 будет запущена на машине с номером 12. Такое распределение ветвей одинаково для всех программ, запускаемых с разных машин. 

Некоторые замечания:

Как известно MPI создает виртуальную среду (программно реализуемые компьютеры и программно реализуемые каналы связей между компьютерами) и работает в ней. Т.е. MPI  позволяет абстрагироваться от конфигурации конкретной физической вычислительной системы.  Поэтому обычно при работе на такого рода кластерах создается специальный файл, в котором записаны имена физических машин, на которых предполагается запускать параллельную программу. Этих имен должно быть записано в этом файле столько, сколько необходимо ветвей параллельной программы. Имена могут повторяться. В этом случае на конкретном физическом компьютере будет реализовываться столько ветвей параллельной программы, сколько раз будет повторяться это имя в списке. В команде запуска этот файл указывается опцией: -machinefile. На кластере ФПМИ  введено ограничение, а именно: для пользователя  machinefile скрыт и пользователю предлагается только два варианта machinefile в скрытом виде - в одном варианте записано 4-е имени машин, во втором - 12 имен машин. Имена машин в этих machinefile не повторяются, это значит, что каждая ветвь параллельной программы будет выполняться на отдельном физическом компьютере.

machinefile с 12-тью компьютерами один и тот же для всех пользователей, работающих на компьютере с любым номером. Это значит, для всех таких пользователей ветвь с номером 0 будет выполняться на компьютере с номером 01, ветвь с номером 1 будет выполняться на компьютере с номером 02, и т.д. и, на конец, ветвь с номером 11 будет выполняться на компьютере с номером 12. Т.е. запуская программу с компьютера с любым номером, распределение параллельных ветвей будет одинаковым и таким, как указано выше. Все пользователи на каждом из 12-ти компьютерах могут одновременно выполнять команду запуска своей параллельной программы с 12-тью параллельными ветвями. И все ветви этих программ будут распределены, как указано выше и реализовываться с пересечением на физических машинах.  

С каждым номером машины связан свой machinefile, в котором записано только 4-е имени машин. Для машины 01 – это имена машин 01, 02, 03, 04; для машины 02 – имена машин 02, 03, 04, 05. И т.д. для машаны 12 – имена машин 12, 01, 02, 03.

Конкретный пример программы

Имя программы:    hello.c

#include<mpi.h>

#include<stdio.h>

#include<unistd.h>

main(int argc, char** argv)

{

int rank;

char HostName[256];

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

gethostname(HostName,256);

printf(“Hello, My rank=%d Host=%s\n”,rank,HostName);

MPI_Finalize();

return(0);

}

Компиляция:

mpicc –o  hello.exe  hello.c 

Запуск (на 4-х компьютерах):

run.sh   01  4  hello.exe 

По   Ctrl o  смотрим результат. Каждая ветвь параллельной программы выводит свой номер (rank) и имя компьютера (Host), на котором выполняется данная ветвь.  

Эту же программу без перекомпиляции запускаем на 12-и компьютерах:

run.sh   01  12  hello.exe 

Смотрим результат.

Лабораторные работы по параллельному программированию

Лабораторные работы по параллельному программированию для студентов приведены на следующем сайте:

http:// ssdonline.sscc.ru/korneev

Здесь можно найти краткое описание самых распространенных в мире языков параллельного программирования  MPI и  OpenMP.

Доцент кафедры ПВТ  к.т.н. Корнеев В.Д.,  2005