Наивное распараллеливание в файле .pbs

Можно ли распараллелить цикл for в файле PBS?

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

#!/bin/bash
#PBS -q normal
#PBS -l nodes=4:ppn=16:native
#PBS -l walltime=10:00:00
#PBS -N HuMiBi000
#PBS -o HuMiBi.000.out
#PBS -e HuMiBi.000.err
#PBS -A csd399
#PBS -m abe
#PBS -V

./job1.sh
./job2.sh
./job3.sh
./job4.sh

Задания выполняются независимо и не используют одни и те же данные. Могу ли я запустить 1 задание на каждом узле из одного и того же сценария pbs?

Спасибо.


person Ben Kellman    schedule 22.09.2013    source источник


Ответы (1)


Стандартный способ добиться этого — использовать библиотеку интерфейса передачи сообщений (MPI). Open MPI — прекрасная реализация, с которой вы можете работать. Некоторые основные примеры можно найти здесь, и это tutorial для OpenMPI, если вы хотите узнать больше.

person dbeer    schedule 23.09.2013
comment
поэтому я бы сказал: 'mpiexec -n 16 : ./job1.sh : ./job2.sh : ./job3.sh : ./job4.sh' И откроет ли это 16 процессов для каждого задания на разных узлах? - person Ben Kellman; 24.09.2013
comment
Я так думаю, но, честно говоря, я не эксперт. Я работаю с кодами MPI, но пишу их не очень часто. - person dbeer; 24.09.2013