使用特征函数在稀疏矩阵-矩阵积中重用模式

Reuse patterns in sparse matrix-matrix product with Eigen lilbrary

提问人:JCut 提问时间:10/23/2023 最后编辑:JCut 更新时间:10/23/2023 访问量:25

问:

我是数值计算的新手,对稀疏运算中的模式重用有一些疑问。

我有两个稀疏矩阵 和 ,它们的非零模式永远不会改变AB

我想以这种方式进行计算(使用 C++ 和 Eigen3.4 稀疏操作):C=A*B

Eigen::SparseMatrix<double> A, B, C;
// init A and B
while (/* something */) {
    // update A and B, but non-zero patterns never change
    C = A * B;
    // use C
}

对于 ,我们可以假设每行中的条目和非零条目。A,B,CN=10000~900005

这是我的问题:

的非零模式不应该改变,那么有什么方法可以利用这个属性呢?C

我不希望实际的实现是这样的:

  1. 为 分配内存A*B

  2. 复制到(或重定向 to 的指针)。A*BCCA*B

这显然不是最佳选择。理想情况下,可以直接写入值,无需内存分配或移动。C

如果 Eigen 不能,其他 BLAS 库是否可以利用不变模式?

对不起,我在 Eigen 的文档中找不到相关讨论。 .noalias可以避免这个问题,但是.noalias适用于密集矩阵。任何建议都可能有所帮助。先谢谢你!

C++ 稀疏矩阵 本征 Eigen3 BLAS

评论

0赞 Matt 10/29/2023
我不清楚你的问题。您是否在问 Eigen 使用什么算法来执行您描述的操作?或者你是在问 Eigen 是否分配了一堆内存,并且对于备用矩阵来说不必要地慢了?第一个问题的答案是查看源代码。第二个问题的答案是尝试一下,看看内存使用率是否很高。

答: 暂无答案