2015-01-29 3 views
6

Глядя на следующий отрывок из openmpi manualСинтаксис команды --map-опцией в OpenMPI mpirun v1.8

--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) 

ответ

11

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.

+0

Действительно полезно, ty. –

Смежные вопросы