Cpu

Sun Grid Engine 作業文件中的核心數的語法

  • June 26, 2021

我想將我大學的 HPC 用於3 個qsub任務的陣列作業。

每個任務都執行一個 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"

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

-pe使用交換機選擇所需的並行環境。要使用 in-script 選項在單台機器上獲得 4 個執行緒,請編寫#$ -pe smp 4. 記憶體需求是每個任務的,即它們不會隨著任務請求的核心數量而變化。

引用自:https://unix.stackexchange.com/questions/608625