当许多处理器同时发送到特定处理器时,消息传递是否会顺序传递?

时间:2015-03-07 22:04:03

标签: mpi

当许多处理器同时向特定处理器发送数据时,它们是否按顺序复制?例如,

if(rank==1)
    MPI_Send(&message, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
if(rank==0)
    MPI_Recv(&message, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &status);

T为执行所需的时间。那么,以下代码所需的时间是多少?

MPI_Gather(&message,1,MPI_DOUBLE,messages,1,MPI_DOUBLE,0,MPI_COMM_WORLD);

其中n-1个处理器尝试向主节点发送消息,而我有128个处理器。是T还是127*T

1 个答案:

答案 0 :(得分:1)

你的问题表明你仍然感到困惑。 MPI_Gather()不仅仅是一系列消息。因此,没有提到你的问题实际上意味着Gather没有任何意义。

MPI_Send和MPI_Recv是点2点通信,但MPI_Gather是集体过程。 MPI库有一个特殊的实现,可以避免将它作为一系列发送到目标进程的天真实现。

您可以在文章http://cursuri.cs.pub.ro/~apc/2003/resources/mpi/impl/wmpi/docs/WMPI_EuroPVMMPI99_Silva.pdf中阅读如何实现集体的高绩效。