0

私の質問を一般化するために、3 * 3 マトリックスに配置された 9 つのノードで構成される小さなクラスターがあるとします。

6 7 8
3 4 5
0 1 2

そして、次を含むいくつかの「ローカル」コミュニケーター(MPI_Comm)を試していました。

  1. 現在のノードのランクと
  2. 隣接ノードのもの。

MPI_Comm_World からノードを分割し、ノードごとに新しいコミュニケーターを作成しようとしましたが、現在のノードではないランクが含まれているように見えるため、新しいコミュニケーターを使用できませんでした。

ここに私の質問があります。すべてのノードに 1 つの変数のみを使用することは可能ですか。たとえば、ノードごとに異なるランクを含む local_comm です。または、以下のような異なるメンバー変数を使用する必要があります

MPI_Comm local_comm_0 = {0, 1, 3};
MPI_Comm local_comm_4 = {1, 3, 4, 5, 7};
MPI_Comm local_comm_7 = {4, 6, 7, 8};

等...

前もって感謝します。

4

1 に答える 1

2

すべてのノードで同じ名前の 1 つの変数を持つことができますが、おそらくそうしたくないでしょう。1 つのノードには、隣接ノードごとに異なるノードのセットを含むコミュニケーターがあります。あなたの例では、ノード 4 と 7 は隣接していますが、コミュニケーターに異なるノードのセットがあります。これが頭痛の原因になります。

より良いアイデア (実際に何をしているかによって異なります) は、MPI_Cart_create を使用してプロセッサのマトリックスを定義し、通常の Sends と Recvs (または ISends と IRecvs) を使用して通信を行うことです。ここに MPI_Cart_create の例があります: http://mpi.deino.net/mpi_functions/MPI_Cart_create.html

ノードのセットが完全にばらばらである場合 ({0,3,6}、{1,4,7}、{2,5,9} など)、別のコミュニケーターを作成し、それらに同じ変数名を付けることをお勧めします。しかし、それがあなたの問題の正しい解決策になるとは思いません。

于 2012-07-03T09:27:54.023 に答える