【发布时间】:2017-01-27 16:46:47
【问题描述】:
我正在比较两个块之间的执行时间,一个使用parfor,另一个通过发出parfeval 并获取输出来做同样的事情:
parfor k = 1:N
a = rand(5000);
b = inv(a);
end
对比
for k = 1:N
a = rand(5000);
F(k) = parfeval(p,'inv',1,a);
end
for k = 1:N
[completedIdx,value] = fetchNext(F);
fprintf(1,'%d ',completedIdx);
end
parfor 始终更快。关于为什么会这样的任何见解?我的简单理解是 parfor 基本上将每个循环作为并行作业运行。
【问题讨论】:
-
相关阅读:stackoverflow.com/questions/32146555/…
inv操作确实是隐式多线程的,因此在上面使用parfor并不能让它更快(参见我链接的帖子)。 -
非常有意义。我在多线程函数中查看但没有找到 inv 但我相信你。我仍然不确定这是否解释了与 parfor 相比更慢的 parfeval
标签: matlab parallel-processing distributed