Main Content

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

Exécuter des boucles de manière interactive en parallèle à l'aide de parfor

Dans cet exemple, vous commencez avec une boucle for lente et vous accélérez le calcul en utilisant une boucle parfor à la place. parfor divise l'exécution des itérations de la boucle for sur les nœuds de calcul d'un pool parallèle.

MATLAB client connected to four MATLAB workers.

Cet exemple calcule le rayon spectral d'une matrice et convertit une boucle for en une boucle parfor. Découvrez comment mesurer l’accélération qui en résulte.

  1. Dans l'éditeur MATLAB®, entrez la boucle for suivante. Ajoutez tic et toc pour mesurer le temps écoulé.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    for i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc
  2. Exécutez le script et notez le temps écoulé.

    Elapsed time is 31.935373 seconds.

  3. Dans le script, remplacez la boucle for par une boucle parfor.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    parfor i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc

  4. Exécutez le nouveau script et exécutez-le à nouveau. Notez que la première exécution est plus lente que la deuxième, car le pool parallèle prend un certain temps pour démarrer et rendre le code disponible aux workers. Notez le temps écoulé pour la deuxième exécution.

    Par défaut, MATLAB ouvre automatiquement un pool parallèle de nœuds de calcul sur votre machine locale.

    Starting parallel pool (parpool) using the 'Processes' profile ... connected to 4 workers.
    ...
    Elapsed time is 10.760068 seconds. 
    L'exécution de parfor sur quatre nœuds de calcul est environ trois fois plus rapide que l'exécution de la boucle for correspondante. L'accélération est inférieure à l'accélération idéale d'un facteur de quatre sur quatre workers. Cela est dû aux frais généraux parallèles, notamment le temps requis pour transférer les données du client vers les workers et inversement. Cet exemple montre une bonne accélération avec une surcharge parallèle relativement faible et bénéficie de la conversion en une boucle parfor. Toutes les itérations de for-loop ne peuvent pas être transformées en parfor-loops plus rapides. Pour en savoir plus, consultez Decide When to Use parfor .

Une exigence clé pour l'utilisation de parfor-loops est que les itérations individuelles doivent être indépendantes. Les problèmes indépendants adaptés au traitement parfor incluent les simulations de Monte Carlo et les balayages de paramètres. Pour les étapes suivantes, consultez Convertir les boucles for en boucles parfor .

Dans cet exemple, vous avez réussi à accélérer le calcul en convertissant la boucle for en une boucle parfor sur quatre workers. Vous pouvez réduire davantage le temps écoulé en augmentant le nombre de nœuds de calcul dans votre pool parallèle, voir Scale Up parfor-Loops to Cluster and Cloud .

Vous pouvez modifier vos profils de cluster pour contrôler le nombre de nœuds de calcul qui exécutent vos boucles et si les nœuds de calcul sont locaux ou sur un cluster. Pour plus d'informations sur les profils, consultez Discover Clusters and Use Cluster Profiles .

Modifiez vos préférences parallèles pour contrôler si un pool parallèle est créé automatiquement et combien de temps il reste disponible avant d'expirer. Pour plus d'informations sur les préférences, consultez Spécifiez vos préférences parallèles .

Vous pouvez exécuter des modèles Simulink® en parallèle avec la commande parsim au lieu d'utiliser des parfor-loops. Pour plus d'informations et des exemples d'utilisation de Simulink en parallèle, consultez Running Multiple Simulations (Simulink) .

Voir aussi

| | |

Sujets associés