Mpi 确定PBS脚本中qsub之后的CPU总数

Mpi 确定PBS脚本中qsub之后的CPU总数,mpi,pbs,qsub,torque,Mpi,Pbs,Qsub,Torque,对于使用qsub调用的PBS脚本,我想知道在PBS文件中定义的数字被命令行的输入覆盖的情况下,实际分配了多少CPU。例如,使用以下pbs脚本文件: jobscript.pbs: #!/bin/bash #PBS -N test_run #PBS -l nodes=32 #PBS -l walltime=06:00:00 #PBS -j oe #PBS -q normal #PBS -o output.txt cd $PBS_O_WORKDIR module load gcc-openmpi-

对于使用qsub调用的PBS脚本,我想知道在PBS文件中定义的数字被命令行的输入覆盖的情况下,实际分配了多少CPU。例如,使用以下pbs脚本文件:

jobscript.pbs:

#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt

cd $PBS_O_WORKDIR

module load gcc-openmpi-1.2.7
time mpiexec visct
#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt

# This finds out the number of nodes we have
NP=$(wc -l $PBS_NODEFILE | awk '{print $1}')
echo "Total CPU count = $NP"
此脚本可以使用以下命令行仅使用16个CPU(而不是32个)运行:

$ qsub -l nodes=2:ppn=8 jobscript.pbs

因此,我想要一个健壮的方法来确定脚本中实际可用的CPU数量。

我能够使用
$PBS\u NODEFILE
环境变量回答我自己的问题,该变量包含到一个列出可用节点信息的文件的路径:

jobscript.pbs:

#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt

cd $PBS_O_WORKDIR

module load gcc-openmpi-1.2.7
time mpiexec visct
#!/bin/bash
#PBS -N test_run
#PBS -l nodes=32
#PBS -l walltime=06:00:00
#PBS -j oe
#PBS -q normal
#PBS -o output.txt

# This finds out the number of nodes we have
NP=$(wc -l $PBS_NODEFILE | awk '{print $1}')
echo "Total CPU count = $NP"

多亏了在网上搜索了很多次后的“”我知道你已经找到了答案,但我想我会用另一种方式与你分享

此代码较长,但它有助于满足我的特定需求。我实际上使用pbsnodes命令。下面是我的代码片段

@nodes_whole =`pbsnodes -av -s $server | grep "pcpus" `;
$nodes_count = ` pbsnodes -av -s $server | grep "pcpus" | wc -l `;
while($i < $nodes_count){
    @cpu_present = split(/\s+/, $nodes_whole[$i]);
    $cpu_whole_count += $cpu_present[3];
    $i++;
}
我看到了正在使用的资源:

@nodes_used=`pbsnodes -av -s $server | grep "resources_assigned.ncpus" `;
还有一种情况,我在等待硬件时,有两个集群运行在一个头部节点上。在这种情况下,我检查节点分配给哪个集群,然后根据分配给该集群的节点进行计数。这样,所有用户看到的都是另一个集群,并使用他们在其他集群中使用的脚本


我之所以提到这一点,是因为我已经找到了许多有用的方法来使用pbsnodes,而且它很适合我的特殊需要

继续,接受你自己的答案,这样这个问题就结束了。这是一份工作还是多份工作?“CPU实际已分配”是否意味着作业正在运行?@Anna这是针对单个作业的(但您可以多次运行此作业),脚本将在每个作业开始运行时对其执行一次。结果提供了当前单个作业中可用的CPU数量。@MasterHD,那么这是否意味着$PBS_NODEFILE包含关于单个作业的信息?如果我同时运行两个作业会怎么样?@Anna每个作业都有自己的进程(私有环境变量和输出流),因此yes$PBS\u NODEFILE将包含相应作业的节点数。