我在matlab中有parfor循环,当它运行时,只有一个进程正在使用CPU(顶部和系统监视器显示相同的CPU使用率,请参阅附带的屏幕截图),并且parfor运行速度不快。为什么???
ubuntu 12.04 LTS,64bits 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&埃德里克,
我按照你的建议运行了一个小测试用例,然后我注意到问题是由内部循环代码访问外部循环数据引起的,在这个http://www.mathworks.com/help/distcomp/advanced-topics.html中,他们称之为访问广播变量。 / p>
在parfor-loop开始时,任何广播变量的值 被送到所有工人。虽然这种类型的变量很有用 甚至是必要的,大的广播变量可能会导致很多 客户与工人之间的沟通。在某些情况下可能会 为此目的更有效地使用临时变量,创建 并在循环中分配它们。
对于我的情况,广播变量包含大量数据,因此将问题传递给工作人员是有问题的。
删除部分数据后,parfor循环正常。