gpt4 book ai didi

mpi - 按主机对 MPI 任务进行分组

转载 作者:行者123 更新时间:2023-12-04 20:36:44 33 4
gpt4 key购买 nike

我想在集群中的每台机器上独立地轻松执行集体通信。假设我有 4 台机器,每台机器有 8 个内核,我的 MPI 程序将运行 32 个 MPI 任务。对于给定的功能,我想要的是:

  • 在每个主机上,只有一个任务执行计算,其他任务在此计算期间什么也不做。在我的示例中,4 个 MPI 任务将执行计算,其他 28 个任务正在等待。
  • 一旦计算完成,每个 MPI 任务将仅与本地任务(在同一主机上运行的任务)执行集体通信。

从概念上讲,我知道我必须为每个主机创建一个通信器。我四处搜索,没有发现任何明确的做法。我不太喜欢 MPI 组和通信器。这是我的两个问题:

  • MPI_Get_processor_name 对于这种行为是否足够独特?
  • 更一般地说,您是否有一段代码可以做到这一点?

最佳答案

规范说 MPI_Get_processor_name 返回“实际(相对于虚拟)节点的唯一说明符”,所以我认为您会同意的。我猜你会做一个集合来组装所有主机名,然后分配处理器组来启动它们的通信器;或复制 MPI_COMM_WORLD,将名称转换为整数哈希,并使用 mpi_comm_split 对集合进行分区。

您还可以采用 janneb 建议的方法,并使用特定于实现的选项来 mpirun 以确保 MPI 实现以这种方式分配任务; OpenMPI 使用 --byslot 来生成这个顺序;对于 mpich2,您可以使用 -print-rank-map 来查看映射。

但这真的是你想要做的吗?如果在一个处理器工作时其他进程处于空闲状态,这比每个人都冗余地进行计算有什么好处呢? (或者这是否非常占用内存或 I/O,而您担心争用?)如果您打算做很多这样的事情——处理与节点外并行化截然不同的节点上并行化——那么您可能需要考虑混合编程模型 - 每个节点运行一个 MPI 任务和 MPI_spawning 子任务,或者使用 OpenMP 进行节点上通信,这两者均由 HPM 建议。

关于mpi - 按主机对 MPI 任务进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041935/

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