MPIのコミュニケーターとグループの違いは何ですか?
-
27-09-2019 - |
質問
私はこれらの用語の定義を読みましたが、私の解釈は、グループとコミュニケーターの間に1対1の関係があるということです。グループは、互いに通信したいプロセスのセットであり、コミュニケーターはグループの実装です。
これは正しいです?これがそうである場合、なぜ2つの異なる用語があるのですか?
解決
a グループ です 順序付けられたプロセス識別子セット (MPI 2.2 Spec、Sec 6.2.1)。順序付けは、各プロセス識別子に関連する一意であることによって与えられます ランク 0からgroup.size -1。
a コミュニケーター 一連のプロセス間のすべての通信をカプセル化します。コミュニケーター内は、グループだけでなくグループに関連付けられています ポイントツーポイントと集合的なコミュニケーションの両方のコミュニケーションのコンテキスト 仮想トポロジーなどの他のコンテキスト情報(Spec、6.1.2)。共産主義者間は、2つの非重複グループに関連付けられています。
私は(おそらく非常にゆるく)コミュニケーターのグループをそのシンボルテーブルと考えています。
グループには、複数のコミュニケーターからのプロセス識別子が含まれている場合があります。
最後に、グループの構築と運用はプロセスのローカルであり、プロセスインタープロセスのコミュニケーションは含まれません。これは、一般的に、コミュニケーターには当てはまりません(まさにその性質上)。
他のヒント
MPI仕様を読んだ後に発見したように、コミュニケーターとグループの間には多くの違いがあります。
編集:グループは、プロセスのグループを表すオブジェクトです。
コミュニケーターは、互いに通信する可能性のある一連のプロセスであり、単一のグループまたは複数のグループからのプロセスで構成される場合があります。
したがって、それらは完全に異なるエンティティです。彼らは互いに混乱するべきではありません。
コミュニケーターにはグループが含まれていますが、グループは単なるプロセスのコレクションです。
コミュニケーターに1つのグループのみが含まれている場合、それは共産主義者と呼ばれます(Communicator、MPI_COMM_WORLDは、すべてのランクを含む1つのグループを指すそのようなものです)。
2つのグループが含まれている場合、Intercommunicatorで呼び出されます(デフォルトで作成されたものはありません)。
を見てみましょう https://computing.llnl.gov/tutorials/mpi_advanced/davidcronkslides.pdf 彼は、コミュニケーターが1つまたは2つのグループの容器である方法について非常に良い絵の説明をしています。
MPIのグループは、MPIで導入され、プロセスの整理と新しいコミュニケーションの作成を促進するためにMPIで導入される数学的概念「セット」に対応しています。たとえば、セットのユニオンと交差点操作を使用して新しいセットを作成して、それらを使用して新しいコミュニケーターを作成できるようにすることができます。
グループはコミュニケーターを作成するために使用できますが、グループはコミュニケーションとは何の関係もありません(コミュニケーターはグループとコンテキストです)。
グループは、異なるプロセス間でタスク/データを配布する際にIDとして使用することもできます。たとえば、プロセスがグループにあるかどうかをテストして、何かをするべきかどうかを判断できます。
a コミュニケーター プロセスのグループを記述するオブジェクトです。多くのアプリケーションでは、すべてのプロセスが密接に連携して連携し、必要な唯一のコミュニケーターはMPI_COMM_WORLDです。
グループ あなたの仕事が始まるすべてのプロセスを説明します。