2014-09-03 1 views
0

Dans mon script Matlab, je lance un algorithme avec une boucle for dans laquelle, à chaque itération, je dois faire une descente en dégradé. Toutes les descentes de gradient sont indépendantes. Voici la structure de mon script:Paralléliser le code matlab

for i=1:p 

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

end 

opts(i) est une structure qui contient des variables nécessaires à la descente de gradient. Dans ce cas, $ p = 145 $. Mon script s'exécute en $ 8 $ secondes sur ma machine (sans utiliser d'astuce parallèle). J'ai l'impression que mon script peut être parallélisé puisque chaque dégradé de descente en indépendant. Lorsque je suis sur mon ordinateur, je peux utiliser jusqu'à 4 laboratoires. Simultanément, chaque laboratoire pourrait faire une descente en dégradé et, au lieu de faire une descente en dégradé à la fois, je serais capable de faire 4 fois. Mais je ne sais pas comment je pourrais paralléliser mon script. D'après ce que j'ai trouvé sur Internet, je pourrais utiliser la fonction batch, non?

+1

si vous avez la boîte à outils parallèle, vous pouvez utiliser parfor au lieu de pour. Peut-être jeter un oeil ici: http://www.mathworks.de/de/help/distcomp/getting-started-with-parfor.html – zinjaai

+0

Parfor ne fonctionnera pas à cause de la façon dont 'opts' est utilisé. – jibounet

+0

@jibounet Publiez un exemple minimal dans lequel le passage de for à parfor causerait à Matlab d'afficher l'erreur que vous obtenez. (Dans votre exemple, il nous manque la définition de 'opts') – Sheljohn

Répondre

4

Je pense que cela devrait fonctionner:

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

J'ai adapté votre réponse à mon script et j'ai fini par faire fonctionner la boucle de parfor! Tout fonctionne bien. Merci !! – jibounet