parfor
Exécuter des itérations de boucle for en parallèle sur les workers
Syntaxe
Description
parfor exécute des itérations de boucle loopVar = initVal:endVal; statements; end for en parallèle sur les workers d'un pool parallèle.
MATLAB® exécute les commandes du corps de la boucle dans statements pour les valeurs de loopVar comprises entre initVal et endVal. loopVar spécifie un vecteur de valeurs entières augmentant de 1. Si vous avez Parallel Computing Toolbox™, les itérations de statements peuvent s'exécuter sur un pool parallèle de workers sur votre ordinateur multicœur ou cluster. Comme avec une boucle for, vous pouvez inclure une seule ligne ou plusieurs lignes dans statements.
Pour découvrir comment parfor peut vous aider à augmenter votre débit, consultez Décider quand utiliser parfor .
parfor diffère d'une boucle for traditionnelle des manières suivantes :
Les itérations de boucle sont exécutées en parallèle dans un ordre non déterministe. Cela signifie que vous devrez peut-être modifier votre code pour utiliser
parfor. Pour plus d'aide, voir Convertir les boucles for en boucles parfor .Les itérations de boucle doivent être consécutives et avoir des valeurs entières croissantes.
Le corps de la boucle
parfordoit être indépendant. Une itération de boucle ne peut pas dépendre d’une itération précédente, car les itérations sont exécutées dans un ordre non déterministe. Pour plus d'aide, voir Ensure That parfor-Loop Iterations Are Independent .Vous ne pouvez pas utiliser une boucle
parforà l'intérieur d'une autre boucleparfor. Pour plus d'aide, voir Boucles imbriquées parfor et for et autres exigences parfor .
parfor ( Utilisez loopVar = initVal:endVal,M); statements; end M pour spécifier le nombre maximal de workers du pool parallèle à utiliser pour évaluer statements dans le corps de la boucle. M doit être un entier non négatif.
Par défaut, MATLAB utilise les workers disponibles dans votre pool parallèle. Vous pouvez modifier le nombre par défaut de workers dans votre pool parallèle à l'aide de la propriété PreferredPoolNumWorkers du profil par défaut. Pour tous les facteurs pouvant affecter la taille de votre pool par défaut, voir Facteurs qui affectent la taille du pool . Vous pouvez remplacer le nombre par défaut de workers dans un pool parallèle en utilisant la fonction parpool. Lorsqu'aucun worker n'est disponible dans le pool ou que M est nul, MATLAB exécute toujours le corps de la boucle dans un ordre non déterministe, mais pas en parallèle. Utilisez cette syntaxe pour basculer entre l’exécution parallèle et série lors du test de votre code.
Avec cette syntaxe, pour exécuter les itérations en parallèle, vous devez disposer d'un pool parallèle de workers. Par défaut, si vous exécutez parfor, vous créez automatiquement un pool parallèle de workers sur l'environnement parallèle défini par votre profil par défaut. L'environnement parallèle par défaut est Processes . Vous pouvez modifier votre profil dans Parallel Preferences . Pour plus de détails, voir Spécifier vos préférences pour le traitement parallèle .
parfor ( utilise loopVar = initVal:endVal,opts); statements; endopts pour spécifier les ressources à utiliser dans l'évaluation de statements dans le corps de la boucle. Créez un ensemble d'options parfor à l'aide de la fonction parforOptions. Avec cette approche, vous pouvez exécuter parfor sur un cluster sans créer au préalable un pool parallèle et contrôler la manière dont parfor partitionne les itérations en sous-plages pour les workers.
Exemples
Arguments d'entrée
Conseils
Utilisez une boucle
parforlorsque :Vous disposez de nombreuses itérations de boucle d'un calcul simple.
parfordivise les itérations de boucle en groupes afin que chaque thread puisse exécuter un groupe d'itérations.Vous avez des itérations de boucle qui prennent beaucoup de temps à exécuter.
N'utilisez pas de boucle
parforlorsqu'une itération de votre boucle dépend des résultats d'autres itérations.Les réductions sont une exception à cette règle. Une variable de réduction accumule une valeur qui dépend de toutes les itérations ensemble, mais est indépendante de l'ordre d'itération. Pour plus d'informations, voir Reduction Variables.
Lorsque vous utilisez
parfor, vous devez attendre que la boucle se termine pour obtenir vos résultats. Votre client MATLAB est bloqué et vous ne pouvez pas sortir de la boucle plus tôt. Si vous souhaitez obtenir des résultats intermédiaires ou sortir prématurément d'une bouclefor, essayez plutôtparfeval.À moins que vous ne spécifiiez un objet cluster, une boucle
parfors'exécute sur le pool parallèle existant. Si aucun pool n'existe,parfordémarre un nouveau pool parallèle, sauf si le démarrage automatique des pools est désactivé dans vos préférences parallèles. S'il n'y a pas de pool parallèle et queparforne peut pas en démarrer un, la boucle s'exécute en série dans la session client.Si la propriété
AutoAttachFilesdans le profil de cluster pour le pool parallèle est définie surtrue, MATLAB effectue une analyse sur une boucleparforpour déterminer quels fichiers de code sont nécessaires à son exécution, voirlistAutoAttachedFiles. Ensuite, MATLAB attache automatiquement ces fichiers au pool parallèle afin que le code soit disponible pour les workers.Vous ne pouvez pas appeler de scripts directement dans une boucle
parfor. Cependant, vous pouvez appeler des fonctions qui appellent des scripts.N'utilisez pas
dans une boucleclearparforcar cela viole la transparence de l'espace de travail. Voir Ensure Transparency in parfor-Loops or spmd Statements .Vous pouvez exécuter les modèles Simulink® en parallèle avec la commande
parsimau lieu d'utiliser les bouclesparfor. Pour plus d'informations et d'exemples d'utilisation de Simulink en parallèle, voir Running Multiple Simulations (Simulink) .Pour les calculs GPU :
N'utilisez pas de boucle
parforsi vous avez un seul GPU et que vos itérations de boucle utilisent toutes le même GPU. Les GPU contiennent de nombreux microprocesseurs qui peuvent effectuer des calculs en parallèle et essayer de paralléliser davantage les calculs GPU à l'aide d'une boucleparforest peu susceptible d'accélérer votre code.Utilisez une boucle
parforsi vous disposez de plusieurs GPU et que vos calculs utilisent des fonctions compatibles GPU. Pour plus d'informations sur l'utilisation de plusieurs GPU dans une boucleparfor, voir Run MATLAB Functions on Multiple GPUs .
Capacités étendues
Historique des versions
Introduit dans R2008aVoir aussi
for | gcp | listAutoAttachedFiles | parpool | parfeval | ticBytes | tocBytes | send | afterEach | parforOptions
Rubriques
- Décider quand utiliser parfor
- Convertir les boucles for en boucles parfor
- Ensure That parfor-Loop Iterations Are Independent
- Boucles imbriquées parfor et for et autres exigences parfor
- Dépannage des variables dans les boucles parfor
- Scale Up parfor-Loops to Cluster and Cloud
- Spécifier vos préférences pour le traitement parallèle
- Run Parallel Simulations (Simulink)