MPI多个发送和接收在循环中
MPI multiple send and receive in loop
我的代码有一个大问题,可能是概念上的。我只需要在两个不同的函数中做功。一个函数只有一个实例和它的主线程,而第二个函数在许多其他节点上有许多实例。
我的一个函数(函数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函数以及如何使用?
那么,当你尝试你所描述的方法时会发生什么呢?
你真的在这里使用线程还是你把线程编程和消息传递混为一谈了?习惯的MPI更像是
for(int i = 1 ; i < nprocs;i++) {
...
}
SEND可能会阻塞,所以您可能应该使用ISEND并测试/等待完成。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 使用 MPI 的 C++ 中的并行 for 循环
- 如何在 C++ 中使用 MPI 对简单循环进行负载平衡
- 在 MPI 中使用循环
- MPI将嵌套循环中的变量写入单个文件
- MPI多个发送和接收在循环中