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

+0

Parfor не будет работать из-за того, что используется метод «opts». – jibounet

+0

@ jibounet Опубликуйте минимальный пример, в котором переход с for на parfor заставит Matlab показать полученную ошибку. (В вашем примере у нас отсутствует определение 'opts') – Sheljohn

ответ

4

Я думаю, что это должно работать:

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

Я приспособил свой ответ к моему сценарию, и в итоге я получил парфорную петлю! Все работает нормально. Благодаря !! – jibounet