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
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, 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
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 à 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 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
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 pour le 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 de scripts directement dans une boucle
parfor
. Cependant, vous pouvez appeler des fonctions qui appellent des scripts.N'utilisez pas
dans une boucleclear
parfor
car 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
parsim
au 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
parfor
si 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 boucleparfor
est peu susceptible d'accélérer 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
, 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)