首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MPI_Bcast进行MPI通信

使用MPI_Bcast进行MPI通信
EN

Stack Overflow用户
提问于 2011-10-23 11:03:57
回答 2查看 73.7K关注 0票数 79

我尝试使用MPI_Bcast从根节点向所有其他节点广播一条消息。然而,每当我运行这个程序时,它总是在开始时挂起。有人知道它出了什么问题吗?

代码语言:javascript
复制
#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
        int rank;
        int buf;
        MPI_Status status;
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);

        if(rank == 0) {
                buf = 777;
                MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD);
        }
        else {
                MPI_Recv(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
                printf("rank %d receiving received %d\n", rank, buf);
        }

        MPI_Finalize();
        return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-24 01:22:37

对于刚接触MPI的人来说,这是一个常见的困惑来源。您可以使用MPI_Bcast(),而不是使用MPI_Recv()来接收广播发送的数据。

例如,你想要的是:

代码语言:javascript
复制
#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
        int rank;
        int buf;
        const int root=0;

        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);

        if(rank == root) {
           buf = 777;
        }

        printf("[%d]: Before Bcast, buf is %d\n", rank, buf);

        /* everyone calls bcast, data is taken from root and ends up in everyone's buf */
        MPI_Bcast(&buf, 1, MPI_INT, root, MPI_COMM_WORLD);

        printf("[%d]: After Bcast, buf is %d\n", rank, buf);

        MPI_Finalize();
        return 0;
}

对于MPI集体通信,每个人都必须参与;每个人都必须称为Bcast,或Allreduce,或您拥有的任何东西。(这就是为什么Bcast例程有一个参数来指定"root",或者谁在做发送;如果发送者调用bcast,您就不需要这个参数了。)每个人都调用广播,包括接收器;接收器不只是发布接收。

这样做的原因是,集体操作可以涉及通信中的每个人,因此您可以声明您希望发生什么(每个人都获得一个进程的数据),而不是它如何发生(例如,根处理器在所有其他级别上循环并进行发送),因此存在优化通信模式的空间(例如,基于树的分层通信采用log(P)步骤,而不是P个进程的P步骤)。

票数 150
EN

Stack Overflow用户

发布于 2016-08-19 23:34:47

MPI_Bcast是一个集合操作,它必须被所有进程调用才能完成。

并且在使用MPI_Bcast时不需要调用MPI_Recv。有一篇文章可能会对你有所帮助,click here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864075

复制
相关文章

相似问题

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