我最近阅读了 Wolfgang 对此处找到的问题的回答,发现自己想知道一个相关的后续问题。
假设您有两个稀疏矩阵和。您需要进行矩阵向量乘法 where。他在回答中指出,形成 X 比仅以的形式进行两次乘法更加密集,这在很大程度上是直观的。
我的问题是,如果你有很多怎么办?假设您有不同可以相乘。和必须有多大才能使形成有价值,或者形成永远不会变得更有效?如果不能笼统地说,有没有可以得出结论的具体案例?
我最近阅读了 Wolfgang 对此处找到的问题的回答,发现自己想知道一个相关的后续问题。
假设您有两个稀疏矩阵和。您需要进行矩阵向量乘法 where。他在回答中指出,形成 X 比仅以的形式进行两次乘法更加密集,这在很大程度上是直观的。
我的问题是,如果你有很多怎么办?假设您有不同可以相乘。和必须有多大才能使形成有价值,或者形成永远不会变得更有效?如果不能笼统地说,有没有可以得出结论的具体案例?
通过您在评论中选择模糊语言,您正在小心地避开问题的答案。矩阵中的非零值的数量可以很好地代表将其应用于向量的成本,因为成本主要取决于从缓存中加载其条目的时间。粗略地说,如果那么你应该分别应用它们。这通常是 PDE 矩阵和(甚至更多)幂律图(例如出现在网络分析中)的情况。
如果您一次将矩阵应用于多个向量,则可以分摊加载矩阵条目的成本。再次,您可以查看您选择的密度和向量数量的矩阵的性能模型,以确定是否更好地明确形成产品。对于方阵,它很少。
显式矩阵乘积有用的地方之一是“Galerkin”粗网格算子。在那里,粗网格算子小得多的空间中,因此应用显式乘积要便宜得多。
正如 Jed 已经说过的,这完全取决于矩阵。但是您可以通过考虑例如 2d 中拉普拉斯方程的 5 点模板来获得一个想法。在那里,刚度或质量矩阵的每一行有五个条目。但是两个这样的矩阵的乘积有 13 个条目(将五点模板应用于五点模板的每个位置)。在 3d 中,每行有 7 个条目,但是有 33. 如果你有一个斯托克斯方程在 3d 中的离散化。
然而,正如我在另一篇文章中提到的,形成矩阵乘积的重要成本实际上不是浮点运算,而是确定稀疏模式和产生的内存分配的成本。在形成成本模型时,您需要考虑到这一点。