MPI_Accumulate后得到不同的答案
Getting different answers after MPI_Accumulate
在下面的代码中,每次执行后我都会得到不同的答案,例如 1、2、3 mpirun -n 3 ./a.out
而正确的答案是 3。为什么会这样?
#include <mpi.h>
#include <iostream>
int main()
{
MPI_Init(NULL, NULL);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int* a;
MPI_Win win;
MPI_Win_allocate(size*sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &a, &win);
int one = 1;
int target_proc = 0;
int shift = target_proc;
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target_proc, 0, win);
MPI_Accumulate(&one, 1, MPI_INT, target_proc, shift, 1, MPI_INT, MPI_SUM, win);
MPI_Win_unlock(target_proc, win);
if (rank == target_proc)
std::cout << a[shift] << std::endl;
MPI_Win_free(&win);
MPI_Finalize();
return 0;
}
根本原因是您的程序中存在竞争条件:没有什么能保证排名 0 会在第一个、第二个或最后一个退出MPI_Win_unlock()
因此得到不同的结果。
一个简单的解决方法是添加
MPI_Barrier(MPI_COMM_WORLD);
打印前a[0]
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 首要问题的答案让值班员搞错了
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 使用 bfs 解决连接组件问题时得到错误的答案
- 同一对象的"sizeof"的不同答案
- 递归求和任务的错误答案
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么C++程序在太大时返回代码而不是答案?
- 不理解为什么代码没有产生所需的答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 我的程序将 26 个字母转换为 ascII 没有显示正确答案
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- C++ 中 pow() 函数的输出没有给出准确的答案
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- 给出不精确答案的递归Karatsuba算法
- 我的 cout 上有一个奇怪的输出,它把答案放在第一位,然后在我调用它的地方放一个奇怪的输出.我该怎么办?
- 对类的未定义引用,常见答案尚未解决
- C ++分割错误,为什么使用"long long"我没有得到答案?