MPI_BCAST会广播主节点变量并更改从节点变量吗?

时间:2012-10-16 20:09:35

标签: mpi

在以下代码中:

if (rank==0) master();
else slave();

...

void master()
{
int i=0;
}

...

void slave()
{
int i=1;
MPI_BCAST(&i,1,MPI_INT,0,COMM);
}

从节点是否在主节点中广播“i(== 0)”并将所有从节点中的“i”值设置为0?

1 个答案:

答案 0 :(得分:2)

从你发布的内容来看,你的语义是正确的还有点不清楚 - 通信器中的所有进程都必须调用MPI_BCAST,这是MPI的集体操作之一。然后,您的程序就像在MPI_BCAST调用中指定根的进程将消息发送到指定通信器中的所有其他进程,然后接收消息。

您的代码段表明,如果只调用您称​​之为“奴隶”的进程,那么您认为对MPI_BCAST的调用是成功的,这是不正确的。

但是,您的通话语法是正确的。

编辑以回应评论

我相信所有进程都必须执行调用MPI_BCAST的代码段。如果您按照建议,伪代码是这样的:

if (myrank == master) then
   do_master_stuff ...
   call mpi_bcast(...)
end if

if (myrank /= master) then
   call mpi_bcast(...)
   do_worker_stuff ...
end if

然后呼叫将失败;您的程序很可能会停止,直到作业管理或操作系统通知并将其丢弃。 MPI中没有用于跨范围“匹配”对MPI_BCAST(或任何其他集合通信例程)的调用的机制。

你的伪代码应该是这样的

if (myrank == master) then
   do_master_stuff ...
end if

if (myrank /= master) then
   do_worker_stuff ...
end if

! all together now
call mpi_bcast(...)

或您的程序需要的任何变体