Y a-t-il une généralisation du numéro de rang aux numéros de groupe? Pour mon code, je voudrais créer une décomposition hiérarchique de MPI :: COMM_WORLD. Supposons que nous utilisions 16 threads. J'utilise MPI :: COMM_WORLD.Split pour créer 4 communicateurs ayant chacun 4 rangs. Y a-t-il maintenant une fonction MPI qui fournit des identifiants uniques aux quatre groupes correspondants?Généralisation du numéro de rang MPI aux groupes MPI?
3
A
Répondre
5
Eh bien, vous pouvez toujours faire référence à chaque processus par son rang d'origine dans MPI_COMM_WORLD
. Vous avez également un contrôle complet sur le classement de chaque processus dans son nouveau communicateur via les arguments color
et key
de MPI_Comm_split()
. C'est assez d'informations pour créer une cartographie entre les anciens rangs et les nouveaux groupes/rangs.
1
Si vous n'aimez pas la réponse de @ suszterpatt (I), vous pouvez toujours abuser d'un communicateur cartésien et prétendre que le processus à l'index (2,3) du communicateur est le processus 3 du groupe 2 de votre décomposition hiérarchique. Mais ne lisez pas ceci et ne prenez pas l'impression que je recommande un tel abus, c'est juste une pensée.
Questions connexes
- 1. Numéro MPI du processus
- 2. MPI Barrier C++
- 3. Comment déterminer le rang MPI/numéro de processus local à un socket/noeud
- 4. Affectation des rangs MPI aux unités centrales
- 5. Programme MPI simple
- 6. MPI - cercle logique des processus
- 7. Synchronisation de réseau MPI
- 8. Erreur de communicateur MPI
- 9. Processus MPI multithread Terminer
- 10. programme de base MPI
- 11. MPI Nombre de processeurs?
- 12. Pthreads dans MPI
- 13. Utilisation du point de contrôle MPI
- 14. MPI-IO: write subarray
- 15. Un simple programme MPI
- 16. MPI envoyer recv confusion
- 17. MPI Fortran Code Problème
- 18. MPI - exemple de travail/pool
- 19. Condition de course avec MPI
- 20. Débogage MPI avec VS2012
- 21. Apprentissage MPI et Pthread
- 22. MPI - Asynchronous Broadcast/Gather
- 23. MPI, plus grandes baies
- 24. Sérialiser les threads mpi
- 25. MPI Reduce avec mpi_datatype
- 26. Fonction Mpi définir
- 27. MPI Communication asynchrone/unilatérale
- 28. MPI et threads
- 29. MPI à choix multiples
- 30. Tuer un processus mpi
Vous avez raison, les informations que j'ajouter à 'MPI_Comm_split()' est suffisant pour calculer les informations que j'ai demandé. Mais ce n'est pas trivial de le faire dans le cas de 10.000 de noyaux. C'est la raison pour laquelle j'ai demandé s'il y a un soutien pour faire cela directement sur la base de MPI. –
Semble assez simple pour moi. Si vous avez des processus N * M que vous voulez diviser en M groupes de N, alors chaque processus appelle 'Split()' avec la couleur 'rank/N' (et éventuellement, la touche' rank% N'). Cela placera les rangs 0..N-1 dans le groupe 0, N..2 * N-1 dans le groupe 1, et ainsi de suite, et préservera l'ordre original des processus dans chaque groupe. Le processus avec le rang 'i' dans le groupe' j' est celui avec le rang 'j * N + i' dans' MPI_COMM_WORLD'. – suszterpatt