Cpu
Sun Grid Engine 作業文件中的核心數的語法
我想將我大學的 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
. 記憶體需求是每個任務的,即它們不會隨著任務請求的核心數量而變化。