是否可以在本地计算机和远程集群上运行 OpenMPI?

2024-03-12

我有一组需要在集群中执行的计算操作(可能像 512 个 MPI 进程)。现在,我让集群上的根节点打开一个套接字,并在计算操作之间将数据传输到我的本地计算机,但我想知道是否可以只创建两个 MPI 组,其中一个组是我的本地组机和另一个远程集群,并使用 MPI 命令在它们之间发送数据。

这可能吗?


是的,这是可能的,只要集群节点和您的机器之间存在网络路径即可。 MPI 标准提供了执行此操作的抽象机制,而 Open MPI 则提供了一种非常简单的方法来使事情正常运行。你必须调查流程创建和管理标准部分(MPI-2.2 第 10 章),特别是建立沟通小节(MPI-2.2 §10.4)。基本上步骤是:

  1. 您分别启动两个 MPI 作业。显然这就是您所做的,所以这里没有什么新内容。
  2. 其中一项作业使用以下命令创建一个网络端口MPI_Open_port()。此 MPI 调用返回一个唯一的端口名称,然后必须使用该名称将其发布为众所周知的服务名称MPI_Publish_name()。一旦端口打开,就可以通过调用阻塞例程来接受客户端连接MPI_Comm_accept()。该作业现已成为服务器作业。
  3. 另一个 MPI 作业(称为客户端作业)首先使用以下命令从服务名称中解析端口名称:MPI_Lookup_name()。一旦获得端口名称,就可以调用MPI_Comm_connect()以连接到远程服务器。
  4. Once MPI_Comm_connect()与各自配对MPI_Comm_accept(),这两个作业将在它们之间建立一个相互通信器,然后可以来回发送消息。

一个复杂的细节是客户端作业如何在给定服务名称的情况下查找端口名称?这是 Open MPI 中记录较少的部分,但它非常简单:您必须提供mpiexec用于通过 URI 启动客户端作业的命令mpiexec服务器作业的一部分,充当一种目录服务。为此,您应该使用以下命令启动服务器作业--report-uri -参数使其将其 URI 打印到标准输出:

$ mpiexec --report-uri - <other arguments like -np> ./server ...

它会给你一个长的 URI 形式1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351。现在您必须将此 URI 提供给客户端mpiexec--ompi-server uri option:

$ mpiexec --ompi-server 1221656576.0;tcp://10.1.13.164:36351... ./client ...

请注意,URI 包含节点上所有已配置和启用的网络接口的地址,其中服务器的mpiexec已开始。您应该确保客户至少能够联系其中之一。还要确保启用的 BTL 组件列表中包含 TCP BTL 组件,否则任何消息都无法流动。 TCP BTL 通常默认启用,但在某些 InfiniBand 安装上,通过设置环境变量的相应值来明确禁用它OMPI_MCA_btl或在默认的 Open MPI MCA 配置文件中。 MCA 参数可以被覆盖--mca选项,例如:

$ mpiexec --mca btl self,sm,openib,tcp --report-uri - ...

另请参阅答案 https://stackoverflow.com/a/15008715/1374437我回答过类似的问题。

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

是否可以在本地计算机和远程集群上运行 OpenMPI? 的相关文章

  • OpenMP与OpenMPI介绍与简单程序编写

    首先说一下OpenMP与OpenMPI的区别 OpenMP主要是在单机上进行并行 xff0c 是基于共享内存的 xff0c 共享内存就是多个核 xff08 包括单CPU多核和多CPU多核 xff08 都是单机 xff09 xff09 共享一
  • CentOS 7安装OpenMPI

    文章目录 一 下载OpenMPI源码 二 解压缩OpenMPI源码 三 安装OpenMPI 四 配置环境变量 五 验证安装 参考资料 一 下载OpenMPI源码 wget https download open mpi org releas
  • 如何安装openmpi

    安装openmpi 官网下载tar gz文件 解压缩 tar zxvf cd 到文件目录下 configure prefix usr local openmpi 安装目录 make j4 sudo make install 4核编译 添加环
  • 运行基于 OpenMPI 的库时出错

    我已经从 Ubuntu 中可用的标准 apt get install 安装了 openmpi 库 我运行一个调用 MPI 库的 python 代码 我收到以下错误 任何想法错误的根源是什么 是 OpenMPI 配置错误吗 如何解决这个问题
  • 无法使用 OpenMPI 安装 mpi4py:无法编译 MPI 程序

    这是我在这里发表的第一篇文章 如果我的风格有误 请道歉 我一直在尝试使用 python 3 6 在 Ubuntu 16 04 上安装 mpi4py 因为 SU2 需要它进行并行处理 我下载了mpi4py并尝试从源代码构建 因为我想使用我配置
  • 使用 MPI_Type_create_subarray 发送时可以转置数组吗?

    我正在尝试使用 C 中的 MPI 转置矩阵 每个进程都有一个方形子矩阵 我想将其发送到正确的进程 网格上的 相反 进程 将其转置作为通信的一部分 我在用着MPI Type create subarray其中有一个关于顺序的参数 要么MPI
  • 为非交互式 shell 获取 .bashrc 的正确方法

    我一直在尝试解决问题 以便能够在多个节点上运行 openmpi 最初我有一个问题 PATH and LD LIBRARY PATH变量未更新自 bashrc由 openmpi 会话创建的文件 所以我手动添加 prefix path to o
  • 将 MPI 进程映射到特定节点

    我认为这个问题在这里问是无关紧要的 却无法自拔 假设我有一个包含 100 个节点的集群 每个节点有 16 个核心 我有一个 mpi 应用程序 其通信模式已知 并且我也知道集群拓扑 即节点之间的跳跃距离 现在我知道了减少网络争用的节点映射过程
  • 如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库

    我安装了 Open MPI 1 5 4 64 位 并尝试使用 bjam 重建 boost 库 1 48 我更改了 user config jam 文件 添加了 using mpi 行和显式编译器路径 尽管 mpic 已经在 PATH 环境变
  • DLL加载失败:执行“from mpi4py import MPI”时找不到指定的模块

    我正在尝试在 Windows 7 64 位上使用 Mpi4py 1 3 和 python 2 7 我从以下位置下载了可安装版本here http www lfd uci edu 7Egohlke pythonlibs 其中包括 OpenMP
  • 如何从从节点向主节点发送动态数组

    我正在完成一个简单的 MPI 程序 但我正在努力完成该项目的最后一部分 我发2个ints 包含从节点的起点和终点 使用这些我需要创建一个数组并填充它 我需要将其发送回主节点 从机代码如下 printf Client waiting for
  • 如何强制 OpenMPI 使用 GCC 而不是 ICC?是否需要重新编译 OpenMPI?

    我有一个用于并行计算的 C 代码 用于编写gcc 我想在集群上编译它 这显然使用icc via mpicc 将代码更正为icc friend好像太费时间了 所以我想问一下OpenMPI to use gcc反而 我没有该集群的管理员权限 而
  • 使用 MPI 和 openMP 并行运行代码时扩展性较差

    我有以下实现 int main int argc char argv int n runs 100 Number of runs int seed 1 int arraySize 400 initialise the random numb
  • 使用 MPI_Gather openmpi c 收集字符串

    我想为每个进程生成一个字符串 然后收集所有内容 但是每个进程中创建的字符串是通过附加整数和字符来创建的 我仍然无法正确收集所有内容 我可以一一打印所有部分字符串 但如果我尝试打印 rcv string 我只会得到一个部分字符串 或者可能会出
  • 如何使用mpirun为不同的程序使用不同的CPU核心?

    我有一个 32 核的虚拟机 我正在运行一些模拟 需要同时使用 16 个内核 我使用以下命令在 16 个核心上运行作业 mpirun n 16程序名 args gt 注销2 gt 1 该程序在 16 个内核上运行 现在 如果我想在其余核心上使
  • MPI 中对 cout 的“原子”调用

    我感兴趣的是 OpenMPI 中是否有命令或技术可以进行原子调用来写入 stdout 或者就此而言 任何流 我注意到 在 MPI 程序执行期间 写入 cout 或其他流 的调用可能会变得混乱 因为每个过程可能会在到达代码的某个部分时进行写入
  • 在 C 中执行简单 MPI 程序时集群挂起/显示错误

    我正在尝试运行一个简单的 MPI 程序 多个数组加法 它在我的 PC 中完美运行 但只是挂起或在集群中显示以下错误 我正在使用 open mpi 和以下命令来执行 集群网络配置 主节点1 MASTER eth0 Link encap Eth
  • MPI_Send() 和 MPI_Ssend() 之间的区别?

    I know MPI Send 是一个阻塞调用 它会等待直到可以安全地修改应用程序缓冲区以供重用 为了使发送调用同步 应该与接收者握手 我们需要使用MPI Ssend 我想知道两者之间的区别 假设我需要在进程之间发送固定数量的字节 哪一个应
  • 是否可以在本地计算机和远程集群上运行 OpenMPI?

    我有一组需要在集群中执行的计算操作 可能像 512 个 MPI 进程 现在 我让集群上的根节点打开一个套接字 并在计算操作之间将数据传输到我的本地计算机 但我想知道是否可以只创建两个 MPI 组 其中一个组是我的本地组机和另一个远程集群 并
  • #pragma 末尾的隐式屏障

    朋友们 我正在尝试学习 openMP 范例 我使用以下代码来理解 omp for pragma int main void int tid int i omp set num threads 5 pragma omp parallel pr

随机推荐