如何将线程数设置为PBS作业队列中的下游变量

时间:2019-01-04 15:24:22

标签: linux bash pbs

从PBS作业脚本运行程序时,有什么方法可以确定程序有多少线程可用?

在我的PBS工作脚本的标题中设置

#PBS -l nodes=1:ppn=8

有没有我可以使用的命令来检测线程数-因此我可以将一个变量设置为等于该数字(对于下游进程)。

这样,我可以为下游进程将线程设置为$k,而不是每次更改#PBS -l nodes=1:ppn=_时都逐行进行代码。


谢谢! 我找到了解决方法- 因此,如果使用单个节点,我要查找的变量是$ PBS_NUM_PPN

1 个答案:

答案 0 :(得分:1)

默认情况下,PBS在运行的作业中不公开ppn设置。而且,shell脚本无法在不知道和解析其源代码的情况下读取其注释(由于多种原因,这在这里可能无法正常工作)。

但是这里有一些想法:

  1. 您可以使用qsub选项从-v命令行传递任意变量。 (您也许可以使用#PBS -v ...来执行相同的操作,但等同于以常规方式在脚本中设置变量。)

  2. 您应该能够在-l命令行上(而不是在作业脚本中)指定资源(使用qsub)。

像这样将它们放在一起:

qsub ... -l nodes=1:ppn=8 - v NOSTHREADS=8 myscript.pbs

其中myscript.pbs是:

#!/bin/bash
#PBS directives ... without the "-l" !!!

# ordinary shell commands.

somecommand --someoption $NOSTHREADS ...

注意:我建议您不要在命令行和脚本中 mix 指定资源。仅将“ -l”选项放在一个位置。如果将它们放在两个地方,并且Torque / PBS安装使用作业提交过滤器,则事情可能会变得很混乱。


或者,您可以编写一个Shell(或python或其他)启动程序,以与ppn(等)资源和相应变量的匹配值生成 (s)嵌入到生成的脚本中。

如果您还要执行其他一些操作,则此方法的优点是可重复性更高。 (向当地的eResearch分析人员咨询您科学计算中的可重复性。)


如果以上两种方法均无法起作用,则可能可以检查作业脚本中的ulimit设置。但是,我的理解是PBS mon通常不会使用ulimit限制作为执行线程/进程限制的方法。相反,它将监视活动核心的数量。 (ppn资源限制了处理器的数量,而不是线程或进程的数量。)