尽管切片,为什么 parfor 很慢?

Why is parfor slow despite slicing?

下面给出了一个简单的 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} 给出的文件,进行一些计算并得出 returns 结果。文件加载部分是最耗时的。我的机器有 4 个物理内核。我试过 parfor() 有 1、2、3 和 4 个工人。每次,时间消耗都在相似的范围内。我的理解是,如果不止一个工作人员并行 load() 处理文件,程序会 运行 更快,但探查器结果显示并非如此。

谁能解释一下我哪里出错了?

您只有 1 个硬盘。一次只有 1 名工人可以读取它(它是一个带磁头的超速磁盘!)。它的速度较慢,因为工人们正在等待轮到他们使用硬盘驱动器,所以你没有时间。再加上所有无意中听到的数据发送和共享,你让它变慢了。

你试过spmd了吗?但我怀疑它最终会得到与 parfor.

相同的结果