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