1

我在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 名工人组成的池。每次,时间消耗都差不多。我的理解是,如果多个工作人员load()并行处理文件,程序运行速度会更快,但分析器结果显示不同。

谁能解释我在哪里犯了错误?

4

1 回答 1

5

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

你试过spmd吗?但我怀疑它最终会得到与你相同的结果parfor

于 2018-07-26T15:52:51.773 回答