当许多处理器同时向特定处理器发送数据时,它们是否按顺序复制?例如,
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
?
答案 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中阅读如何实现集体的高绩效。