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

Abh*_*nav 1 matlab parfor matlab-load

我有一个简单的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
Run Code Online (Sandbox Code Playgroud)

函数文件myFun()加载由给定的文件fileAddr{i},进行一些计算并返回结果.文件加载部分是最耗时的.我的机器有4个物理核心.我尝试parfor()了1,2,3和4名工人.每一次,时间消耗都在类似的范围内.我的理解是,如果不止一个工作者load()并行处理文件,程序运行速度会更快,但分析器结果会显示出来.

任何人都可以解释我在哪里犯了错误?

And*_*uri 5

你只有1个硬盘.一次只能有一名工人从中读取它(它是一个带磁头的超速磁盘!).它的速度较慢,因为工作人员正在等待转向硬盘驱动器,所以你不会赢得时间.除此之外,所有无意中听到的数据发送和共享都让你变得更慢.

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

  • @AnderBiguri:与并行任务相比,SSD比旋转磁盘更好地工作,因为它们不需要寻找.对于旋转磁盘,`parfor`不仅会受到线程同步的开销(可能会减慢3-5%),而是浪费时间在文件之间来回移动物理磁头(可能是30,000-500,000%减速).固态硬盘没有这个限制(它们仍然具有有限的随机访问速度,但它非常接近顺序访问速度). (3认同)