Как запускаются процессы MPI?
При запуске задания MPI с mpirun
или же mpiexec
Я могу понять, как можно начать каждый отдельный процесс. Однако, без какого-либо волшебства компилятора, как эти исполняемые файлы-обертки передают расположение (коммуникатор MPI) процессам MPI?
Меня интересуют подробности или указатель на то, где искать.
1 ответ
Детали того, как отдельные процессы устанавливают универсум MPI, зависят от конкретной реализации. Вы должны изучить исходный код конкретной библиотеки, чтобы понять, как она работает. Есть два почти универсальных подхода:
- Аргументы командной строки: средство запуска MPI может передавать аргументы порожденным процессам, указывающие, как и где подключиться, чтобы установить юниверс. Вот почему MPI должен быть инициализирован путем вызова
MPI_Init()
сargc
а такжеargv
в C - таким образом библиотека может получить доступ к командной строке и извлечь все аргументы, которые для нее предназначены; - Переменные среды: средство запуска MPI может устанавливать конкретные переменные среды, содержимое которых может указывать, где и как подключаться.
Например, Open MPI устанавливает переменные среды, а также записывает некоторые состояния юниверса в расположение диска, известное всем процессам, работающим на одном узле. Вы можете легко увидеть специальные переменные, которые использует его компонент времени выполнения ORTE (среда выполнения OpenMPI), выполнив такую команду, как mpirun -np 1 printenv
:
$ mpiexec -np 1 printenv | grep OMPI
... <many more> ...
OMPI_MCA_orte_hnp_uri=1660944384.0;tcp://x.y.z.t:43276;tcp://p.q.r.f:43276
OMPI_MCA_orte_local_daemon_uri=1660944384.1;tcp://x.y.z.t:36541
... <many more> ...
(IP-адреса изменены по соображениям безопасности)
Когда дочерний процесс запускается удаленно и MPI_Init()
или же MPI_Init_thread()
вызывается, ORTE запускает и читает эти переменные окружения. Затем он подключается обратно по указанному сетевому адресу с "домом" mpirun
/mpiexec
процесс, который затем координирует все порожденные процессы в создании вселенной MPI.
Другие реализации MPI работают аналогичным образом.