Sun Grid Engine 作业文件中内核数量的语法

Sun Grid Engine 作业文件中内核数量的语法

我想使用我大学的 HPC 来执行qsub以下数组作业3任务。

每个任务运行一个 Matlab 代码,该代码使用一个求解器 (MOSEK),该求解器利用多个线程来解决一个优化问题。参数可以控制我们希望求解器使用的线程数。允许的最大线程数不应超过核心数。

假设我希望求解器使用4 线程。因此,我应该确保将每个任务分配给一台至少有 4 个空闲核心的机器。我如何在 bash 文件中请求它?我应该如何计算内存使用量(即我应该声明每个核心的内存还是总内存)?

目前这是我的 bash 文件

#$ -S /bin/bash
#$ -l h_vmem=18G
#$ -l tmem=18G
#$ -l h_rt=480:0:0
#$ -cwd
#$ -j y

#Run 3 tasks
#$ -t 1-3

#$ -N try
date
hostname


#Output the Task ID
echo "Task ID is $SGE_TASK_ID"

matlab -nodisplay -nodesktop -nojvm -nosplash -r "main_1; ID = $SGE_TASK_ID; f_1; exit"

答案1

mpstat 命令将显示 CPU(即核心)的数量。您可能必须将输出分开才能得到数字,但它会为您显示数据。

在linux中,还有lscpu命令。像这样的代码可能会有所帮助:

CORES=`lscpu | grep -w "CPU(s):" | grep -v NUMA | awk '{print $2}'`
if [ $CORES -lt 2 ]
then
        echo "Cores 2 or less!"
        exit
fi

答案2

选择您想要的交换机并行环境-pe。要使用脚本内选项在一台机器上获得 4 个线程,请编写#$ -pe smp 4.内存需求是针对每个任务的,即它们不会随着任务请求的核心数量而变化。

相关内容