2012-03-06 13 views
2

結果配列の要素を適切な順序で印刷したいのですが、バリアを使用しましたが何もせず、ファイナライズした後でも書きました。コード:結果をMPIで1回印刷する

MPI_Bcast(vec,W,MPI_INT,0,MPI_COMM_WORLD); 

col_count = myrank; 
for(k=0; k<W; k++) 
{ 
    res[col_count]+= vec[k]*matrix[k*W+col_count]; 
} 

MPI_Barrier(MPI_COMM_WORLD); 
printf("%d ",res[c]); 
MPI_Finalize(); 
+0

プロセスごとに1回だけ印刷されます... –

答えて

3

すべての順序を整えたい場合は、1つのプロセスからのみ印刷する必要があります。つまり、全体の結果ベクトルを処理して0にし、それを印刷する必要があります。

MPI_Gather (&(res[col_count]), 1, MPI_INT, res, 1, MPI_INT, 0, MPI_COMM_WORLD); 
for (int i=0 ; i<col_max ; ++i) { 
    printf ("%f\n", res[i]); 
} 

フルresベクトルを持っている(とあなたが適切MPI_Gatherを呼び出す前に、それを割り当てるように注意しなければならない)0ニーズを処理しますが、あなたがより良いと思いますので、あなたの例では他のすべてのプロセスは、res[col_count]を使用オフに1つだけintを割り当てます。

2

あなたはMPI_Comm_rankを探しています。次に、1つの特定のランクしか印刷できないようにガードを追加します。ランク0は、印刷のための1つの明らかな選択肢です。

MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
if(rank == 0) { 
    printf ("Hello world! I'm rank %d\n", rank); 
} 
関連する問題