【问题标题】:Do iterative solvers in Eigen allocate memory every iteration?Eigen 中的迭代求解器是否每次迭代都分配内存?
【发布时间】:2015-01-22 23:02:28
【问题描述】:

我对使用 Eigen 求解稀疏矩阵方程很感兴趣。迭代求解器需要许多“临时”向量,这些向量在每次迭代期间用中间值进行更新。据我了解,当使用诸如共轭梯度法之类的迭代求解器时,这些向量通常在开始迭代之前分配一次,然后在每次迭代中重复使用以避免频繁的重新分配。从 ConjugateGradient 类中我可以看出,Eigen 在每次迭代时都会重新分配内存。熟悉Eigen的人能否告诉我我的理解是否正确?似乎有可能在分配过程中进行了某种巧妙的内存节省方案,结果实际上每次都没有重新分配内存,但我挖了下去,找不到这样的东西。或者,如果 Eigen 确实在每次通过循环时重新分配内存,与进行实际计算所需的时间相比,它是否是一个微不足道的负担?

【问题讨论】:

    标签: memory-management eigen


    【解决方案1】:

    您在哪里看到重新分配?正如您在源代码code 中看到的那样,四个辅助向量residualpztmpwhile 循环之外声明和分配,即在迭代之前地方。此外,回想一下 Eigen 是一个表达式模板库,所以一行代码为:

    x += alpha * p;
    

    注意是否会创建任何临时文件。总之,不,Eigen 的 CG 实现不会在迭代中执行任何(重新)分配。

    【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2011-03-09
    • 2018-03-14
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多