首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数字1到1000的并排和

数字1到1000的并排和
EN

Stack Overflow用户
提问于 2018-05-21 10:14:40
回答 2查看 728关注 0票数 2

下面的代码使用2n CPU计算11000的总和。每个处理器计算这个聚合的一部分,并独立地显示输出。

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

代码语言:javascript
复制
#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;
}

运行后,我遇到一个问题:Integer division by zero. (MyNode /Node)

为什么MyNodeNodes是零?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-21 10:21:56

只需传递对MyNodeNodes的引用

代码语言:javascript
复制
MPI_Comm_rank(MPI_COMM_WORLD, &MyNode);
MPI_Comm_size(MPI_COMM_WORLD, &Nodes);

MPI_Comm_size在成功时返回MPI_SUCCESS。否则,返回值是错误代码。

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 10:18:13

以下函数返回错误(如果有的话)

代码语言:javascript
复制
MyNode = MPI_Comm_rank(MPI_COMM_WORLD, &MyNode);
Nodes =  MPI_Comm_size(MPI_COMM_WORLD, &Nodes);

由于您将错误状态存储在MyNode和节点中,因此(在本例中没有错误),MyNOde和节点的值为0。

把它改成这个

代码语言:javascript
复制
int err;
err = MPI_Comm_rank(MPI_COMM_WORLD, &MyNode);
err =  MPI_Comm_size(MPI_COMM_WORLD, &Nodes);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50446599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档