从PBS作业脚本运行某个程序时,是否有任何方法可以确定该程序有多少个线程可用?

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

#PBS -l nodes=1:ppn=8


我是否可以使用一条命令来检测线程数-这样我就可以将一个变量设置为等于该数字(用于下游进程)。

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



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

最佳答案

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

但是这里有一些想法:


您可以使用qsub选项从-v命令行传递任意变量。 (您也许可以使用#PBS -v ...做同样的事情,但等同于以常规方式在脚本中设置变量。)
您应该能够在-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 ...


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



另外,您可以编写一个shell(或python或其他)启动程序,该启动程序生成PBS脚本,并带有匹配的ppn(等)资源值和嵌入在生成的脚本中的相应变量。

如果您还做其他一些事情,则这种方法的优点是可重复性更高。 (向当地的eResearch分析人员咨询有关科学计算中可重复性的信息。)



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

10-08 08:43