Main Content

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

Variables de diffusion

Une variable de diffusion est toute variable, autre que la variable de boucle ou une variable découpée, qui ne change pas à l'intérieur d'une boucle. Au début d'une boucle parfor, MATLAB® envoie les valeurs de toutes les variables de diffusion à tous les workers. Dans cet exemple, MATLAB envoie les valeurs de A et B à tous les workers.

A = 5;
B = 10;
C = 0;
parfor i = 1:10
    if i == A
        C = C + B;
    end
end

Considérations relatives aux performances

Avoir des variables de diffusion volumineuses ou de nombreuses variables de diffusion peut entraîner une communication importante entre un client et ses workers associés et augmenter les frais généraux. Lorsque la surcharge de communication due aux variables de diffusion est importante, envisagez plutôt de créer et d’attribuer des variables temporaires à l’intérieur de la boucle. À l’inverse, lorsque la surcharge de calcul due à la création et à l’attribution de variables temporaires est importante, envisagez plutôt d’utiliser des variables de diffusion.

Pour plus de détails, voir Variables temporaires et Deciding When to Use parfor.

Remarque

Lorsque plusieurs boucles parfor doivent accéder au même ensemble constant de données, vous pouvez améliorer les performances de votre code en utilisant parallel.pool.Constant qui transfère les données aux workers une seule fois au lieu du début de chaque boucle parfor.

Pour améliorer les performances de votre code, recherchez des opportunités pour réduire le nombre de variables de diffusion inutiles. Par exemple, ce code contient une variable de diffusion M.

M = magic(10);
parfor i = 1:numel(M)
    out(i) = M(i)./numel(M);
end

Ce code peut être réécrit pour évaluer numel(M) avant la boucle parfor. La suppression de numel(M) de la boucle parfor empêche MATLAB d'envoyer tous les éléments de M à chaque worker. Au lieu de cela, MATLAB envoie la valeur de N et un sous-ensemble de la variable découpée M à chaque worker.

M = magic(10);
N = numel(M);
parfor i = 1:N
    out(i) = M(i)./N;
end

Voir aussi

Sujets associés