c++ - MPI_Get 由于不同的循环长度而在循环中挂起
问题描述
我正在学习在循环中使用 MPI_Get,但程序冻结,因为一个循环结束,而另一个没有。这是我为重新创建问题而编写的简单代码
using vector_real = std::vector<double>;
int main(int argc, char* argv[]){
int total_rank, rank;
int N=5;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &total_rank);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
vector_real Array(N-rank);
double a ;
for (int i=0; i<N-rank; i++){
Array[i] = rank;
}
MPI_Win windowX;
MPI_Win_create(&Array[0], N, sizeof(double), MPI_INFO_NULL, MPI_COMM_WORLD, &windowX);
MPI_Win_fence(0, windowX);
std::cout << "rank=" << rank<< " starts MPI_Get with loop length="<< N-rank << "\n";
for (int i=0; i<N-rank; i++){
MPI_Win_fence(0, windowX);
MPI_Get(&a, 1, MPI_DOUBLE, 0, 2, 1, MPI_DOUBLE, windowX);
MPI_Win_fence(0, windowX);
std::cout <<"rank="<< rank << " got a =" << a <<"\n";
}
std::cout <<"rank="<< rank<<" ended !!!\n";
MPI_Finalize();
}
输出看起来像这样
mpirun -np 2 ./test.o
rank=0 starts MPI_Get with loop length=5
rank=1 starts MPI_Get with loop length=4
rank=1 got a =0
rank=1 got a =0
rank=0 got a =0
rank=0 got a =0
rank=0 got a =0
rank=1 got a =0
rank=1 got a =0
rank=1 ended !!!
rank=0 got a =0
我们看到 rank=1 有一个较小的循环,所以它首先完成,但是 rank=0 的循环并没有结束。
有谁知道如何解决这个问题?谢谢
解决方案
推荐阅读
- amazon-web-services - 提供来自 AWS 的 Apigateway APIKeys t0 开发人员和 QA
- tensorflow - mnist 数字分类,但使用您自己的数据集
- r - 如何从列表的子集构建列表
- memory - 是否可以在用 Visual Studio 编写的 MexGateway 代码中将变量预分配给 CPU/GPU 内存?
- postman - 如何使用邮递员绕过 cloudflare 身份验证?
- python - 使用 python 和 selenium 从主页中提取所有 youtube 视频 url
- combinatorics - 瓮问题的泛化——三个子集的交集
- coordinates - 通过坐标查找正射影像
- php - 从数据库中获取特定日期之前的所有记录
- javascript - 在js中对文本文件进行采样