尽管切片,为什么 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
.
相同的结果
下面给出了一个简单的 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
.