【发布时间】:2017-02-28 00:23:16
【问题描述】:
我正在开发一个使用 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[][]
谁能解释一下是什么问题?
【问题讨论】:
-
MPI_Gather不是集体操作吗?换句话说,通信器中的所有进程不应该调用它吗?似乎只有您的根进程调用它。 -
是的,谢谢,现在我把它从 if 语句中去掉了,但结果是一样的。数据未收集到最终矩阵中。
-
那么现在您希望我们诊断您未向我们展示的代码中的问题吗?
-
对不起。我应该发布完整的代码。我现在已经解决了。谢谢