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