我需要并行执行两个Matlab函数。问题是从他们那里获得结果比执行慢得多。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, 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;
我如何才能让结果反馈快?我发现Parallel Programming on MATLAB to execute 3 different functions at the same time,但没有速度。
对不起,如果这是一个愚蠢的问题,但为什么要这么快就开始平行呢? – wakjah 2013-03-27 15:34:39
首先,我必须让我的程序平行进行研究。其次,我只是希望它比顺序版本更快。实际上,如果我不考虑获得结果,它会比序贯(0.24 vs 0.17s)快40%。所以,我想知道,如果有可能快速获得结果:) – 2013-03-27 15:46:55
令人惊讶的结果!第二次运行时速度是否有所不同(以及是否已经完成任何预先初始化)?另外,'K {:}'也许超出了你能够有效存储的内容(在Ram中)?可以通过使用300而不是1000来检查一次。 – 2013-03-27 15:52:35