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
spmds'exécute sur les workers du pool parallèle existant. Si aucun pool n'existe,spmddé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 quespmdne peut pas en démarrer un, le code 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 un blocspmdpour 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
spmdet 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
