2012-04-25 3 views
3

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?

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.

+0

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. –

+2

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

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.