下面有一个简单的parfor
循环。
% fileAddr is a cell array of (size N) of file-addresses
sIdx = nan(N,1);
eIdx = nan(N,1);
errMsg = cell(N,1);
parfor i=1:N
[sIdx(i),eIdx(i),errMsg{i}] = myFunk(fileAddr{i});
end
函数文件myFun()
加载fileAddr{i}
给定的文件,进行一些计算并返回结果。文件加载部分最耗时。我的机器有4个物理核心。我尝试了parfor()
,其中有1,2,3和4个工作人员。每次,时间消耗都差不多。我的理解是,如果多个{@ {1}}并行并行处理文件,则该程序将运行得更快,但探查器结果却显示为相反。
有人可以解释我在哪里犯错吗?
答案 0 :(得分:5)
您只有1个硬盘驱动器。一次只能读取1个工人(它是带有磁头的超速磁盘!)。它的速度较慢,因为工作人员正在等待轮换HDD的时间,因此您不会浪费时间。再加上所有偷听的数据发送和共享,您将使其变慢。
您尝试过spmd
吗?但我怀疑它最终会得到与parfor
相同的结果。