2012-03-06 102 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); 
}