Запустить исполняемый файл MPI из другой программы MPI.

У меня есть две программы, 1.exe и 2.exe, каждая из которых использует MPI. Я хочу использовать mpirun для запуска 1.exe, который затем вызывает 2.exe и ждет его завершения, прежде чем продолжить. Мне не нужно обмениваться данными между программами, а только читать файл, сгенерированный 2.exe, и обрабатывать этот вывод. После запуска 2.exe должен использовать все процессоры, выделенные для 1.exe, так как он просто ждет. Есть ли хороший способ вызвать 2.exe из 1.exe?

Я пробовал MPI_Comm_Spawn, но кажется, что мне нужно настроить интеркоммуникатор между 1.exe и 2.exe, чтобы дождаться завершения 2.exe. Однако у меня нет доступа к исходникам 2.exe для настройки этого коммуникатора.


person kjaym    schedule 11.01.2013    source источник
comment
ты решил эту проблему? Я только что задал похожие вопросы без ответов: stackoverflow.com/questions/15678943/   -  person Denis    schedule 28.03.2013
comment
Не очень элегантное решение, но в итоге я просто прочитал файл, написанный вызываемой программой. Я просто сплю на короткое время, читаю файл, затем выхожу, если он находит строку, говорящую о завершении программы. Я хотел бы что-то более надежное, например, waitpid, но мне не удалось заставить что-то подобное работать с mpi.   -  person kjaym    schedule 09.04.2013
comment
не будет ли проблемой, если у вас запущено больше процессов MPI, чем фактическое количество ядер? даже если некоторые из них просто спят и ждут, пока в файле появится эта строка?   -  person Denis    schedule 10.04.2013
comment
Ребенок просто делит процессоры с родителем, поэтому не должно быть проблем, если родитель спит. Будет некоторый конфликт, когда родитель читает файл, но это не должно быть слишком плохо, если он спит в течение длительного времени по сравнению со временем, затрачиваемым на чтение и обработку файла. На практике это работает, но, как я уже сказал, я бы предпочел лучшее решение, если оно существует.   -  person kjaym    schedule 10.04.2013


Ответы (1)


Я могу ошибаться, но скажу, что mpirun запустил n экземпляров 1.exe, каждый экземпляр может породить один экземпляр 2.exe с просьбой выполнить задание (через параметры командной строки, переменные среды или любой другой механизм, который 2.exe обычно использует для знаете, что делать), этот экземпляр будет использовать процессор, выделенный для экземпляра 1.exe.

Затем 1.exe должен просто дождаться завершения 2.exe, например. используя waitpid: http://linux.die.net/man/3/wait или мониторинг файла, созданного 2.exe.

Важно то, что 1.exe не активен, поэтому не будет потреблять свой ресурс, но позволит 2.exe использовать его полностью.

person Pragmateek    schedule 13.01.2013
comment
может ли один выбранный экземпляр 1 запустить 2 параллельно и позволить ему использовать все процессоры? - person Denis; 28.03.2013