2012-03-06 117 views
2

我只想打印結果數組元素在其正確的順序有一次,我用了障礙,但它並沒有什麼,我甚至寫完成後,什麼都沒有發生在這裏是代碼:打印結果一旦MPI

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

它打印一次,每個進程... – 2012-03-07 12:51:12

回答

3

如果您希望一切順利,您應該只從一個進程打印。這意味着你必須收集你的整個結果向量回處理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]); 
} 

注意,過程需要0到有充分的res矢量(和你應該照顧打電話MPI_Gather之前正確地分配),但在你的例子所有其他進程只能使用res[col_count],所以你會更好關只有一個int爲他們分配。

2

您正在尋找MPI_Comm_rank。然後加保護,只允許一個特定的等級進行打印。等級0是打印的一個明顯選擇。

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