MPI分散和聚集

时间:2016-10-18 16:08:58

标签: mpi scatter

我正在开发一个使用MPI进行矩阵乘法的程序。矩阵A广播到所有进程。矩阵B被转置然后在所有过程中分散。因此,A可以直接乘以B的每一列。到目前为止它是有效的,我从各个过程中获得结果并且它们是正确的。现在,我坚持在根进程中收集所有结果并显示它们。

  

MPI_Scatter(& transpose_mat,num_cols2,MPI_INT,column2,num_cols2,MPI_INT,1,MPI_COMM_WORLD);

这是我在所有进程中分散数据的方式。

  

column3 = mult(result,column2);

函数mult计算乘法结果并返回列向量 column3

if (rank == root)
    {
        MPI_Gather(&column3, 4, MPI_INT, &final, 4, MPI_INT, root, MPI_COMM_WORLD);

        for (int i = 0; i < 4;++i)
        {
            for (int j = 0; j < 1; ++j)
            {
                cout << final[i][j] << endl;    
            }
        }
    }

这就是我试图收回它们的方式。

但它没有显示任何输出,即使我正在尝试打印 final [] []

有人可以解释一下我的问题是什么吗?

1 个答案:

答案 0 :(得分:0)

得到答案, MPI_Allgather()为我工作。 MPI_Gather()没有显示任何内容,只有 MPI_Allgather()从所有进程收集数据(我的情况下是列矩阵)到缓冲区(在我的情况下是矩阵)。