Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

for (drange)

Boucle for sur une plage distribuée

Description

for loopVar = drange(range); statements; end; exécute des itérations de boucle for en parallèle sur une plage distribuée.

MATLAB® partitionne la plage spécifiée par range sur les workers du pool parallèle, en utilisant des segments contigus de longueur approximativement égale. MATLAB exécute ensuite les commandes du corps de la boucle dans statements dans une boucle for sur la plage spécifiée de loopVar sur chaque worker.

Chaque itération doit être indépendante des autres itérations, de sorte que les itérations puissent être effectuées dans n'importe quel ordre. Aucune communication avec d'autres workers n'est autorisée dans le corps de la boucle.

Chaque worker peut accéder aux parties locales des tableaux codistribués, mais ne peut pas accéder aux parties des tableaux codistribués qui sont stockées sur d'autres workers. Vous pouvez utiliser loopVar pour indexer la partie locale d'un tableau codistribué dans les conditions suivantes :

  • l'index de boucle range est fourni sous la forme range = 1:N

  • le tableau est distribué en utilisant le schéma de codistribution par défaut 1d

  • le tableau a une taille N le long de la dimension de distribution

Vous pouvez utiliser l'instruction break pour terminer l'exécution de la boucle.

exemple

Exemples

réduire tout

Cet exemple montre comment trouver le rang des carrés magiques. Accédez uniquement à la partie locale d’un tableau codistribué.

spmd
   r = zeros(1, 40, codistributor());
   for n = drange(1:40)
      r(n) = rank(magic(n));
   end
end
r = gather(r);

Cet exemple montre comment effectuer une approximation de Monte Carlo de pi.

spmd
   m = 10000;
   for p = drange(1:spmdSize)
      z = rand(m,1) + i*rand(m,1);
      c = sum(abs(z) < 1); 
   end
   k = spmdPlus(c)
   p = 4*k/(m*spmdSize);
end
p{1}
ans = 3.1501

Cet exemple montre comment tenter de calculer les nombres de Fibonacci. Cet exemple ne fonctionne pas, car les corps de boucle sont dépendants. Le code suivant génère une erreur :

spmd
   f = zeros(1, 50, codistributor());
   f(1) = 1;
   f(2) = 2;
   for n = drange(3:50)
      f(n) = f(n-1) + f(n-2)
   end
end
Error detected on workers 2 3 4 5 6.

Caused by:
    Error using codistributed/subsref (line 40)
    Error using codistributed/subsref (line 40)
    Inside a FOR-DRANGE loop, a subscript can only access the local 
    portion of a codistributed array.

Arguments d'entrée

réduire tout

Nom de la variable de boucle, spécifié sous forme de texte.

Plage d'index de boucle, spécifiée sous la forme d'une expression de la forme start:finish ou start:increment:finish. La valeur par défaut de l'incrément est 1 .

Corps de la boucle, spécifié sous forme de texte. La série de commandes MATLAB à exécuter dans la boucle for.

statements ne doit pas inclure de fonctions qui effectuent une communication, y compris les fonctions suivantes :

Historique des versions

Introduit dans R2007b

Voir aussi

| |