使用 MPI_Bcast 进行 MPI 通信

2023-11-23

我正在尝试使用 MPI_Bcast 将消息从根节点广播到所有其他节点。然而,每当我运行这个程序时,它总是在开始时挂起。有人知道这是怎么回事吗?

#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;
}

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

例如,你想要的是这样的:

#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 集体通信,everyone必须参加;每个人都必须调用 Bcast,或者 Allreduce,或者你有的东西。 (这就是为什么 Bcast 例程有一个参数指定“root”,或者谁在发送;如果只有发送者调用 bcast,则不需要这个。)每个人都调用广播,包括接收者;接收者不只是发布接收信息。

这样做的原因是集体操作可以让每个人都参与通信,这样你就可以陈述你想要发生的事情(每个人都获得一个进程的数据),而不是how它发生了(例如,根处理器在所有其他级别上循环并执行发送),因此存在优化通信模式的范围(例如,基于树的分层通信需要log(P)步骤而不是PP 过程的步骤)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MPI_Bcast 进行 MPI 通信 的相关文章

  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • NHibernate手动控制抓取

    我正在使用 NHibernate 我想控制手动获取相关实体 这是我的示例实体 public class Post public virtual long Id get set public virtual string Title get
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • 字典的线程安全

    如果我有一个 Dictionary
  • ctypes.ArgumentError:不知道如何转换参数

    我在C库中定义了一个函数 如下所示 int Test char str1 int id1 char str2 float val float ls 我想在Python中使用它 所以我编写了以下Python代码 str1 a str2 b i
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 如何使用“std::array”作为“template class”形式的模板参数?

    请考虑以下事项tree class template
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • 我使用 tm/mktime 是否错误,如果没有,有解决方法吗?

    我认为下面的程序应该输出从公元 1 年到 1970 年每年第一天到 1970 年的秒数 前面是time t在编译它的系统上 CHAR BIT是一个宏 所以我认为你不能只是复制编译后的可执行文件并假设它是正确的 尽管实际上一切都使用 8 位c
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • Android - 如何从 url 读取文本文件?

    我将一个文本文件 txt 上传到服务器 现在我想读取该文本文件 我尝试了这个例子 但没有运气 ArrayList
  • 访问多维数组的元素是否越界未定义行为?

    请原谅这个令人困惑的问题标题 但我不确定如何更清楚地表达它 在 C 语言中 越界访问数组被归类为未定义行为 然而 数组元素保证在内存中连续排列 并且数组下标运算符是指针算术的语法糖 例如x 3 x 3 因此 我个人希望下面的代码的行为是明确
  • Hash::make('password') 每次调用返回不同的结果

    所以 标题基本上描述了我的问题 我的 Hash make 疯了 我已经创建了一个带有哈希密码的用户表 但我无法让 Laravel 接受我的凭据 我认为问题出在 Hash make 中 因此 测试这段代码 Route get function
  • 如何复制word文档的内容?

    我想编写一个程序 从 Word 文档复制文本并将其粘贴到另一个文档 我正在尝试使用python docx图书馆 我可以使用以下代码来做到这一点 但它不会复制bold italic 下划线或彩色部分原样 仅包含其文本 from docx im
  • Rails 5 db:重置不起作用

    我想重置 Rails 5 项目的数据库 但是rails db reset命令不起作用 错误信息 Permission denied unlink internal C sites5 dawnrebirth db development sq
  • 在 div 中包围希伯来语和英语文本

    我正在尝试在段落中的希伯来语和英语句子周围添加跨度标签 例如 那么 到底怎么样了 会变成 span so span span span span all whats up span span span 我一直在尝试使用正则表达式 但它只是删
  • 将html模板文件合并到一个JS文件中

    我有 HTML 模板文件 下划线模板语法 这些文件以 HTML 格式保存 因此很容易编辑 IDE 语法突出显示 我不想用ajax获取它们 而是将它们全部组合起来并将它们包含为js file 使用 GULP 作为我的任务运行程序 我希望它能以
  • 如何限制通过 cin 输入的字符数?

    我希望限制用户可以输入的字符数 使用cin 例如 我可能希望将其限制为两个字符 我该怎么做 我的代码如下所示 cin gt gt var 您可以使用setw cin gt gt setw 2 gt gt var http www cplus
  • NSPredicate iPhone 3.2 SDK核心数据“IN子句”NSInvalidArgumentException异常

    我有一个收藏Calendar对象并希望通过它们来查询它们service id财产 我在 iPhone 3 2 SDK 上使用 Core Data 和 sqlite calendars是一个 NSArray 结果NSFetchRequest
  • 谁最终决定什么是通用类型?

    我有这个功能 public static T2 MyFunc
  • 在 Plone 构建设置中查找需求规格

    我有一个 Plone 网站 大约 4 2 4 从version txt在根目录中 我想更新到最新版本 我发现这个操作方法 截至目前 4 3 4 我继承了过多的固定版本 这些版本没有记录并且可能已经过时 当评论我的versions cfg u
  • 如何设置 JSplitPane-Divider 折叠/展开状态?

    我有一个带有 JSplitPane 的 JFrame 它是 OneTouchExpandable 我想记住 JFrame 上 JSplitPane 的最后一个分隔符位置 并在重新打开 JFrame 时恢复位置 它工作得很好 但如果用户通过
  • 使用存储库的工作单元模式中的依赖项注入

    我想创建一个工作单元类 以类似的方式包装存储库this 我遇到的问题是尝试通过用 IRepository 接口替换示例中的通用存储库来实现依赖项注入 在链接文章的 uow 中 他们使用 getter 来检查存储库是否已实例化 如果没有则实例
  • npm install puppeteer 显示权限被拒绝错误

    我无法安装puppeteer作为项目依赖项 我尝试重新安装节点 有人知道如何解决这个问题吗 运行 Ubuntu 17 10 x64 sudo apt get purge nodejs curl sL https deb nodesource
  • 新手势 - 从左向右滑动 - 作为旧应用程序中 UINavigationController 中“后退”按钮的快捷方式

    iOS 7 采用了一种新手势 即在屏幕上从左向右滑动作为 UINavigationController 中 后退 按钮的快捷方式 我的应用程序似乎没有免费获取此行为 我需要做什么才能让我的 iOS 应用程序 在 Xcode 4 6 3 中为
  • Android Camera2 API 显示处理后的预览图像

    新的 Camera 2 API 与旧的有很大不同 向管道的用户部分显示操纵的相机帧让我感到困惑 我知道有很好的解释使用 Android L 和 Camera2 API 处理相机预览图像数据但显示帧仍然不清楚 我的问题是 在经过一些处理后 在
  • 用传单绘制特定国家的地图

    我想使用该包leaflet用R绘制特定国家的地图 如意大利 西班牙等 我用函数检查了基本示例setView 我尝试为纬度和经度的 arg 给出两个值的向量 m lt leaflet gt addTiles gt Add default Op
  • NUMA 获取当前节点/核心

    我在 Linux 上使用 libnuma 我的线程应该知道它们正在运行的节点 核心 是否有可能以某种方式获取当前线程的节点 核心 我已经浏览了文档 但没有找到这样的功能 我找到了这个解决方案 include
  • 限制完成时的 IntelliJ IDEA 导入建议

    当我输入需要导入的类的名称时 IntelliJ 会亲切地弹出一个建议列表 然而 大多数时候 这些建议是我永远不想导入的东西 尤其是偶然的 比如java awt 有没有办法防止我永远不会导入的包出现在完成列表中 我已经搜索了这些选项 但没有找
  • 使用 MPI_Bcast 进行 MPI 通信

    我正在尝试使用 MPI Bcast 将消息从根节点广播到所有其他节点 然而 每当我运行这个程序时 它总是在开始时挂起 有人知道这是怎么回事吗 include