gpt4 book ai didi

mpi - openmpi mpirun v1.8 中 --map-by 选项的语法

转载 作者:行者123 更新时间:2023-12-04 05:17:51 24 4
gpt4 key购买 nike

查看 openmpi manual 中的以下摘录

--map-by <foo>
Map to the specified object, defaults to socket. Supported options
include slot, hwthread, core, L1cache, L2cache, L3cache, socket,
numa, board, node, sequential, distance, and ppr. Any object can
include modifiers by adding a : and any combination of PE=n (bind n
processing elements to each proc), SPAN (load balance the processes
across the allocation), OVERSUBSCRIBE (allow more processes on a node
than processing elements), and NOOVERSUBSCRIBE. This includes PPR,
where the pattern would be terminated by another colon to separate
it from the modifiers.

我对语法有不同的问题以及对它们的一些评论:
  • 选项有哪些 sequential , distanceppr引用?

  • 特别是 ppr让我困惑。它是什么的缩写?
  • 我应该如何理解 --map-by ppr:4:socket 之类的选项关于手册的摘录?

  • 当然,我可以通过查看报告的绑定(bind) --report-bindings 来查看前一个选项的结果。 (只有 4 个进程映射到一个套接字,默认绑定(bind)到一个套接字的 4 个核心),但我无法理解语法。在手册的另一行,它说这个新选项取代了已弃用的 --npersocket。 :
    -npersocket, --npersocket <#persocket>
    On each node, launch this many processes times the number of processor
    sockets on the node. The -npersocket option also turns on the -bind-
    to-socket option. (deprecated in favor of --map-by ppr:n:socket)

    最佳答案

    ppr表示每个资源的进程。它的语法是ppr:N:resource它的意思是“将 N 个进程分配给主机上可用的每个资源类型资源”。例如,在具有 --map-by ppr:4:socket 的 6 核 CPU 的 4 插槽系统上产生以下流程图:

     socket   ---- 0 ----    ---- 1 ----    ---- 2 ----    ---- 3 ----
    core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
    process A B C D E F G H I J K L M N O P

    (在本例中,进程编号从 AZ)

    手册的意思是整个 ppr:N:resource被视为单个说明符,可以在其后添加选项,由 : 分隔,例如 ppr:2:socket:pe=2 .这应该读作“每个套接字启动两个进程并将它们中的每一个绑定(bind)到两个处理元素”,并且应该在给定相同的四套接字系统的情况下产生以下映射:
     socket   ---- 0 ----    ---- 1 ----    ---- 2 ----    ---- 3 ----
    core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
    process A A B B C C D D E E F F G G H H
    sequential mapper 逐行读取主​​机文件,并为在那里找到的每个主机启动一个进程。如果给定,它会忽略插槽计数。
    dist mapper 根据 NUMA 节点与给定 PCI 资源的距离来映射进程。它只在 NUMA 系统上有意义。同样,让我们​​使用玩具四插槽系统,但这次扩展表示以显示 NUMA 拓扑:
     Socket 0 ------------- Socket 1
    | |
    | |
    | |
    | |
    | |
    Socket 2 ------------- Socket 3
    |
    ib0

    插槽之间的线代表 CPU 链接。那些是,例如Intel CPU 的 QPI 链接和 AMD CPU 的 HT 链接。 ib0是用于与其他计算节点通信的 InfiniBand HCA。现在,在该系统中,Socket 2 直接与 InfiniBand HCA 对话。 Socket 0 和 Socket 3 必须通过一个 CPU 链路才能与 ib0 通信。并且 Socket 1 必须跨越 2 个 CPU 链路。这意味着,在 Socket 2 上运行的进程将具有尽可能低的延迟,而在 Socket 1 上发送和接收消息和进程将具有尽可能高的延迟。

    它是如何工作的?如果您的主机文件指定例如该主机上有 16 个插槽,映射选项为 --map-by dist:ib0 ,它可能会导致以下 map :
     socket   ---- 0 ----    ---- 1 ----    ---- 2 ----    ---- 3 ----
    core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
    process G H I J K L A B C D E F M N O P

    6 个进程被映射到最接近 InfiniBand HCA 的 Socket 2,然后另外 6 个被映射到第二近的 Socket 0,另外 4 个被映射到 Socket 3。也可以分散进程而不是线性填充处理元素。 --map-by dist:ib0:span结果是:
     socket   ---- 0 ----    ---- 1 ----    ---- 2 ----    ---- 3 ----
    core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
    process E F G H M N O P A B C D I J K L

    使用 hwloc 获得实际的 NUMA 拓扑。库,它读取 BIOS 提供的距离信息。 hwloc包括一个名为 hwloc-ls 的命令行工具(也称为 lstopo )可用于显示系统的拓扑。通常它只在其输出中包含处理元素的拓扑结构和 NUMA 域,但如果你给它 -v选项它还包括 PCI 设备。

    关于mpi - openmpi mpirun v1.8 中 --map-by 选项的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28216897/

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