我实现了使用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,这是所有完全正常。 但有什么不太明显?
运行没有mpirun
/ mpiexec
被称为“单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
是单独一个)。