在MPI中打印一次结果

时间:2012-03-06 21:52:23

标签: c 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();

2 个答案:

答案 0 :(得分: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之前应该注意正确分配它),但在您的示例中,所有其他进程只使用{{1} ,所以你最好只为它们分配一个res[col_count]

答案 1 :(得分:2)

您正在寻找MPI_Comm_rank。然后添加一个警卫只允许打印一个特定的等级。排名0是打印的明显选择。

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