MPI多次发送和接收循环

时间:2015-06-02 22:00:21

标签: c++ mpi

我的代码存在很大问题,可能在概念上也是如此。我只需要完成两个不同功能的工作。一个函数只有一个实例及其主线程,第二个函数在许多其他节点上有许多实例。

我的一个功能(功能A)是向所有节点发送3部分数据,而另一个功能B应该在每个节点接收它。接下来,函数A应该等待结果。当它们准备就绪时,每个节点中的功能B应该将一部分数据发送到功能A,并且所有节点都重新开始。

它应该像这个示例代码一样工作:

void prepareData() { //function A
  for(int i = 1 ; i < threads;i++) {
    MPI_Send(...); //first part of data
    MPI_Send(...); //second part of data
    MPI_Send(...); //third part of dat
  }
  //Here this function (A) should wait because second function (B) is computing data
  for(int i=1;i<threads;i++) {
    MPI_Recv(...); //receiving data from function B
  }
}

void computeData() { //function B
  while(isDone) {
    MPI_Recv(...); //first part of data
    MPI_Recv(...); //second part of data
    MPI_Recv(...); //third part of data
  //Here all this data are computed and then sending to main function
    MPI_Send(...); //sending data to function A
 }
}

有谁知道怎么做以及我应该使用哪种MPI功能以及如何使用?

1 个答案:

答案 0 :(得分:1)

那么,当您尝试所描述的方法时会发生什么?

你真的在这里使用线程还是将线程编程与消息传递混为一谈?惯用MPI更像是

for(int i = 1 ; i < nprocs;i++) {
...
}

SEND可能会阻止,因此您应该使用ISEND并测试/等待完成。