MPI_CARTを使用してハイパーキューブへのプロセスをマッピングする方法、

StackOverflow https://stackoverflow.com/questions/2384969

質問

私は2 ^ n個のプロセッサのためのMPIを使用してソートバイトニックを実装しようとしています。

私は、利便性のためにそうするn次元ハイパーキューブに使用したいと思います。 MPI_Cart_Create Iを使用することにより、自己組織化ディメンションを作成することができます。私のプロセスの効率を最大化し、また、私はそれを成し遂げるために串に持っているLOCの数を減らすことができますそう..

グーグルと文学はいつも同じことを言います

  

なお、N次元超立方体   2のn次元トーラスであります   座標方向ごとのプロセス。   ハイパーキューブのためにこのように、特別なサポート   構造は必要ありません。

私は+任意の単一の例を見ていないのn座標方向につき2つのプロセスとの次元トーラスは、私には何もなく、謎思いません。うの誰もが示唆する必要がありますか?

おかげで、

役に立ちましたか?

解決

さて、

それを見つけました それが4次元超立方体のためになるように、

は..パターンは非常に単純明快です。 n次元ハイパーキューブの各ポイントは、N個の隣接を有しており、それらは、このコードで表されています。 MPIは、再注文することができますので、プロセスをあなたのクラスタの物理的なレイアウトに合わせて、このコードは、ビットマスクをXOR演算の代わりに使用する必要があることに注意してください。

int rank, size; //I am process RANK and we are a total of SIZE
MPI_Init(&argc, &argv); 

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

myFairShareOfNumber = totalNumber / size;

MPI_Comm nthCube;
int nDim=4;
int processPerDim [4]= {2,2,2,2};
int period [4]= {1,1,1,1};

MPI_Cart_create(MPI_COMM_WORLD, nDim, processPerDim, period, true, &nthCube);

int rankInDim;
MPI_Comm_rank(nthCube, &rankInDim);

int rank_source, rank_desta, rank_destb, rank_destc, rank_destd;
MPI_Cart_shift(nthCube, 0,1,&rank_source, &rank_desta);
MPI_Cart_shift(nthCube, 1,1,&rank_source, &rank_destb);
MPI_Cart_shift(nthCube, 2,1,&rank_source, &rank_destc);
MPI_Cart_shift(nthCube, 3,1,&rank_source, &rank_destd);
cerr << "I am known in the world as " << rankInDim << " my adjacents are -> " << rank_desta << "-" << rank_destb << "-" << rank_destc << "-" << rank_destd <<"\n";
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top