首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab并行计算工具箱,parfor循环中工作的动态分配

Matlab并行计算工具箱,parfor循环中工作的动态分配
EN

Stack Overflow用户
提问于 2012-03-30 04:55:10
回答 4查看 2K关注 0票数 5

我正在使用matlab中一个长时间运行的parfor循环。

代码语言:javascript
复制
parfor iter=1:1000
   chunk_of_work(iter);
end

一般情况下,每次运行约有2-3个时差.也就是说,每完成1,000块工作,就有2-3块工作所需的时间是其余工作的100倍。当循环接近完成时,评估异常值的工作人员继续运行,而其他工作人员则没有计算负载。

这与parfor循环静态分配工作是一致的。这与并行计算工具箱在这里发现的的文档形成了对比。

工作分配是动态的。工人没有分配固定的迭代范围,而是在处理完当前的迭代后才分配一个新的迭代,这导致工作负载分布均匀。

对发生了什么事有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-30 05:25:03

我认为您引用的文档对工作的静态分配有很好的描述:每个工作人员都“被分配了一个固定的迭代范围”。对于4名工人来说,这意味着第一个被分配到iter 1:250,第二个iter 251:500,或者第一个是1:4:100,第二个是2:4:1000,依此类推。

您并没有确切地说明您所观察到的内容,但您描述的内容与动态工作负载分布非常一致:首先,四个(示例)工作人员分别在一个iter上工作,第一个工作人员在第五个iter上工作,下一个工作人员完成工作(如果前四个工作人员中有三个工作时间稍长),在第六个工作时间上工作,依此类推。现在,如果您的异常值是20、850和900,按照MATLAB的顺序选择处理循环迭代,并且每一个迭代的时间是100倍,这只意味着第21至320次迭代将由四个工人中的三个来解决,而其中一个将忙于第20次迭代(在320之前完成,现在假设非异常值计算时间的分布大致均匀)。然而,分配给第850次迭代的工作人员将继续运行,即使在另一个解决了#1000,对于#900也是如此。事实上,如果有大约1100次迭代,那么处理#900的迭代应该在其他迭代时大致完成。

编辑的作为隐含的原始措辞,仍然会按1到1000的顺序分配parfor循环的迭代,这是不应该假设的。

长话短说,除非您找到一种方法首先处理异常值(当然,这要求您事先知道哪些是异常值,并找到一种方法让MATLAB使用这些异常值启动parfor循环处理),动态工作负载分布本身并不能避免所观察到的效果。

补充:不过,我认为,您的观察表明,“随着循环接近完成,评估异常值的工作人员*s*继续运行”似乎至少暗示了以下一项:

  1. 异常值是MATLAB开始处理的最后一次迭代。
  2. 您有许多工作人员,按迭代次数的大小排列。
  3. 你对离群点数量的估计(2-3)或你估计的计算时间损失(因子100)太低了。
票数 5
EN

Stack Overflow用户

发布于 2012-03-30 07:25:38

PARFOR中的工作分配在某种程度上是确定性的。您可以通过让每个工作人员记录到磁盘上的情况来精确地观察正在发生的事情,但是基本上,PARFOR以一种确定性的方式将您的循环分成了几个块,但是动态地将它们划分出来。不幸的是,目前还没有办法控制这种块状。

然而,如果你无法预测你的1000个案例中哪一个将是异常值,那么很难想象有一个有效的方案来分配工作。

如果您可以预测您的异常值,您可能可以利用这样一个事实:大致上说,PARFOR以相反的顺序执行循环迭代,因此您可以将它们放在循环的“末尾”,以便立即开始它们的工作。

票数 3
EN

Stack Overflow用户

发布于 2012-03-30 08:29:57

@arne.b的回答很好地描述了您面临的问题,我对此没有什么可补充的。

但是,并行计算工具箱确实包含用于分解任务转化为任务以便独立执行的函数。从您的问题中,不可能得出这样的结论:这是合适的,或者是不适合您的应用程序。如果是的话,一般策略是将作业分解成一定大小的任务,让每个处理器处理一个任务,完成后返回到未完成的任务堆栈并开始另一个任务。

您可能能够分解您的问题,例如一个任务取代一个循环迭代(许多任务,管理计算的大量开销,但最好的负载平衡),或者一个任务替换N个循环迭代(任务较少,开销较少,负载平衡较差)。与parfor相比,作业和任务的实现也要复杂一些。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9937200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档