gpt4 book ai didi

parallel-processing - MPI 内部 : Communication implementation between processes

转载 作者:行者123 更新时间:2023-12-04 09:28:49 32 4
gpt4 key购买 nike

我试图弄清楚实际的进程通信是如何在 MPI 通信器内部发生的。我有 8 个节点,每个节点有 12 个核心(运行 96 个实例)。每个进程都分配了唯一的等级,并且进程能够相互通信。那么进程如何获得唯一的排名并设法发送实际消息呢?根据一些幻灯片,有开放运行时环境(ORTE),它“驻留在在该单元上启动进程的机器上。(例如,集群的前端)。负责在单元上启动进程。监控单元健康(节点、进程)。将单元状态报告给宇宙的其余部分。在单元之间路由通信。”我还没有找到任何 MPI 实现的开发人员文档和/或架构论文。任何人都知道如何实现 MPI 进程之间的实际通信,即他们如何设法找到自己并获得分配的等级?是否有一个中央或多个中央 MPI 内部流程用于路由(例如,每个节点)?

谢谢,
大卫

最佳答案

您正在谈论的机制严格依赖于实现。 MPI 是一个中级标准,它位于硬件和操作系统提供的通信机制之上。

ORTE 是 Open MPI 的一部分——当今流行的通用 MPI 实现之一。还有 MPICH 和 MPICH2 及其变体(例如 Intel MPI)。大多数 super 计算机供应商都提供自己的 MPI 实现(例如,IBM 为 Blue Gene/Q 提供了修改后的 MPICH2)。

Open MPI 的运作方式是它被划分为多个层,每一层的功能由大量动态加载的模块提供。有一种评分机制应该在特定条件下选择最佳模块。

所有 MPI 实现都提供了一种机制来执行所谓的 SPMD 启动。本质上,MPI 应用程序是一种特殊的 SPMD(单程序多数据)——运行单个可执行文件的多个副本,并采用消息传递作为通信和协调机制。 SPMD 启动器获取执行节点列表,远程启动进程并建立它们之间的关联和通信方案(在 Open MPI 中,这称为 MPI Universe)。它是创建全局 MPI 通信器 MPI_COMM_WORLD 并分配初始等级分配的一个,它可以提供诸如将进程绑定(bind)到 CPU 内核之类的选项(在 NUMA 系统上非常重要)。一旦进程启动,一些识别机制就可用(例如,等级和 IP 地址/TCP 端口之间的映射)可能会采用其他寻址方案。例如,Open MPI 使用 ssh 启动远程进程, rsh或者它可以使用不同资源管理系统提供的机制(例如 PBS/Torque、SLURM、Grid Engine、LSF...)。一旦进程启动并且它们的 IP 地址和端口号被记录并在 Universe 中广播,这些进程就可以在其他(更快的)网络上找到彼此,例如InfiniBand,并在其上建立通信路由。

路由消息通常不由 MPI 本身完成,而是留给底层通信网络。 MPI 只负责构建消息,然后将它们传递到网络以传递到它们的目的地。对于驻留在同一节点上的进程之间的通信,通常使用共享内存。

如果您对技术细节感兴趣,我建议您阅读 Open MPI 的源代码。您可以在项目的 WEB site 上找到它.

关于parallel-processing - MPI 内部 : Communication implementation between processes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542284/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com