查看开放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
、distance
和ppr
选项指的是什么?尤其是ppr
让我困惑。缩写是什么?
--map-by ppr:4:socket
?当然,通过查看使用--report-bindings
报告的绑定(只有4个进程映射到一个套接字,默认情况下绑定到一个套接字的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)
发布于 2015-01-30 06:47:59
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
(在本例中,进程编号从A
运行到Z
)
手册的意思是,整个ppr:N:resource
被看作是一个单一的说明符,并且可以在它之后添加选项,用:
分隔,例如ppr:2:socket:pe=2
。这应该读为“每个套接字启动两个进程,并将每个进程绑定到两个处理元素”,并在相同的四套接字系统中得到以下映射:
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
映射器逐行读取主机文件,并在每个主机上启动一个进程。如果给定,它将忽略时隙计数。
dist
映射器通过NUMA节点与给定的PCI资源之间的距离映射NUMA节点上的进程。它只对NUMA系统有意义。同样,让我们使用玩具四套接字系统,但这一次扩展了表示,以显示NUMA拓扑:
Socket 0 ------------- Socket 1
| |
| |
| |
| |
| |
Socket 2 ------------- Socket 3
|
ib0
套接字之间的线表示CPU链接。这些是,例如,英特尔CPU的QPI链接和AMD CPU的HT链接。ib0
是用于与其他计算节点通信的InfiniBand HCA。现在,在该系统中,套接字2直接与InfiniBand HCA对话。套接字0和套接字3必须穿过一个CPU链接才能与ib0
对话,而套接字1必须跨越2个CPU链接。这意味着,在套接字2上运行的进程将具有最低的延迟,而发送和接收消息和在套接字1上的进程则具有最高的延迟。
它怎麽工作?如果主机文件指定了该主机上的16个插槽,并且映射选项为--map-by dist:ib0
,则可能会产生以下映射:
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最近的套接字2,然后将6个进程映射到第二最接近的套接字0,再映射4个进程到套接字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
实际的NUMA拓扑是使用hwloc
库获得的,该库读取BIOS提供的距离信息。hwloc
包括一个名为hwloc-ls
(也称为lstopo
)的命令行工具,可以用来显示系统的拓扑结构。通常,它只包括其输出中的处理元素和NUMA域的拓扑,但是如果您给它-v
选项,它还包括PCI设备。
https://stackoverflow.com/questions/28216897
复制相似问题