我只是想以正确的顺序打印结果数组元素,有一次,我使用了屏障,但它没有做任何事情,我甚至在完成后写了它,这里没有发生任何代码:
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 :(得分: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);
}