我正在开发一个使用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 [] []
有人可以解释一下我的问题是什么吗?
答案 0 :(得分:0)
得到答案, MPI_Allgather()为我工作。 MPI_Gather()没有显示任何内容,只有 MPI_Allgather()从所有进程收集数据(我的情况下是列矩阵)到缓冲区(在我的情况下是矩阵)。