2014-09-03 82 views
0

在我的Matlab腳本中,我運行了一個for循環的算法,其中,在每次迭代中,我需要做一個梯度下降。所有的梯度下降都是獨立的。這裏是我的腳本的結構:並行化matlab代碼

for i=1:p 

x=gradient_descent(x_init,grad_g,opts(i)); 

end 

其中opts(i)是一種包含梯度下降必需的變量的結構。在這種情況下,$ p = 145 $。我的腳本在我的機器上以$ 8 $秒的速度運行(不使用任何並行技巧)。 我的印象是,我的腳本可以並行化,因爲每個梯度下降都是獨立的。當我在電腦上打開matlabpool時,我最多可以使用4個實驗室。同時,每個實驗室可以運行一個漸變下降,而不是一次做一個漸變下降,我可以做4.但我不知道如何能夠並行化我的腳本。從我在互聯網上找到的,我可以使用batch函數,對吧?

+1

如果你有平行的工具箱,你可以使用PARFOR而不是爲。也許看看這裏:http://www.mathworks.de/de/help/distcomp/getting-started-with-parfor.html – zinjaai 2014-09-03 12:25:32

+0

Parfor不會工作,因爲使用'opts'的方式。 – jibounet 2014-09-03 12:40:59

+0

@jibounet發表一個最小的例子,其中從for切換到parfor會導致Matlab顯示你得到的錯誤。 (在你的例子中,我們缺少'opts'的定義) – Sheljohn 2014-09-03 12:58:05

回答

4

我認爲這應該工作:

parfor i=1:p 
    x{i}=gradient_descent(x_init,grad_g,opts(i)); 
end 
+0

我改編了你的答案,我最終得到了parfor循環的工作!一切正常。謝謝 !! – jibounet 2014-09-03 13:33:32