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值的开销只值得努力。
添加回答
举报
0/150
提交
取消