Difference between running a program with and with

2020-02-12 03:01发布

I implemented a peer-to-peer connection in MPI using MPI_Open_port and MPI_Comm_accept. I run a server and a client program using

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

on different computers. I noticed that

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

also works just fine. Do you know if there is any difference between starting an MPI executable with and without mpirun?

Of course, I can't give additional parameters (e.g. mpirun --mca btl self,openib), and the rank of all processes is 0, which is all totally fine. But is there anything less obvious?

标签: mpi openmpi
1条回答
冷血范
2楼-- · 2020-02-12 03:52

Running without mpirun/mpiexec is called "singleton MPI_INIT" and is part of the MPI recommendations for high quality implementations, found under §10.5.2 in the latest MPI standard document:

A high-quality implementation will allow any process (including those not started with a "parallel application" mechanism) to become an MPI process by calling MPI_INIT. Such a process can then connect to other MPI processes using the MPI_COMM_ACCEPT and MPI_COMM_CONNECT routines, or spawn other MPI processes. MPI does not mandate this behavior, but strongly encourages it where technically feasible.

If a process enters MPI_INIT and determines that no special steps were taken (i.e., it has not been given the information to form an MPI_COMM_WORLD with other processes) it succeeds and forms a singleton MPI program, that is, one in which MPI_COMM_WORLD has size 1.

Using mpirun in your case is the "parallel application" mechanism, mentioned in the standard text. It provides MPI_INIT with the information necessary to establish MPI_COMM_WORLD over all started processes. Without the information from mpirun processes can only run as singleton MPI instances and hence all of them have rank 0 (which is OK, since each MPI_COMM_WORLD is a separate one).

查看更多
登录 后发表回答