我的代码存在很大问题,可能在概念上也是如此。我只需要完成两个不同功能的工作。一个函数只有一个实例及其主线程,第二个函数在许多其他节点上有许多实例。
我的一个功能(功能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功能以及如何使用?
答案 0 :(得分:1)
那么,当您尝试所描述的方法时会发生什么?
你真的在这里使用线程还是将线程编程与消息传递混为一谈?惯用MPI更像是
for(int i = 1 ; i < nprocs;i++) {
...
}
SEND可能会阻止,因此您应该使用ISEND并测试/等待完成。