私はこれらの用語の定義を読みましたが、私の解釈では、グループとコミュニケーターの間には1対1の関係があります。グループは、相互に通信することを望む一連のプロセスであり、コミュニケーターはグループの実装です。
これは正しいです?もしそうなら、なぜ2つの異なる用語があるのですか?
私はこれらの用語の定義を読みましたが、私の解釈では、グループとコミュニケーターの間には1対1の関係があります。グループは、相互に通信することを望む一連のプロセスであり、コミュニケーターはグループの実装です。
これは正しいです?もしそうなら、なぜ2つの異なる用語があるのですか?
グループはプロセス ID の順序付けられたセットです(MPI 2.2 仕様、セクション 6.2.1)。順序付けは、各プロセス ID に0 から group.size - 1 までの一意のランクを関連付けることによって行われます。
コミュニケータは、一連のプロセス間のすべての通信をカプセル化します。イントラコミュニケーターは、グループと、ポイントツーポイントおよび集合通信の両方の通信のコンテキスト、および仮想トポロジーなどの他のコンテキスト情報 (仕様、6.1.2) に関連付けられます。インターコミュニケーターは、重複しない 2 つのグループに関連付けられます。
私は (おそらく大雑把に) コミュニケーターのグループをそのシンボル テーブルと考えています。
グループには、複数のコミュニケーターからのプロセス ID が含まれる場合があります。
最後に、グループの構築と操作はプロセスに対してローカルであり、プロセス間通信を伴いません。一般に、これはコミュニケーターには当てはまりません (その性質上)。
MPI 仕様を読んで分かったように、コミュニケーターとグループには多くの違いがあります。
編集: グループは、プロセスのグループを表すオブジェクトです。
Communicator は、相互に通信できる一連のプロセスであり、単一のグループまたは複数のグループのプロセスで構成されている場合があります。
したがって、それらは完全に異なるエンティティです。これらを混同しないでください。
コミュニケータにはグループが含まれますが、グループは単なるプロセスの集まりです。
コミュニケータにグループが 1 つだけ含まれている場合、それはイントラコミュニケータと呼ばれます (コミュニケータ、MPI_COMM_WORLD は、すべてのランクを含む 1 つのグループを参照するコミュニケータです)。
2 つのグループが含まれている場合は、インターコミュニケーターで呼び出されます (デフォルトでは何も作成されません)。
https://computing.llnl.gov/tutorials/mpi_advanced/DavidCronkSlides.pdfを見てください。彼は、コミュニケーターが 1 つまたは 2 つのグループのコンテナーである方法について、非常に優れた図による説明を提供しています。