下面给出了一个简单的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个物理核心。我尝试使用由1、2、3和4个工作者组成的池o的parfor()
。每次,时间消耗都在类似的范围内。我的理解是,如果有多个工作者在并行load()
文件,程序会运行得更快,但分析器的结果却并非如此。
有没有人能解释一下我哪里搞错了?
发布于 2018-07-26 15:52:52
您只有1个硬盘。一次只能有一个工作人员读取(这是一个带磁头的高速磁盘!)它变慢是因为工人们正在等待换硬盘,所以你没有赢得时间。再加上所有无意间听到的数据发送和共享,你会让它变得更慢。
你试过spmd
吗?但我怀疑它最终会得到与parfor
相同的结果。
https://stackoverflow.com/questions/51542788
复制相似问题