【发布时间】:2014-06-17 12:18:44
【问题描述】:
我需要使用 MPI 对并行块矩阵计算(逐个元素)进行编程。我在按行分配给节点进行计算之前进行了编程。在当前问题中,我需要根据结果矩阵的元素划分任务。
我一直在尝试如何将数据分发到节点,但没有找到解决方案。你能帮我理解如何做到这一点的逻辑吗?
【问题讨论】:
我需要使用 MPI 对并行块矩阵计算(逐个元素)进行编程。我在按行分配给节点进行计算之前进行了编程。在当前问题中,我需要根据结果矩阵的元素划分任务。
我一直在尝试如何将数据分发到节点,但没有找到解决方案。你能帮我理解如何做到这一点的逻辑吗?
【问题讨论】:
让我们通过这个向后工作。我的符号将来自 A*B=C。 C 的每个元素都是从 A 的相应行和 B 的列构建的。A(i,0:n)*B(0:n,j)=C(i,j)。因此,对于 C 的每个元素,您将需要 A 行和 B 列。如果您希望每个等级求解 C 块,那么您需要 A 的所有对应行和 B 的所有对应列。所以,将 C 分成块,获取每个块所需的范围。 C(i1:i2,j1:j2) 需要 A(i1:i2,0:n) 和 B(0:n,j1:j2)。要分发这些数据,我建议使用 MPI_Scatter 和/或 MPI_Scatterv(取决于您需要使用的内存布局)。
【讨论】: