Разница между запуском программы с mpirun и без него

я реализовал одноранговое соединение в MPI с помощью MPI_Open_port и MPI_Comm_accept. Я запускаю сервер и клиентскую программу, используя

rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client

на разных компьютерах. Я заметил это

rafael@server1:~$ ./server
rafael@server2:~$ ./client

также работает просто отлично. Знаете ли вы, есть ли разница между запуском исполняемого файла MPI с mpirun?

конечно, я не могу дать дополнительные параметры (например,mpirun --mca btl self,openib), а ранг всех процессов равен 0, что совершенно нормально. Но есть что-нибудь менее очевидное?

1 ответов


работает без mpirun/mpiexec называется " singleton MPI_INIT " и является частью рекомендаций MPI для высококачественных реализаций, найденных в §10.5.2 в последнем стандартном документе MPI:

высококачественная реализация позволит любому процессу (в том числе не запущенному с механизмом "параллельного приложения") стать процессом MPI, вызвав MPI_INIT. Такой процесс может затем подключиться к другим процессам MPI с помощью MPI_COMM_ACCEPT и MPI_COMM_CONNECT подпрограммы или порождают другие процессы MPI. MPI не санкционирует такое поведение, но настоятельно рекомендует его там, где это технически возможно.

если процесс входит MPI_INIT и определяет, что никаких специальных шагов не было предпринято (т. е. ему не была предоставлена информация для формирования MPI_COMM_WORLD С другими процессами) он преуспевает и формирует одноэлементную MPI-программу, то есть ту, в которой MPI_COMM_WORLD имеет размер 1.

используя mpirun в вашем случае это "параллельно приложение " механизм, упомянутый в стандартном тексте. Он обеспечивает MPI_INIT С информацией, необходимой для установления MPI_COMM_WORLD все запущенные процессы. Без информации от mpirun процессы могут работать только как единичные экземпляры, MPI и, следовательно, все они имеют звание 0 (что нормально, так как каждый MPI_COMM_WORLD это отдельный).