【发布时间】:2015-08-16 21:52:39
【问题描述】:
我的代码有一个大问题,也许是概念上的问题。我所需要的只是在两个不同的功能中完成工作。一个函数只有一个实例及其主线程,而第二个函数在许多其他节点上有许多实例。
我的一个函数(函数 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 函数以及如何使用?
【问题讨论】:
-
你尝试的时候发生了什么?为什么它不起作用?