从PBS作业脚本运行程序时,有什么方法可以确定程序有多少线程可用?
在我的PBS工作脚本的标题中设置
#PBS -l nodes=1:ppn=8
有没有我可以使用的命令来检测线程数-因此我可以将一个变量设置为等于该数字(对于下游进程)。
这样,我可以为下游进程将线程设置为$k
,而不是每次更改#PBS -l nodes=1:ppn=_
时都逐行进行代码。
谢谢! 我找到了解决方法- 因此,如果使用单个节点,我要查找的变量是$ PBS_NUM_PPN
答案 0 :(得分:1)
默认情况下,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 ...
注意:我建议您不要在命令行和脚本中 mix 指定资源。仅将“ -l”选项放在一个位置。如果将它们放在两个地方,并且Torque / PBS安装使用作业提交过滤器,则事情可能会变得很混乱。
或者,您可以编写一个Shell(或python或其他)启动程序,以与ppn
(等)资源和相应变量的匹配值生成 (s)嵌入到生成的脚本中。
如果您还要执行其他一些操作,则此方法的优点是可重复性更高。 (向当地的eResearch分析人员咨询您科学计算中的可重复性。)
如果以上两种方法均无法起作用,则可能可以检查作业脚本中的ulimit
设置。但是,我的理解是PBS mon
通常不会使用ulimit限制作为执行线程/进程限制的方法。相反,它将监视活动核心的数量。 (ppn
资源限制了处理器的数量,而不是线程或进程的数量。)