问这个问题的背景是我正在求解一个线性化方程组(Ax=b),其中 A 是一个矩阵(通常尺寸小于 100x100),x 和 b 是向量。我使用的是直接方法,这意味着我首先反转 A,然后通过 x=A^(-1)b 找到解决方案。该步骤在迭代过程中重复,直到收敛。
我现在使用矩阵库(MTL4)的方式:
对于每次迭代,我将 A(值)的所有系数复制到矩阵对象中,然后反转。这是最简单和最安全的选择。
改为使用指针数组:
对于我的特殊情况, A 的系数恰好在每次迭代之间更新。这些系数存储在不同的变量中(有些是数组,有些不是)。如果我将 A 设置为包含指向这些系数变量的指针的数组,然后将 A 就地反转,是否有可能提高性能?
最后一个选项的好处是,一旦我在第一次迭代之前在 A 中设置了指针,我就不需要在连续迭代之间复制任何值。在 A 中指向的值将在迭代之间自动更新。
所以性能问题归结为这一点,正如我所看到
的: - 矩阵求逆过程花费大致相同的时间,假设取消引用指针是不昂贵的。
- 指针数组不需要包含值的矩阵 A 的额外内存。
- 指针数组选项不必在每次迭代之间复制 A 的所有 NxN 值。
- 指向指针数组选项的值通常不在内存中排序。希望所有值在内存中都相对接近,但 *A[0][1] 通常不在 *A[0][0] 等旁边。
对此有何评论?最后一句话是否会对绩效产生负面影响,从而权衡积极的绩效影响?