Contenu principal

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

Exécuter des boucles interactives en parallèle à l'aide de parfor

Dans cet exemple, vous démarrez 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 workers 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 résultante.

  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, puis 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 pour les workers. Notez le temps écoulé pour la deuxième course.

    Par défaut, MATLAB ouvre automatiquement un pool parallèle de workers 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 workers 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 quatre sur quatre workers. Cela est dû à la surcharge parallèle, y compris le temps nécessaire pour transférer les données du client vers les workers et vice versa. Cet exemple montre une bonne accélération avec une surcharge parallèle relativement faible et bénéficie de la conversion en boucle parfor. Toutes les itérations de boucles for ne peuvent pas être transformées en boucles parfor plus rapides. Pour en savoir plus, voir Décider quand utiliser parfor .

L’une des exigences clés pour l’utilisation des boucles parfor 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, voir 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 workers 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 workers qui exécutent vos boucles et si les workers sont locaux ou sur un cluster. Pour plus d'informations sur les profils, voir 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, voir Spécifier vos préférences pour le traitement parallèle .

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

Voir aussi

| | |

Rubriques