我可以在c ++中重置MPI实例吗?

时间:2014-04-06 20:54:41

标签: c++ mpi

我用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实例,那应该是理想的。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您不需要重置MPI - 您需要有一个点,其中所有实例都是"冻结"只有在所有实例到达这一点之后才继续...

由于它的作业 - 我不会告诉你方法名称,但我希望它有所帮助。
考虑排序的设计,以及您需要所有节点的状态,时间以及如何强制执行它。

这个例子可能会有所帮助(希望它不能解决您的功课,但只是引导您朝着正确的方向前进)Bitonic Sorting with MPI