ppr
означает процессов на ресурс. Его синтаксис равен ppr:N:resource
, а это означает «назначить N процессов каждому ресурсу типа ресурс, доступный на хосте». Например, в системе 4-розетка с 6 центральных процессоров, имеющих --map-by ppr:4:socket
результаты в следующей карте процесса:
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:
Socket 0 ------------- Socket 1
| |
| |
| |
| |
| |
Socket 2 ------------- Socket 3
|
ib0
Линии между гнездами представляют собой ссылку CPU. Это, например, QPI для процессоров Intel и HT-ссылок для процессоров AMD. ib0
- это InfiniBand HCA, используемый для связи с другими вычислительными узлами. Теперь, в этой системе, Socket 2 напрямую разговаривает с HCI InfiniBand. Socket 0 и Socket 3 должны пересечь один процессорный канал, чтобы поговорить с ib0
, а Socket 1 должен пересечь 2 ссылки на CPU.Это означает, что процессы, выполняемые на Socket 2, будут иметь наименьшую возможную задержку при отправке и получении сообщений, а процессы на Socket 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 процессы гнездо 2, который находится ближе всего к HCA InfiniBand, затем еще 6 отображаются на Гнездо 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
Фактическая топология NUMA получаются при использовании hwloc
библиотеки, которая считывает информацию о расстоянии, предоставленном BIOS. hwloc
включает в себя инструмент командной строки hwloc-ls
(также известный как lstopo
), который может использоваться для отображения топологии системы. Обычно он включает только топологию элементов обработки и домены NUMA в своем выходе, но если вы дадите ему опцию -v
, она также включает в себя устройства PCI.
Действительно полезно, ty. –