【发布时间】:2010-11-19 23:51:29
【问题描述】:
我正在尝试在大型计算机集群上运行一段代码,以分析数据的不同部分。
我创建了 2 个循环来将作业分配给不同的节点以及节点包含的 CPU。 我写的分析函数 'chnJob()' 只需要带一个索引就可以知道它需要分析的数据的哪一部分(在这种情况下是称为 'chn' 的 shell 变量)。
循环是这样的:
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 实例的值只是最后一个值。
有没有办法绕过它?我可以在调用函数时“烘焙”该变量的值吗?
或者问题完全不同?
【问题讨论】:
标签: bash matlab batch-file pbs parallel-processing