qsub
私たちの大学のHPCを使って、次のアレイ作業をしたいと思います。サム仕事。
各タスクは、複数の要素を利用するソルバー(MOSEK)を使用するMatlabコードを実行します。糸最適化の問題を解決するため。パラメーターは、ソルバーが使用するスレッド数を制御します。許可されるスレッドの最大数はコア数を超えることはできません。
ソルバーが使用したいとしましょう。スレッド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
。メモリー要件はジョブごとに異なります。つまり、ジョブが要求したコアの数によっては変わりません。