parfor
Exécuter des itérations for
-loop 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 nœuds de calcul 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 disposez de Parallel Computing Toolbox™, les itérations de statements
peuvent s'exécuter sur un pool parallèle de nœuds de calcul sur votre ordinateur ou cluster multicœur. 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 Decide When to Use 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, consultez Convertir les boucles for en boucles parfor.Les itérations de boucle doivent être des valeurs entières consécutives et croissantes.
Le corps de la boucle
parfor
doit ê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, consultez Ensure That parfor-Loop Iterations are Independent.Vous ne pouvez pas utiliser une boucle
parfor
dans une autre boucleparfor
. Pour plus d'aide, consultez Nested parfor and for-Loops and Other parfor Requirements.
parfor (
utilise loopVar
= initVal
:endVal
,M
); statements
; end M
pour spécifier le nombre maximum de nœuds de calcul 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 nœuds de calcul 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, consultez Facteurs qui affectent la taille du pool.. Vous pouvez remplacer le nombre par défaut de nœuds de calcul dans un pool parallèle à l'aide de la fonction parpool
. Lorsqu'aucun nœud de calcul n'est disponible dans le pool ou que M
vaut zéro, 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écifiez vos préférences parallèles.
parfor (
utilise loopVar
= initVal
:endVal
,opts
); statements
; endopts
pour spécifier les ressources à utiliser pour évaluer 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
parfor
lorsque:Vous disposez de nombreuses itérations de boucle d’un calcul simple.
parfor
divise 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 à s'exécuter.
N'utilisez pas de boucle
parfor
lorsqu'une itération de votre boucle dépend des résultats d'autres itérations.Les réductions constituent 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 des itérations. Pour plus d’informations, consultez Reduction Variables.
Lorsque vous utilisez
parfor
, vous devez attendre la fin de la boucle 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
.Sauf si vous spécifiez un objet cluster, une boucle
parfor
s'exécute sur le pool parallèle existant. Si aucun pool n'existe,parfor
dé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 queparfor
ne peut pas en démarrer un, la boucle s'exécute en série dans la session client.Si la propriété
AutoAttachFiles
dans le profil de cluster du pool parallèle est définie surtrue
, MATLAB effectue une analyse sur une boucleparfor
pour 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 des scripts directement dans une boucle
parfor
. Cependant, vous pouvez appeler des fonctions qui appellent des scripts.N'utilisez pas
clear
dans une boucleparfor
car cela viole la transparence de l'espace de travail. Voir Ensure Transparency in parfor-Loops or spmd Statements.Vous pouvez exécuter des modèles Simulink® en parallèle avec la commande
parsim
au lieu d'utiliser desparfor
-loops. Pour plus d'informations et des exemples d'utilisation de Simulink en parallèle, consultez Running Multiple Simulations (Simulink).Pour les calculs GPU:
N'utilisez pas de boucle
parfor
si vous disposez d'un seul GPU et que vos itérations de boucle utilisent toutes le même GPU. Les GPU contiennent de nombreux microprocesseurs capables d'effectuer des calculs en parallèle et il est peu probable que tenter de paralléliser davantage les calculs GPU à l'aide d'une boucleparfor
accélère votre code.Utilisez une boucle
parfor
si 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
, consultez 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
- Decide When to Use parfor
- Convertir les boucles for en boucles parfor
- Ensure That parfor-Loop Iterations are Independent
- Nested parfor and for-Loops and Other parfor Requirements
- Dépanner les variables dans les boucles parfor
- Scale Up parfor-Loops to Cluster and Cloud
- Spécifiez vos préférences parallèles
- Run Parallel Simulations (Simulink)