【问题标题】:parfor slows down computationparfor 减慢计算速度
【发布时间】:2017-09-18 05:22:40
【问题描述】:

我在一台有 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 倍。

【问题讨论】:

  • 我想你的 CPU 内核比你的 GPU 内核快得多。我假设如果您有 44 名工作人员,则必须使用 matlab for gpu,因为您不太可能拥有一台具有 44 个 CPU 内核的计算机。
  • @GarrGodfrey IIRC, parfor 默认使用 CPU 内核,而不是 GPU 内核。
  • @ransa 一种可能的解释是,在 parfor 循环中运行计算之前,需要对数据进行分区,然后将其发送给各个工作人员。据推测,开销大于效率增加。不知道数据和功能很难说。
  • 您可能想阅读 this question 向工作人员广播数据和 this one 使用 parfor (cc @Paul) 节省时间和内存
  • 你的for 版本是指用for 简单地替换parfor 我接受吗?此外,当您的循环中只有 5 个实例时,拥有 44 个工作人员并不真正相关。要么它只使用 5 个工作器(它们必须是物理 CPU 内核,所以我希望你在服务器上),或者它会使用全部 44 个,无论你使用的是 for 还是 parfor,如果函数有隐式多线程(参见我之前的评论,第二个链接)。如果是后者,那就更慢了,因为需要将变量广播给所有工作人员,这比计算需要更多时间

标签: matlab performance parallel-processing parfor


【解决方案1】:

检查 CPU 使用率。

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

【讨论】:

  • 你说得对,fft2/ ifft2 使用多核,因此效率不高。因此我的问题是如何克服这个问题?有没有其他方法可以在不使用使用多核的函数的情况下计算相关性?另一个问题:我认为如果有 2 个函数使用多个内核,优先级是外部并行函数,所以内部函数是串行运行的,为什么这里不是这样?
  • @ransa 什么意思,效率不高?你的东西需要做 X 计算,如果 fft 使用 4 个核心,它将花费 1/4 的时间,它会使用一个核心。这很好,还不错:) 避免 fft 或让它在单核上运行是没有意义的。如果这样做,您将使代码运行速度慢 4 倍,然后 parfor 将再次使其运行速度加快 4 倍,因此您将完全回到起点。当您执行 parfor 时,fft 实际上应该在单个核心上运行(假设您使用的线程数与核心数一样多)。因此,每个周期的这种减速直接是 fft 在 1C 而不是 4 上的结果。
  • @ransa 如果你想要效率,就像让 parfor 案例以 for 的速度运行单个案例(并且只在其他线程上使用剩余的 CPU 周期),那么我没有想法如何做到这一点。我不相信你能做到——这需要 Mathworks 做很多工作,而且大部分时间都可能无法正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多