Разница между запуском программы с 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
это отдельный).