当我正常调用函数时,执行时间比parfeval快得多。
tic
f = parfeval(@magic,1,10000);
value = fetchOutputs(f);
toc
Elapsed time is 2.244390 seconds.
神奇的功能在帕费瓦尔身上只需2.24秒。
tic
magic(10000);
toc
Elapsed time is 0.592743 seconds.
但当我正常打电话时,它工作得很快。这是什么原因以及如何加快发烧功能?
通常,在设置线程时需要考虑一些开销(parfeval
就是这样做的(。这是造成时间差异的主要原因。
当使用任何类型的并行处理时,您必须首先确定进程运行的时间是否足够长,以至于生成进程的开销可以忽略不计。在这种情况下,事实并非如此。
测试一个长期运行的案例:
tic
test(1E10)
toc
tic
f = parfeval(@test, 1, 1E10)
value = fetchOutputs(f);
toc
function x = test(n)
x = 1;
for i = 1:n
x = x * 1;
end
end
它给出了(在我的电脑上(5.51
和5.49
秒的时间。