2012-02-28 7 views
0

MPIデカルトトポロジを使用するように、私は和の数を計算し、それらの和の最小値を見つけるために必要な、これはMPIを使用して、そのように行った:どのようにオフを開始するように正しく

MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 
    MPI_Comm_rank(MPI_COMM_WORLD, &myid); 
       . 
       . 
       . 
    x = (size)/numprocs; 
    low = myid * x; 
    high = low + x; 

    for(i =low; i < high; i++){ 
     for(j = 0; j < matrixDim; j++){ 
      for(k = 0; k < matrixDim; k+=gap){ 
       for(m = 0; m < matrixDim; m+=gap){ 
        c1 = calculation1(i,j,k,m); 
        if(c1 > cutoff){ 
         sum += calculation2(modifier1[k][m], modifier2[k][m]); 
        }  
       } 
      } 

      if(sum < min){ 
       min = sum; 
       minI = i; 
       minJ = j; 
      } 
      sum = 0; 
     } 
    } 
MPI_Reduce(&result, &minimum, 1, MPI_FLOAT, MPI_MIN, 0, MPI_COMM_WORLD); 
if(0 == myid) 
printf("The min is: %f", minimum); 
MPI_Finalize(); 

しかし、今、全体の2次元行列の最小合計を求めるのではなく、行列の各パーティションの最小合計を求める必要があります。パーティションは4点で定義された四角形になり、行列サイズに関係なく、常に16個の四角形(行列は800 * 800以上である)。私はMPIデカルトトポロジを使ってこれを実装しようとしていますが、実装の周りに頭を抱えるのは難しいです。どんな助けやヒントもありがとうございます。

+0

アルゴリズムのトップ・パラレル化の方法を正確に教えてください。どのループを並列化しようとしていますか?デカルトトポロジはどこで動くのですか? – Francesco

答えて

1

これは

francescoのように私は私がここでデカルト(またはその他)のトポロジの必要性を見ていることを確認しないんだけど...答えよりも拡張されたコメントの詳細です。あなたの問題が記述されている場合、各MPIプロセスは、他のプロセスからデータを送信または受信せずにパーティション最小合計を計算することができます。

トプロジは一般に、問題が断片に分解され、それらの部分に相対的な近隣性の考えがある場合に使用されます。デカルトトポロジでは、プロセス(または問題の一部)が東、西、例。私はここにそのようなコンセプトは見当たりませんし、この問題にそれを強制するユーティリティもありません。

関連する問題