データのさまざまな部分を分析するために、大規模なコンピューター クラスターでコードを実行しようとしています。
ジョブを異なるノードとノードに含まれる cpu に割り当てるために 2 つのループを作成しました。私が書いた分析関数「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 インスタンスに渡される値は最後の値のみです。
それを回避する方法はありますか?関数を呼び出すときに、その変数の値を「ベイク」できますか?
それとも、問題はまったく別のものですか?