打开MPI,确定要发送到的进程的级别

时间:2014-03-27 23:44:44

标签: openmpi rank

我有两个不同的可执行文件,每个都有一个特定的角色。其中一个进程通过调用 MPI_isend 发送其他信息。但我怎么知道其他过程的等级? 我发现当我运行我的堆栈时,如下所示,exe1,即接收进程,似乎始终具有等级0,exe2似乎总是具有等级1.因此,如果我从exe2发送到等级0,则接收消息。但我在这里遗漏了什么,看起来很复杂吗?

mpirun -np 1 exe1:-np 1 exe2

2 个答案:

答案 0 :(得分:0)

可以使用mpiexec的各种CLI参数来控制进程到Open MPI中的排名的映射,其中较新的版本(如1.7.x)支持比旧版本更精细的控制。默认情况下,排名遵循在提供的插槽中放置进程的顺序。因此,-np 1 exe1 : -np 1 exe2始终会导致exe1排名0exe2排名1排名MPI_COMM_WORLD。如果您改用-np 3 exe1 : -np 2 exe2,则会收到以下信息:

rank    executable
------------------
0       exe1
1       exe1
2       exe1
3       exe2
4       exe2

也可以将exe1exe2作为单独的MPI作业启动,并使它们通过内部通信器相互连接,但这被视为高级MPI主题。

答案 1 :(得分:0)

另一种解决方案是,让接收进程exe1首先发送其排名的消息。当第二个进程使用该消息的标记侦听来自任何源的消息时,它将接收第一个进程的等级。