2013-03-27 68 views
2

我需要並行執行兩個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,但沒有速度。

+0

對不起,如果這是一個愚蠢的問題,但爲什麼要這麼快就開始平行呢? – wakjah 2013-03-27 15:34:39

+0

首先,我必須讓我的程序平行進行研究。其次,我只是希望它比順序版本更快。實際上,如果我不考慮獲得結果,它會比序貫(0.24 vs 0.17s)快40%。所以,我想知道,如果有可能快速獲得結果:) – 2013-03-27 15:46:55

+0

令人驚訝的結果!第二次運行時速度是否有所不同(以及是否已經完成任何預先初始化)?另外,'K {:}'也許超出了你能夠有效存儲的內容(在Ram中)?可以通過使用300而不是1000來檢查一次。 – 2013-03-27 15:52:35

回答

1

所以,問題是開銷產生的開銷。雖然我不能給你一個具體的答案 - 這取決於你的情況和matlab版本 - 我可以建議一些事情來嘗試。

  1. 嘗試使用不同的方法從matlabpool實驗室中檢索數據。其中一些可能允許matlab做一些幕後優化。爲此我建議看分佈式數組。或者,如果您不需要對數據進行任何後續處理,則可以將其直接保存到磁盤,而不是通過內存傳遞。

  2. 嘗試作爲分佈式運行它batch job。更新版本的matlab允許您創建批處理作業並在本地機器(而不是專用羣集)上運行它們。由於你的兩個函數是完全獨立的,你可以使用這種方法來獲取數據。

  3. 試着尋找將結果放置在共享內存中的方法。這很難,因爲Matlab的並行處理基於消息傳遞的MPI;有些模式基本上是MPI上的matlab封裝。這意味着每個工作人員都是獨立的Matlab存儲空間實例,因此當您再次收集數據時,實際上會生成一個MPI消息,這會產生一些開銷。避免這種情況的方法已在​​3210之前討論過。

  4. 看看功能。如果你可以/可以修改你所調用的兩個函數,那麼你可能能夠以沒有這種通信開銷的方式對它們進行並行化。當涉及到向量的並行處理時,Matlab非常聰明,所以如果有任何操作可以轉化爲向量/矩陣操作,那麼可以在不需要通信開銷的情況下節省大量的速度。

  5. 試試matlab以外的東西。如果您有時間和編碼技能,那麼您可以使用允許多線程執行的語言重新編寫函數,如使用OpenMP的C++。

我已經儘管共享輸入數據的問題是易並行所以我最終拯救直接從工作節點輸出到磁盤面臨着自己的Matlab的並行編程,但在我的情況類似問題。

+0

是什麼讓你得出結論:「問題是通過結果產生的開銷」?當你在parfor中做小事情時,開銷通常是一個問題,但在這裏肯定不是這種情況。 – 2013-03-27 17:06:26

+0

在原始問題中,第一種方法將獲取數據('k = k {1}')的實際工作(調用兩種方法)完全分開並給出每個步驟花費的時間。方法調用總共需要0.17s,而結果傳遞需要1.15s。 – Alan 2013-03-27 17:29:24

+0

謝謝你們的幫助。現在,無所事事後,我的搜索結果縮短了10倍,而且現在兩次(執行和數據檢索)的搜索結果都相等,但隨着元素數量越來越多,搜索時間越來越長。看來我正在測試不適合的程序,因爲它使用了大量的數據而不能廣泛執行。 – 2013-03-27 19:15:51