Performance Matlab从并行函数得到的结果比较慢
我需要并行执行两个Matlab函数。问题是从它们那里获得结果要比执行慢得多 第一种方法:Performance Matlab从并行函数得到的结果比较慢,performance,matlab,function,parallel-processing,parfor,Performance,Matlab,Function,Parallel Processing,Parfor,我需要并行执行两个Matlab函数。问题是从它们那里获得结果要比执行慢得多 第一种方法: spmd; if labindex==1, K=MatricaK(NP, NE, r, Kxx, N, h, 1); %K is 1000x1000 matrix end; if labindex==2, F=Apkrovos(NP, NE, N, r, Ta, h, 1); %F is 1000x1 vector end; end; %This part is quite fast, a
spmd;
if labindex==1,
K=MatricaK(NP, NE, r, Kxx, N, h, 1); %K is 1000x1000 matrix
end;
if labindex==2,
F=Apkrovos(NP, NE, N, r, Ta, h, 1); %F is 1000x1 vector
end;
end;
%This part is quite fast, around 0.17s.
K=K{1};
F=F{2};
%This part is very slow, around 1.15s.
第二种方法:
parfor i=1:2
if i==1
K=MatricaK(NP, NE, r, Kxx, N, h, 1); %this way doesn't return K outside the loop, but very fast, around 0.15 for all loop
..
K{i}=MatricaK(NP, NE, r, Kxx, N, h, 1); %this works, but slow, around 1.5s
..
K = [K MatricaK(NP, NE, r, Kxx, N, h, 1)]; %also works, but slow, around 1.5s
...
end;
我怎样才能使结果快速返回?我发现了,但速度与此无关。因此,问题在于传递结果所产生的开销。虽然我不能给你一个具体的答案-这取决于你的情况和matlab版本-我可以建议一些事情来尝试
我自己在Matlab中也遇到过类似的并行编程问题,尽管在我的例子中,尽管共享了输入数据,但问题是令人尴尬的并行问题,因此我最终将输出直接从工作节点保存到磁盘。如果这是一个愚蠢的问题,请原谅,但是,如果一开始就这么快,为什么还要费心让它并行呢?首先,我必须让我的程序并行以进行研究。第二,我只是希望它比顺序版本更快。事实上,如果我不考虑结果的话,它比顺序(0.24 vs0.17s)快40%。所以,我想知道,是否有可能快速得到结果:)令人惊讶的结果!第二次运行时(以及已经完成任何预初始化时),速度是否不同?另外,
K{:}
是否可能超过了您可以有效存储的容量(在Ram中)?可以使用300而不是1000检查一次。是什么让您得出结论,问题在于将结果传递给其他人所产生的开销?当您在parfor中做一些小事情时,开销通常是一个问题,但这里的情况肯定不是这样。在最初的问题中,第一个方法将实际工作(调用两个方法)与获取数据(k=k{1}
)清楚地分开,并给出每个步骤所花费的时间。方法调用总共需要0.17秒,而结果通过需要1.15秒。谢谢大家的帮助。现在,我在不做任何事情的情况下得到了大约缩短10倍的时间结果,现在这两个时间(执行和数据检索)对于1000 e来说是相等的,但是随着元素的增加,数据检索时间也在增加。我似乎在测试不合适的程序,因为它使用了大量数据来进行不广泛的执行。