我用MPI写了一个排序算法。它是递归mergesort,左子类在与父级相同的进程内对数组的一半进行排序,而右子组获取一个新进程并从父级接收一半数组,然后将已排序的数组发送回父级。现在我需要对一堆整数文件进行排序。这是我目前的设计:
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循环的第二次交互中,它只保留在0级并且永远不会排在第1级。如果我可以在转到下一个文件之前重置MPI实例,那应该是理想的。有没有办法做到这一点?
答案 0 :(得分:1)
您不需要重置MPI - 您需要有一个点,其中所有实例都是"冻结"只有在所有实例到达这一点之后才继续...
由于它的作业 - 我不会告诉你方法名称,但我希望它有所帮助。
考虑排序的设计,以及您需要所有节点的状态,时间以及如何强制执行它。
这个例子可能会有所帮助(希望它不能解决您的功课,但只是引导您朝着正确的方向前进)Bitonic Sorting with MPI