重复稀疏矩阵向量乘积的效率

计算科学 线性代数 稀疏矩阵 效率
2021-12-11 09:19:03

我最近阅读了 Wolfgang 对此处找到的问题的回答,发现自己想知道一个相关的后续问题。

假设您有两个稀疏矩阵您需要进行矩阵向量乘法 where他在回答中指出,形成 X 比仅以的形式进行两次乘法更加密集,这在很大程度上是直观的。 ABa=XbX=ABa=A(Bb)

我的问题是,如果你有很多怎么办?假设您有不同可以相乘。必须有多大才能使形成有价值,或者形成永远不会变得更有效?如果不能笼统地说,有没有可以得出结论的具体案例?bnbnABXX

2个回答

通过您在评论中选择模糊语言,您正在小心地避开问题的答案。矩阵中的非零值的数量可以很好地代表将其应用于向量的成本,因为成本主要取决于从缓存中加载其条目的时间。粗略地说,如果那么你应该分别应用它们。这通常是 PDE 矩阵和(甚至更多)幂律图(例如出现在网络分析中)的情况。

nnz(AB)>nnz(A)+nnz(B),

如果您一次将矩阵应用于多个向量,则可以分摊加载矩阵条目的成本。再次,您可以查看您选择的密度和向量数量的矩阵的性能模型,以确定是否更好地明确形成产品。对于方阵,它很少。

显式矩阵乘积有用的地方之一是“Galerkin”粗网格算子在那里,粗网格算子小得多的空间中,因此应用显式乘积要便宜得多。Ac=PTAfPAf

正如 Jed 已经说过的,这完全取决于矩阵。但是您可以通过考虑例如 2d 中拉普拉斯方程的 5 点模板来获得一个想法。在那里,刚度或质量矩阵的每一行A有五个条目。但是两个这样的矩阵的乘积有 13 个条目(将五点模板应用于五点模板的每个位置)。在 3d 中,A每行有 7 个条目,但是A2有 33. 如果你有一个Q2Q1斯托克斯方程在 3d 中的离散化。

然而,正如我在另一篇文章中提到的,形成矩阵乘积的重要成本实际上不是浮点运算,而是确定稀疏模式和产生的内存分配的成本。在形成成本模型时,您需要考虑到这一点。