私は大規模なコンピュータクラスタ上でデータのさまざまな部分を分析するためにコードを実行しようとしています。bashでのmatlabバッチ並列化
私は2つのループを作成して、異なるノードにジョブを割り当て、ノードに含まれるCPUを割り当てました。私は 'chnJob()'と書いた解析関数は、解析する必要があるデータの部分を知るためにインデックスを取る必要があります(この場合、chnというシェル変数です)。
ループは、このようなものです:
for NODE in $NODES; do # Loop through nodes
for job_idx in {1..$PROCS_PER_NODE}; do # Loop through jobs per node (8 per node)
echo "this is the channel $chn"
ssh $NODE "matlab -nodisplay -nodesktop -nojvm -nosplash -r 'cd $WORK_DIR; chnJob($chn); quit'" &
let chn++
sleep 2
done
done
私はCHN変数が適切にインクリメントされていることを見ていても、MATLAB関数に渡されCHNの値が常にCHNの最後の値です。
これはおそらく、各ノードでmatlabを開くのに多くの時間がかかり、それまでにbashがループを終了したためです。したがって、各MATLABインスタンスに渡される値は最後の値だけです。
これを回避する方法はありますか?関数を呼び出すときにその変数の値を「焼く」ことができますか?
問題は全く異なりますか?