我是C学生和初学者。我需要优化文件中使用的胆甾醇分解
https://github.com/RainerKuemmerle/g2o/blob/master/g2o/solvers/csparse/csparse_helper.cpp
用于使用矢量化和使用Ne10库的ARM。
但是我很难理解函数cs_chol_workspace的逻辑。该函数返回一个指针变量N,该变量在函数中根本没有改变。即使我理解变量L代表分解矩阵,Lx,Li和Lp是什么?逻辑远比我的理解水平复杂得多。
过去几天我一直在努力理解代码。当我接近我的截止日期并仍然没有运气时,任何帮助都会非常明显。
答案 0 :(得分:0)
该函数返回一个指针变量N,该变量在函数中根本没有改变。
不正确。内存分配给csn
,其地址在第96行分配给N
。
即使我明白变量L代表分解矩阵,Lx,Li和Lp是什么?
理解这一点的重要部分是我们如何存储矩阵。存储矩阵的标准方法是分配足够的内存来存储所有m * n
条目,并将其作为L_non_sparse[i][p]
访问。在这种情况下,数据结构被设计为保存稀疏矩阵:即大多数条目为0.因此,我们只需要跟踪非零条目的位置。在第107行,Lx
,Li
和Lp
被定义为x
的{{1}},i
和p
组件}。因此,我们通过L
访问L_non_sparse
的非零条目。
这是基于cs.h
中的定义