Подтвердить что ты не робот

Как начались процессы MPI?

При запуске задания MPI с mpirun или mpiexec я могу понять, как можно начинать каждый отдельный процесс. Однако, без какой-либо магии компилятора, как эти исполняемые файлы обертки связывают устройство (MPI-коммуникатор) с процессами MPI?

Меня интересуют детали или указатель на то, где искать.

4b9b3361

Ответ 1

Сведения о том, как отдельные процессы устанавливают юниверс MPI, специфичны для реализации. Вы должны изучить исходный код конкретной библиотеки, чтобы понять, как это работает. Существуют два почти универсальных подхода:

  • аргументы командной строки: пусковая установка MPI может передавать аргументы порожденным процессам, указывающим, как и где подключиться, чтобы установить юниверс. Именно поэтому MPI необходимо инициализировать, вызвав MPI_Init() с argc и argv в C - таким образом, библиотека может получить доступ к командной строке и извлечь все аргументы, предназначенные для нее;
  • переменные среды: пусковая установка MPI может устанавливать определенные переменные среды, содержимое которых может указывать, где и как подключиться.

Открытый MPI, например, устанавливает переменные среды, а также записывает некоторое состояние юниверса в местоположение диска, известное всем процессам, которые выполняются на одном и том же node. Вы можете легко увидеть специальные переменные, которые использует его исполняемый компонент 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 запускает и считывает эти переменные среды. Затем он подключается обратно к указанному сетевому адресу с помощью процесса "home" mpirun/mpiexec, который затем координирует все возникшие процессы в создании юниверса MPI.

Другие реализации MPI работают аналогичным образом.