データの配列を含む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ですか?