Можно ли запустить mpiexec как подпроцесс программы mpiexec?

У меня есть программа A, которая запускается с помощью mpiexec. Эта программа обычно выполняется параллельно, но в одном из шаблонов выполнения она может вызвать внешнюю программу B, которая также поддерживает MPI. Конечно, каждый экземпляр A вызовет один экземпляр B, если B вызывается как последовательный. При параллельном вызове каждый экземпляр A будет вызывать параллельный B.

Одно из возможных решений состоит в том, чтобы главный узел A вызывал параллельный B, оставляя другие процессы A бездействующими, но, конечно, мне нужно перенести параметры mpiexec из пользовательского вызова командной строки A (включая любые особенности, например, взаимодействие с PBS) в внутренний вызов B. Насколько я вижу, это не тривиально и не хорошо работает с другой реализацией MPI (например, MPICH против Open MPI).

Есть ли у кого-нибудь опыт решения такой проблемы?


person Stefano Borini    schedule 29.01.2013    source источник
comment
Как насчет встроенного управления процессами в MPI? Приятно то, что взаимодействие DRM автоматически обрабатывается, поскольку первоначальный mpiexec A — это тот, который порождает процессы в B.   -  person Hristo Iliev    schedule 30.01.2013
comment
@HristoIliev: Возможно, вы что-то поняли, не могли бы вы подробнее рассказать об управлении процессами в MPI?   -  person Stefano Borini    schedule 30.01.2013
comment
Ознакомьтесь с главой Создание процессов и управление ими. стандарта MPI. В Stack Overflow есть несколько примеров — просто найдите MPI_Comm_spawn.   -  person Hristo Iliev    schedule 30.01.2013
comment
@HristoIliev: это действительно интересно. Спасибо. Я изучу это дальше, и если это сработает, пожалуйста, вернитесь, чтобы добавить его в качестве ответа. Я буду держать вас в курсе.   -  person Stefano Borini    schedule 30.01.2013


Ответы (2)


Это невозможно без использования динамического управления процессами MPI 2 и выше. Вы должны использовать вызов MPI, такой как MPI_COMM_SPAWN или MPI_COMM_SPAWN_MULTIPLE, для создания новых процессов MPI. Если вы используете fork и exec или аналогичную функцию для запуска новой команды mpiexec, ваш новый процесс не будет поддерживать MPI, и любой вызов MPI_Init завершится ошибкой. У меня есть опыт, что в проекте.

person Valentin Clement    schedule 25.07.2013

Неважно, возможно ли это — это ужасная идея. Используйте MPI_Comm_spawn(_multiple), как отмечали другие.

И я считаю, что есть, по крайней мере, некоторые сети, где это использование не будет работать и, следовательно, оно не будет переносимым.

person Jeff Hammond    schedule 15.09.2014
comment
Ужасно или нет, это то, что я должен предоставить. Кроме того, я не вижу большой альтернативы, когда вам нужно запустить скрипт, который порождает процесс. - person Stefano Borini; 16.09.2014