spmd
Exécuter le code en parallèle sur les workers du pool parallèle
Syntaxe
spmd
statements
end
Description
spmd,
définit une instruction statements
, endspmd
sur une seule ligne. MATLAB® exécute le corps spmd
désigné par statements
sur plusieurs MATLAB workers simultanément. Chaque worker peut travailler sur un ensemble de données différent ou sur une partie différente de données distribuées, et peut communiquer avec d’autres workers participants tout en effectuant les calculs parallèles. L'instruction spmd
ne peut être utilisée que si vous avez Parallel Computing Toolbox™ . Pour exécuter les instructions en parallèle, vous devez d'abord créer un pool de MATLAB workers en utilisant parpool
ou faire en sorte que vos préférences parallèles autorisent le démarrage automatique d'un pool.
Dans le corps de l'instruction spmd
, chaque MATLAB a une valeur unique de spmdIndex
, tandis que spmdSize
désigne le nombre total de workers exécutant le bloc en parallèle. Dans le corps de l'instruction spmd
, les fonctions de communication pour la communication des jobs (telles que spmdSend
et spmdReceive
) peuvent transférer des données entre les workers.
Les valeurs renvoyées depuis le corps d'une instruction spmd
sont converties en objets Composite
sur le client MATLAB. Un objet composite contient des références aux valeurs stockées sur les workers MATLAB distants, et ces valeurs peuvent être récupérées à l'aide de l'indexation de tableau de cellules. Les données réelles sur les workers restent disponibles pour une exécution spmd
ultérieure, tant que le composite existe sur le client et que le pool parallèle reste ouvert.
Par défaut, MATLAB utilise tous les workers du pool. Lorsqu'il n'y a pas de pool actif, MATLAB créera un pool et utilisera tous les workers de ce pool. Si vos préférences ne permettent pas la création automatique de pool, MATLAB exécute le corps du bloc localement et crée des objets composites si nécessaire. Vous ne pouvez pas exécuter un bloc spmd
si un worker est occupé à exécuter une requête parfeval
, sauf si vous utilisez spmd(0)
.
Pour plus d'informations sur spmd
et les objets composites, voir Distribute Arrays and Run SPMD .
Note
Utilisez parfevalOnAll
au lieu de parfor
ou spmd
si vous souhaitez utiliser clear
. Cela préserve la transparence de l’espace de travail. Voir Ensure Transparency in parfor-Loops or spmd Statements .
spmd(
utilise n
), statements
, endn
pour spécifier le nombre exact de MATLAB workers à évaluer statements
, à condition que n
workers soient disponibles dans le pool parallèle. S'il n'y a pas assez de workers disponibles, une erreur est générée. Si n
est nul, MATLAB exécute le corps du bloc localement et crée des objets composites, comme s'il n'y avait pas de pool disponible.
spmd(
utilise un minimum de m
,n
), statements, endm
et un maximum de n
workers pour évaluer statements
. S'il n'y a pas assez de workers disponibles, une erreur est générée. m
peut être nul, ce qui permet au bloc de s'exécuter localement si aucun worker n'est disponible.
Exemples
Conseils
Un bloc
spmd
s'exécute sur les workers du pool parallèle existant. Si aucun pool n'existe,spmd
démarrera 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 quespmd
ne peut pas en démarrer un, le code 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 un blocspmd
pour déterminer quels fichiers de code sont nécessaires à son exécution, puis attache automatiquement ces fichiers au job du pool parallèle afin que le code soit disponible pour les workers.Pour plus d'informations sur les restrictions et limitations lors de l'utilisation de
spmd
, voir Run Single Programs on Multiple Data Sets .Pour plus d'informations sur les performances de
spmd
et d'autres constructions de programmation parallèle, voir Choose Between spmd, parfor, and parfeval .
Capacités étendues
Historique des versions
Introduit dans R2008b
Voir aussi
batch
| Composite
| spmdReduce
| spmdIndex
| parallel.pool.Constant
| parpool
| spmdSize