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