Если пользователь на машине с номером 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.