c++ - 并行计算 1 到 1000 的数字之和

标签 c++ parallel-processing mpi

以下代码使用 2n 个 CPU 来计算 11000 的总和。每个处理器都会计算该聚合的一部分并独立显示输出。

所有处理器计算的最终结果由第一个处理器收集并聚合,并在输出中显示最终结果。

#include <iostream>
#include <stdio.h>
#include <mpi.h>

static int MyNode, Nodes;
using namespace std;
int main(int* argc, char** argv[])
{
    MPI_Init(argc, argv);
    MyNode = MPI_Comm_rank(MPI_COMM_WORLD, &MyNode);
    Nodes =  MPI_Comm_size(MPI_COMM_WORLD, &Nodes);
    MPI_Status status;
    int sum = 0;
    int accum = 0;
    int FIndex = 1000 * MyNode / Nodes + 1;
    int LIndex = 1000 * (MyNode + 1) /
        Nodes;
    for (int I = FIndex; I <= LIndex; I = I + 1)
        sum += I;
    if (MyNode != 0)
        MPI_Send(&sum, 1, MPI_INT, 0, 1,
            MPI_COMM_WORLD);
    else
        for (int J = 1; J < Nodes; J = J + 1) {
            MPI_Recv(&accum, 1, MPI_INT,
                J, 1, MPI_COMM_WORLD,
                &status);
            sum += accum;
        }
    if (MyNode == 0) {
        cout << "Total Nodes is " << Nodes << ".The sum from 1 to 1000 is: " << sum << endl;
    }
    MPI_Finalize();
    return 0;
}

运行后遇到问题:整数除以零。(MyNode/Nodes)

为什么MyNodeNodes为零?

最佳答案

只需传递对 MyNodeNodes 的引用:

MPI_Comm_rank(MPI_COMM_WORLD, &MyNode);
MPI_Comm_size(MPI_COMM_WORLD, &Nodes);

MPI_Comm_size returns MPI_SUCCESS on success. Otherwise, the return value is an error code.

关于c++ - 并行计算 1 到 1000 的数字之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50446599/

相关文章:

c++ - Visual Studio 2008 构建错误

c++ - 正则表达式无法从字符串中提取双参数子字符串

java - 相当于 java 中的 boost xml (nvp) 序列化

c++ - 字符串类型是标量吗?如果是,为什么?

java - 当计算 a^b 时,为什么 parallel 不起作用但 parallelStream 可以

python - Python中的多处理,每个进程处理一个文件的一部分

python - 使用 pybind11 共享 MPI 通信器

c - MPI_Allgather 的负缩放

parallel-processing - 给定 MPI_Request 数组的 MPI_Waitall() 行为可能具有用于异步发送/接收的未初始化插槽

C++ - lambda 表达式、捕获子句和类成员