使用和不使用 mpirun 运行程序的区别
Posted
技术标签:
【中文标题】使用和不使用 mpirun 运行程序的区别【英文标题】:Difference between running a program with and without mpirun 【发布时间】:2013-03-12 18:17:34 【问题描述】:我使用 MPI_Open_port
和 MPI_Comm_accept
在 MPI 中实现了点对点连接。我使用
rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client
在不同的计算机上。我注意到了
rafael@server1:~$ ./server
rafael@server2:~$ ./client
也可以正常工作。你知道用mpirun
和不用mpirun
启动一个MPI可执行文件有什么区别吗?
当然,我不能给出额外的参数(例如mpirun --mca btl self,openib
),并且所有进程的等级为0,这一切都很好。但是还有什么不那么明显的吗?
【问题讨论】:
【参考方案1】:在没有mpirun
/mpiexec
的情况下运行被称为“singleton MPI_INIT
”,是 MPI 高质量实施建议的一部分,可在最新 MPI 标准文档的 §10.5.2 中找到:
通过调用
MPI_INIT
,一个高质量的实现将允许任何进程(包括那些没有以“并行应用程序”机制启动的进程)成为一个 MPI 进程。然后,这样的进程可以使用MPI_COMM_ACCEPT
和MPI_COMM_CONNECT
例程连接到其他 MPI 进程,或者生成其他 MPI 进程。 MPI 不强制要求这种行为,但在技术上可行的情况下强烈鼓励这样做。如果一个进程进入
MPI_INIT
并确定没有采取特殊步骤(即,它没有被赋予与其他进程形成MPI_COMM_WORLD
的信息)它成功并形成一个单例MPI程序,即,MPI_COMM_WORLD
的大小为 1。
在您的情况下使用mpirun
是标准文本中提到的“并行应用程序”机制。它为MPI_INIT
提供了在所有已启动进程上建立MPI_COMM_WORLD
所需的信息。如果没有来自 mpirun
的信息,进程只能作为单例 MPI 实例运行,因此它们都具有 0
等级(这没关系,因为每个 MPI_COMM_WORLD
都是一个单独的实例)。
【讨论】:
以上是关于使用和不使用 mpirun 运行程序的区别的主要内容,如果未能解决你的问题,请参考以下文章