在我的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