1

我在 matlab 中有 parfor 循环,当它运行时,只有一个进程正在使用 CPU(顶部和系统监视器显示相同的 CPU 使用率,请参见随附的屏幕截图),并且 parfor 没有运行得更快。为什么???

ubuntu 12.04 LTS,64 位 matlab 2012b

pools = matlabpool('size');
if pools ~= 10
    if pools > 0
        matlabpool('close');
    end      
    matlabpool local 10;  %10+ the one I am using = 11 matlab process in system monitor
end

parfor i = 1:num_utt

 dojob();

end

在此处输入图像描述

谢谢,Marcin 和 Edric,

我按照你的建议运行了一个小测试用例,然后我注意到问题是由内部循环代码访问外部循环数据引起的,在这个http://www.mathworks.com/help/distcomp/advanced-topics 中。 html,他们将其称为访问广播变量。

在 parfor 循环开始时,任何广播变量的值都会发送给所有工作人员。尽管这种类型的变量可能有用甚至必不可少,但大的广播变量会导致客户端和工作人员之间的大量通信。在某些情况下,为此目的使用临时变量可能更有效,在循环内创建和分配它们。

就我而言,广播变量包含大量数据,因此将其传递给工作人员有问题。

删除一些数据后,parfor 循环工作正常。

4

0 回答 0