0
我用MPI寫了一個排序算法。它是遞歸mergesort,左側的孩子在父進程的相同進程內對數組的一半進行排序,而右側的孩子獲得一個新進程並從父進程接收半數,然後將排序後的數組發送回父進程。現在我需要對一堆整數文件進行排序。這是我目前的設計:我可以在C++中重置MPI實例嗎?
int main()
{
MPI_init();
if(my_rank == 0)
{
foreach data file
{
sort_mpi(array);
}
}
else
{
MPI_Recv(right_array...);
sort_mpi(right_array);
MPI_Finalize();
}
MPI_Finalize();
}
使用此代碼,第一個文件被排序並移動到下一個文件。然而,在for循環的第二個intera中,它只保留在rank 0中,永遠不會進入rank 1。如果我可以在轉到下一個文件之前重置MPI實例,那應該是理想的。有沒有辦法做到這一點?
我應該使用MPI_Isend和MPI_WAIT當我送數組排序回從右孩子家長嗎? – ddd
看看它http://stackoverflow.com/questions/7004068/mpi-process-synchronization – evenro
看起來像我需要一個MPI_Barrier。我應該在進入任何等級之前添加它(在等級== 0之前)嗎? – ddd