Как запустить несколько команд в одной отправке задания PBS

Я написал код, который требует всего 1-4 процессора. Но когда я отправляю задание в кластер, я должен взять хотя бы один узел с 16 ядрами на задание. Поэтому я хочу запустить несколько симуляций на каждом узле с каждым заданием, которое я отправляю. Мне было интересно, есть ли способ представить симуляции параллельно в одном задании.

Вот пример: Мой код занимает 4 процессора. Я отправляю задание для одного узла и хочу, чтобы узел запускал 4 экземпляра моего кода (каждый экземпляр имеет разные параметры), чтобы использовать все 16 ядер.


person solora    schedule 08.11.2012    source источник


Ответы (1)


Да, конечно; как правило, в таких системах есть инструкции, как это сделать, подобные этим .

Если у вас есть (скажем) 4x 4-процессорных задания, каждое из которых, как вы знаете, займет одинаковое количество времени, и (скажем) вы хотите, чтобы они выполнялись в 4 разных каталогах (чтобы выходные файлы было легче отслеживать), используйте амперсанд оболочки, чтобы запустить их в фоновом режиме, а затем дождаться завершения всех фоновых задач:

(cd jobdir1; myexecutable argument1 argument2) &
(cd jobdir2; myexecutable argument1 argument2) &
(cd jobdir3; myexecutable argument1 argument2) &
(cd jobdir4; myexecutable argument1 argument2) &
wait

(где myexecutable argument1 argument2 — это просто заполнитель для того, как вы обычно запускаете свою программу; если вы используете mpiexec или что-то подобное, это идет туда так же, как вы обычно его используете. Если вы используете OpenMP, вы можете экспортировать переменную среды OMP_NUM_THREADS перед первой строкой выше.

Если у вас есть ряд задач, которые не будут занимать одинаковое время, проще всего назначить больше, чем (скажем) 4 задачи выше, и позволить инструменту, такому как gnu parallel запускайте задания по мере необходимости, как описано в этот ответ.

person Jonathan Dursi    schedule 08.11.2012
comment
Спасибо, я посмотрю. Но если в системе нет gnu parallel, могу ли я установить его в свою домашнюю папку и использовать? У меня нет root-прав. - person solora; 08.11.2012
comment
Да; просто скачайте его и запустите ./configure --prefix=$HOME && make && make install. Это довольно простая установка, и она достаточно полезна, чтобы ваши системные администраторы в любом случае могли установить ее для всей системы. Синтаксис может быть немного сложным; здесь есть хороший учебник -- unethicalblogger.com/2010. /11/11/ - person Jonathan Dursi; 09.11.2012
comment
Как я могу быть уверен, что это не будет перекрывать процессы на одном и том же процессоре? Кроме того, как насчет многоузловой параллельности. например очередь для моего случая допускает строго только 2 узла, но большую часть времени мне нужен только один узел, как я могу параллельно отправлять два разных задания на два узла. Я должен отправить с qsub, и я не могу указать имя узла во время отправки. - person Eular; 06.04.2021