Question

J'ai lu les définitions de ces termes et mon interprétation est qu'il existe une relation à un entre un groupe et un communicateur. Un groupe est un ensemble de processus qui souhaitent communiquer entre eux et un communicateur est une implémentation pour un groupe.

Est-ce correct? Pourquoi ont deux termes différents si c'est le cas?

Était-ce utile?

La solution

UN groupe est un Ensemble d'identifiants de processus ordonnés (MPI 2.2 Spec, Sec 6.2.1). La commande est donnée en s'associant à chaque identifiant de processus un rang de 0 à Group.Size - 1.

UN communicateur résume toutes les communications entre un ensemble de processus. Un intra-communicateur est associé à un groupe ainsi qu'à Contextes de communication pour la communication point à point et collective et éventuellement d'autres informations contextuelles telles que les topologies virtuelles (Spec, 6.1.2). Un inter-communicateur est associé à deux groupes non chevauchants.

Je pense (probablement très librement) à un groupe de communicateur comme sa table de symboles.

Un groupe peut contenir des identifiants de processus de plusieurs communicateurs.

Enfin, la construction et les opérations sur les groupes sont locales au processus et n'impliquent pas la communication interprofiante. Ce n'est pas, en général, vrai pour les communicateurs (par leur nature même).

Autres conseils

Il existe de nombreuses différences entre les communicateurs et les groupes comme je l'ai découvert après avoir lu la spécification MPI.

EDIT: Les groupes sont des objets qui représentent des groupes de processus.

Communicator est un ensemble de processus qui peuvent communiquer entre eux et peuvent être constitués de processus d'un groupe unique ou de plusieurs groupes.

Ce sont donc des entités complètement différentes. Ils ne doivent pas être confondus les uns avec les autres.

Un communicateur contient des groupes tandis qu'un groupe n'est qu'une collection de processus.

Si un communicateur ne contient qu'un seul groupe, il est appelé intracommunicateur (le communicateur, MPI_COMM_WORLD en est un qui fait référence à un groupe qui comprend tous les rangs).

S'il contient deux groupes, il est appelé dans Intercommunicator (il n'y en a pas créé par défaut pour vous).

Jeter un coup d'œil à https://computing.llnl.gov/tutorials/mpi_advanced/davidcronkslides.pdf où il donne une très bonne explication picturale de la façon dont un communicateur est un conteneur pour un ou deux groupes.

Un groupe de MPI correspond au concept mathématique "SET", qui est introduit dans MPI pour faciliter l'organisation des processus et la création de nouvelles communications. Par exemple, vous pouvez utiliser l'union et les opérations d'intersection sur des ensembles pour créer de nouveaux ensembles afin que vous puissiez les utiliser pour créer de nouveaux communicateurs.

Un groupe n'a rien à voir avec les communications bien qu'un groupe puisse être utilisé pour créer un communicateur (un communicateur est un groupe plus un contexte).

Un groupe peut également être utilisé comme ID dans la distribution de tâches / données entre les différents processus. Par exemple, nous pouvons tester si un processus est en groupe pour déterminer s'il doit faire quelque chose.

UN communicateur est un objet décrivant un groupe de processus. Dans de nombreuses applications, tous les processus fonctionnent ensemble étroitement couplés, et le seul communicateur dont vous avez besoin est mpi_comm_world.

groupe décrivant tous les processus avec lesquels votre travail commence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top