Делать блок qsub до завершения работы? - PullRequest
5 голосов
/ 12 мая 2011

В настоящее время у меня есть программа-драйвер, которая запускает несколько тысяч экземпляров программы «полезной нагрузки» и выполняет некоторую постобработку вывода. В настоящее время драйвер вызывает программу полезной нагрузки напрямую, используя функцию shell(), из нескольких потоков. Функция shell() выполняет команду в текущем рабочем каталоге, блокирует ее до завершения выполнения и возвращает данные, отправленные командой на стандартный вывод. Это хорошо работает на одной многоядерной машине. Я хочу изменить драйвер для отправки qsub заданий в большой вычислительный кластер, для большей параллелизма.

Есть ли способ заставить команду qsub выводить свои результаты в стандартный вывод вместо файла и блокировки до завершения задания? По сути, я хочу, чтобы он действовал как «обычное» выполнение команды, насколько это возможно, чтобы я мог распараллелить кластер с минимально возможной модификацией моей программы драйвера.

Редактировать: я думал, что все движки сетки были в значительной степени стандартизированы. Если это не так и это имеет значение, я использую Torque.

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Вы не упоминаете, какую систему очередей вы используете, но SGE поддерживает опцию '-sync y' для qsub, которая будет блокировать ее до завершения или выхода из задания.

2 голосов
/ 14 марта 2012

В TORQUE это делается с помощью опций -x и -I.qsub -I указывает, что он должен быть интерактивным, а -x говорит, что запускает только указанную команду.Например:

qsub -I -x myscript.sh

не вернется, пока myscript.sh не завершит выполнение.

0 голосов
/ 16 сентября 2016

В PBS вы можете использовать qsub -Wblock=true <command>

...