语境
在 Portable, Extensible Toolkit for Scientific Computing (PETSc) 中,用户经常创建矩阵和向量。然后将这些对象用作其他例程(如迭代求解器)的输入。
PETSc通过提供对角子矩阵和非对角子矩阵中非零条目的数量来提供预分配矩阵内存的例程。
MATLAB 有一些有用的文章来说明为什么预分配会有所帮助——例如,它消除了每次将元素添加到向量时重新分配内存的需要。
题
为什么 PETSc 中的内存预分配有这么大的帮助?当我告诉 PETSc 我的矩阵中非零的数量时到底发生了什么,与我不预分配时相比如何?
编辑
我在这个 powerpoint中找到了关于预分配如何与 AIJ 格式相关的部分答案。它说 PETSc 稀疏矩阵是动态对象,可以动态添加非零值。但是这种“即时”方法可能会导致额外的复制和重新分配等。我想这是我想要的答案,但更多细节会很棒。