缓存先前调用 lapacke gelsd 的中间结果

Cache intermediate results of prior calls to lapacke gelsd

迭代算法调用 LAPACKE_sgelsd 每次迭代使用 B 的单列。后续调用通常使用相同的 A 矩阵。我相信显着的性能改进将是缓存或一些如何在 A 矩阵未更改时重用前一次迭代的中间结果。这应该有点类似于为 B 传递多列时可能获得的收益。这是正确的吗?实施起来有多困难,如何实施?它使用 openblas。谢谢。

代替缓存中间结果,可以计算和缓存伪逆。可以用this的方法计算,总结为:

  1. 计算 SVD
  2. 将所有 "small" 个奇异值设置为零
  3. 反转所有非零奇异值
  4. 再将三个矩阵相乘
  5. 伪逆是结果的转置。

结果是伪逆*B.