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.
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.
Dans l'éditeur MATLAB®, entrez la boucle
for
suivante. Ajouteztic
ettoc
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
Exécutez le script et notez le temps écoulé.
Elapsed time is 31.935373 seconds.
Dans le script, remplacez la boucle
for
par une boucleparfor
.tic n = 200; A = 500; a = zeros(n); parfor i = 1:n a(i) = max(abs(eig(rand(A)))); end toc
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.
L'exécution deStarting parallel pool (parpool) using the 'Processes' profile ... connected to 4 workers. ... Elapsed time is 10.760068 seconds.
parfor
sur quatre nœuds de calcul est environ trois fois plus rapide que l'exécution de la bouclefor
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 boucleparfor
. Toutes les itérations defor
-loop ne peuvent pas être transformées enparfor
-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) .