4

目前,我有一个驱动程序,运行数千个“有效载荷”程序实例,并对输出进行一些后处理。驱动程序当前使用shell()函数直接从多个线程调用有效负载程序。 shell()函数在当前工作目录中执行一个命令,阻塞直到命令完成运行,并返回命令发送到stdout的数据。这在单个多核机器上运行良好。我想修改驱动程序,将qsub作业提交给大型计算群集,以获得更多并行性。制作qsub块直到完成作业?

有没有办法让qsub命令将结果输出到标准输出而不是文件和块,直到作业完成?基本上,我希望它尽可能像“正常”执行命令一样,以便我可以通过尽可能少地修改驱动程序来并行化群集。

编辑:我认为所有的网格引擎都非常标准化。如果他们不重要,我使用Torque。

回答

3

你没有提到你正在使用什么排队系统,但SGE支持qsub的'-sync y'选项,这将导致它阻塞,直到作业完成或退出。

2

在TORQUE中,这是使用-x和-I选项完成的。 qsub -I指定它应该是交互式的,-x表示只运行指定的命令。例如:

qsub -I -x myscript.sh 

将不会返回,直到myscript.sh完成执行。

+0

您是否丧失了将输出存储在输出文件中的能力? – 2012-07-24 08:27:16

+1

您以这种方式丢失了输出的自动存储,但您可以登录终端会话并以此方式保存输出。 – dbeer 2012-07-24 15:13:37

0

在PBS中,您可以使用qsub -Wblock=true <command>