【发布时间】:2011-10-05 23:21:41
【问题描述】:
我必须为多个右侧求解一个巨大的线性方程(比如说 20 到 200)。矩阵以稀疏格式存储并分布在多个 MPI 节点(比如说 16 到 64)上。我在等级 0 节点上运行 CG 求解器。无法直接求解线性方程,因为系统矩阵会很密集(Sys = A^T * S * A)。
基本的矩阵向量乘法实现为:
broadcast x
y = A_part * x
reduce y
虽然集体操作相当快(OpenMPI 似乎使用了像通信模式 + Infiniband 这样的二叉树),但它仍然占运行时的很大一部分。出于性能原因,我们已经计算了每次迭代的 8 个右侧(基本上是 SpM * DenseMatrix,只是为了完整)。
我正在尝试想出一个很好的方案来隐藏通信延迟,但我还没有一个好主意。我也尽量避免进行 1:n 通信,尽管我还没有衡量缩放是否会成为问题。
欢迎提出任何建议!
【问题讨论】:
-
如果您不完全致力于使用 MPI,这在 Charm++ 或其他更动态的环境中会容易得多。