2014-09-03 81 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