MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   bash中的matlab批量并行化 (https://www.labfans.com/bbs/showthread.php?t=24138)

poster 2019-12-10 20:48

bash中的matlab批量并行化
 
我正在尝试在大型计算机集群上运行一段代码,以便分析数据的不同部分。

我创建了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实例的值只是最后一个值。

有办法避免这种情况吗?调用函数时可以“烘焙”该变量的值吗?

还是问题完全不同?



[B]回答:[/B]

Bash无法处理括号范围表达式中的变量。它们必须是文字: {1..10} 。由于您现在拥有的方式,内部循环始终总是在外部循环的每次迭代中仅执行一次,而不是八次(或者无论PROCS_PER_NODE的值是PROCS_PER_NODE )。结果,当chn应该从Original_chn变为NODES * PROCS_PER_NODE时, chn从其初始值变为该值加上NODES 。

使用C样式的for循环:

for ((job_idx=1; job_idx


所有时间均为北京时间。现在的时间是 01:08

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.