parfor减慢了计算速度

时间:2017-04-21 09:21:05

标签: matlab performance parallel-processing parfor

我在拥有44名工作人员的计算机上运行此代码。但是,并行的每次迭代都比串行模式慢,尽管整个循环的总执行时间会减少。

  template=cell(31,1);
  for i=1:31
     template{i}=rand(i+24);
  end
  parfor i=1:5
     img=rand(800,1280+i); % It's an other function that gives me the values of img ,here it's just an example
     tic
     cellfun (@(t) normxcorr2 ( t ,img),template,'UniformOutput',0);
     toc
  end

因此,每个循环中的经过时间约为18秒。当我将parfor更改为for时,每个循环中经过的时间大约为6.7秒。

你能解释一下为什么在这种情况下parfor循环比for循环慢吗?  我检查了MATLAB文档以及类似的问题,但它对我没有帮助。

注意:parfor版本执行脚本的总时间更快,我只是想了解为什么函数cellfun在并行版本中慢了3倍。

1 个答案:

答案 0 :(得分:2)

检查CPU使用情况。

我认为这里的主要原因是像fft这样的东西(最有可能是xcorr的一部分)已经使用了多个核心。我现在无法测试parfor,但普通for循环已经在我的4C / 4T CPU上使用你的代码有大约70%的CPU利用率。因此,parfor最多可以填充剩下的30%(在我的计算机上),但显然会慢慢运行每个实例。