2015-01-23 2 views
1

У меня есть программа MPI, которая использует мастер-процесс и несколько рабочих процессов. Я хочу, чтобы мастер-процесс работал только на одном вычислительном узле, а рабочие процессы выполнялись на другом узле. Рабочие процессы должны назначаться сокет (например, как это делается с опцией --map-by-socket). Есть ли возможность назначить мастер-процесс и рабочие процессы для разных узлов или назначить его вручную, если вы обратитесь к рангу?Назначить MPI-процессы для узлов

Благодаря

ответ

2

Назначение рангов на хосты одновременно с привязкой возможно с использованием ранговых файлов. В вашем случае, если предположить, что каждый узел имеет два 4-ядерных процессоров, что-то вроде этого следует сделать это (для Open MPI 1.7 и новее):

rank 0=host1 slots=0-7 
rank 1=host2 slots=0:0-3 
rank 2=host2 slots=1:0-3 

Для более старых версий, вместо slots=0:0-3 и slots=1:0-3 следует использовать slots=0-3 и slots=4-7 соответственно (при условии, что ядра нумеруются линейно, что может быть не так). Затем файл ранга подается в mpiexec через опцию --rankfile. Он заменяет файл хоста.

Другим вариантом является запуск MIMD. В этом случае можно разбить работу MPI на несколько частей и предоставить различные аргументы распределения и привязки для каждой части:

mpiexec -H host1 -n 1 --bind-to none ./program : \ 
     -H host2 -n 2 --bind-to socket --map-by socket ./program 
+0

Я отправляю задания в кластер. Должен ли я разбирать файл node_file или есть ли более простой способ найти имя хостов? – fc67

+0

В какой пакетной системе есть кластер? –

+0

Кластер имеет LSF. – fc67

2

Самым простым способом я знаю, делать это с помощью --hostfile варианта OpenMPI.

Если вы используете какую-либо достойную пакетную систему, у вас должен быть список ваших хостов и слотов в некоторой простой переменной файла или среды, и вы можете разобрать это в файле хоста.

Если вы запустите приложение «вручную», вы можете создать такой список самостоятельно.

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