2017-09-08 5 views
1

A, B, C: réseaux de cellules de taille 100 x 1.
Chaque cellule de A est une matrice. Tous ont la même taille.
B et C contiennent des vecteurs.calcul parallèle avec matrice de cellules

Je dois créer un réseau de cellules D de taille 100 x 1. Code série ressemblera à quelque chose comme:

for i=1:100 
    D{i}=my_func(A{i},B{i},C{i}); 
end 

my_func est une fonction qui prend l'entrée d'une matrice et des vecteurs, la production d'un vecteur. Je veux utiliser parfor (ou spmd) pour accélérer les choses. Cependant, A a une grande taille, donc je ne veux pas diffuser A à tous les travailleurs. Y at-il un moyen de le faire efficacement, étant donné que my_func prend parfois? Si quelqu'un peut me donner un petit exemple, je l'apprécierai.

Répondre

0

Il semble que vos tableaux de cellules soient tous sliced variables. Cela signifie qu'ils ne seront pas diffusés à tous les travailleurs, seulement les segments dont chaque travailleur a besoin.

Ainsi, vous pouvez sans risque remplacer le for avec parfor:

parfor i = 1:100 
    D{i} = my_func(A{i}, B{i}, C{i}); 
end 
+0

Alors son vraiment étrange, car en utilisant comme parfor qui est beaucoup plus lent que le code série. Je ne sais pas vérifier mais si je cours sur 3 cœurs, mon ordinateur est complètement gelé. Je soupçonne donc que les données étaient diffusées aux travailleurs. Merci. – Bluesking

+0

@Bluesking Dans quelle version de MATLAB êtes-vous? Si ≥ R2016b, alors vous pouvez jeter un oeil à [ticBytes] (https://nl.mathworks.com/help/distcomp/ticbytes.html) –

+0

J'ai été capable de vérifier la quantité de données envoyées à chaque travailleur, environ 300 Mo, soit environ la moitié de la taille de la matrice A. Donc, il semble que rien ne va pas. Comment se fait-il qu'il n'y avait aucun avantage dans le temps de course? – Bluesking