分布式阵列由于批处理作业而变慢

2个视图(过去30天)
玛丽亚
玛丽亚 2021年10月28日
评论道: 玛丽亚2021年11月1日
你好,
我正在处理分布式阵列。
据我所知,我可以直接在集群上创建分布式数组。当我想操作分布式数组中的内容时,我需要使用spmd。
我想避开任何互动泳池。出于这个原因,我创建了一个使用分布式数组的函数,并将其作为批处理作业发送到集群。函数是这样的
函数R = my_distributed_function(输入)
R =眼睛(N,“分布式”);
k = 1: N
m = 1:N
R(k,m) = 1 *m;
结束
结束
然后我把它作为批处理作业发送到集群
job_distributed =批(c @my_distributed_function 1 {myinput}“池”n - 1,“CurrentFolder”“。”“AutoAddClientPath”、假);
然而,这需要很长时间,大约64秒。没有“分布式”的函数大约需要2毫秒。
如果不使用批处理作业,但保留“分布式”选项,则启动交互池。当然,这大约需要2秒,但是还有启动平行池的时间。
我的问题是:如果我使用一个使用分布式数组的函数,为什么批处理作业要花这么长时间?

接受的答案

托马斯Falch
托马斯Falch 2021年10月29日
带有“Pool”选项的批处理作业(“批处理池作业”)最终将启动相当于交互式池的工作,但使用其中一个工作者作为MATLAB桌面客户机的替代品。因此,这样一个作业的总时间将是池启动+您正在做的全部工作。换句话说,它所花费的时间与一个交互式池差不多。
批处理池作业的主要好处是,您可以将作业提交到集群,然后关闭MATLAB桌面客户机(以及运行该作业的计算机)。与此同时,作业正在集群上运行,您可以稍后返回以获取结果。这对于不需要任何用户输入的长时间运行的作业非常有用(这就是交互池的用途)。
3评论
玛丽亚
玛丽亚 2021年11月1日
谢谢你的澄清。我完全误解了这一点。我有一些createTasks和一些parfor,我认为parfor将被执行为parfor…但现在我想,当然,因为createTasks在工作者级别创建任务,每个内核有一个工作者。

登录发表评论。

更多的答案(0)

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!