2016-10-18 12 views
0

私は、MPIを使った行列乗算を行うプログラムを開発中です。行列Aはすべてのプロセスにブロードキャストされます。行列Bは転置され、すべてのプロセスに分散されます。 AがBの各列に直接乗算されるように、これまでのところ、私は個々のプロセスの結果を得ましたが、それは正しいものです。今、私は根本的なプロセスですべての結果を集めて表示することに固執しています。MPIスキャッタ&ギャザー

MPI_Scatter(& transpose_mat、num_cols2、MPI_INT、COLUMN2、num_cols2、MPI_INT、1、MPI_COMM_WORLD)。

これは、すべてのプロセスにデータを分散させる方法です。

column3 = mult(result、column2);

機能MULTは乗算結果を計算し、

if (rank == root) 
    { 
     MPI_Gather(&column3, 4, MPI_INT, &final, 4, MPI_INT, root, MPI_COMM_WORLD); 

     for (int i = 0; i < 4;++i) 
     { 
      for (int j = 0; j < 1; ++j) 
      { 
       cout << final[i][j] << endl;  
      } 
     } 
    } 

列ベクトルCOLUMN3を返し、これは私がそれらをバック収集しようとする方法です。

しかし、それは私が最終[] []

をプリントアウトしようとしていていても、任意の出力を表示しません誰が課題となっているものを私に説明してもらえますか?

+0

'MPI_Gather'は一括操作ではありませんか?言い換えれば、コミュニケータのすべてのプロセスがそれを呼び出すべきではありませんか?あなたのルートプロセスだけがそれを呼び出すようです。 –

+0

はい、ありがとうございましたので、私はそれをifステートメントから取り出しましたが、結果は同じです。データは最終マトリックスに集められません。 – shaibi

+1

これで、私たちには表示されないコードの問題を診断してほしいですか? –

答えて

0

回答が得られました。MPI_Allgather()が私のために働いています。 MPI_Gather()は何も表示していませんでしたMPI_Allgather()は、すべてのプロセスからバッファ(私の場合は行列)にデータ(私の場合は列行列)を収集します。

関連する問題