我试图在大型计算机集群上运行一段代码以分析数据的不同部分。bash中的matlab批量并行化
我创建了2个循环来将作业分配给不同节点和节点包含的cpu。 我写的分析函数'chnJob()'只需要一个索引来知道需要分析哪部分数据(在这种情况下是shell变量叫'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实例的值只是最后一个值。
有没有办法规避这种情况?当我调用函数时,可以'烘烤'该变量的值吗?
或者是完全不同的问题?