我有一个包含一些数据数组的 MPI 程序。每个等级都需要所有数组来完成它的工作,但只能在数组的一部分上工作。在计算步骤之后,我需要每个等级将其计算的数组部分传达给所有其他等级。
我如何有效地实现这一目标?
在伪代码中,我会做这样的事情作为第一种方法:
if rank == 0: // only master rank
initialise_data()
end if
MPI_Bcast(all_data,0) // from master to every rank
compute which part of the data to work on
for ( several steps ): // each rank
execute_computation(part_of_data)
for ( each rank ):
MPI_Bcast(part_of_data, rank_number) // from every rank to every rank
end for
end for
缺点是广播的数量和等级一样多,即障碍。那么我将如何替换 MPI_Bcasts ?
编辑:我可能只是找到了一个提示......我正在寻找的是 MPI_Allgather 吗?