在我的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
函數,對吧?
如果你有平行的工具箱,你可以使用PARFOR而不是爲。也許看看這裏:http://www.mathworks.de/de/help/distcomp/getting-started-with-parfor.html – zinjaai 2014-09-03 12:25:32
Parfor不會工作,因爲使用'opts'的方式。 – jibounet 2014-09-03 12:40:59
@jibounet發表一個最小的例子,其中從for切換到parfor會導致Matlab顯示你得到的錯誤。 (在你的例子中,我們缺少'opts'的定義) – Sheljohn 2014-09-03 12:58:05