为了账号安全,请及时绑定邮箱和手机立即绑定

MATLAB parfor慢于 - 出了什么问题?

MATLAB parfor慢于 - 出了什么问题?

繁星淼淼 2019-08-28 10:32:01
MATLAB parfor慢于 - 出了什么问题?我正在处理的代码有如下循环:bistar = zeros(numdims,numcases); parfor hh=1:nt          bistar = bistar +  A(:,:,hh)*data(:,:,hh+1)' ;end小nt(10)。计时后,它实际上比使用常规循环慢100倍!我知道parfor可以做并行总和,所以我不确定为什么这不起作用。我跑matlabpool在运行我的代码之前使用开箱即用的配置。我对matlab比较陌生,刚开始使用并行功能,所以请不要认为我没有做一些愚蠢的事情。谢谢!PS:我在四核上运行代码,所以我希望看到一些改进。
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

对小的值进行分区和分组结果(分割工作和从多个线程/核心收集结果的开销)很高nt。这是正常的,您不会为可以在简单循环中快速执行的简单任务分区数据。

始终在循环内执行一些具有挑战性的东西,这值得分区开销。这是对并行编程的一个很好的介绍

线程来自线程池,因此创建线程的开销不应该存在。但是为了创建部分结果必须创建大小的n矩阵,bistar计算所有部分结果,然后必须添加所有这些部分结果(重新组合)。在直接循环中,这很有可能就地完成,不进行分配。

帮助中的完整声明(感谢您的链接):

如果计算f,g和h的时间很长,则parfor将明显快于相应的for语句,即使n相对较小。

所以你看他们的意思与我的意思完全相同,如果你在循环中做的事情足够复杂/耗时,那么小n值的开销只值得努力。


查看完整回答
反对 回复 2019-08-28
?
largeQ

TA贡献2039条经验 获得超7个赞

除了由于通信开销导致的性能不佳(参见其他答案)之外,还有另一个原因是parfor在这种情况下不使用。parfor在这种情况下完成的所有内容都使用内置多线程。假设所有工作人员都在同一台PC上运行,那么没有任何优势,因为单个呼叫已经使用了处理器的所有核心。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 1577 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信