首页 > 解决方案 > 缓存之前调用 lapacke gelsd 的中间结果

问题描述

迭代算法在每次迭代中调用 LAPACKE_sgelsd 并使用单列 B。后续调用通常使用相同的 A 矩阵。我相信一个实质性的性能改进将是缓存或在 A 矩阵没有改变的情况下重用上一次迭代的中间结果。这应该有点类似于为 B 传递多列时可能获得的收益。对吗?实施起来会有多困难,如何做到?它使用openblas。谢谢你。

标签: least-squareslapacke

解决方案


可以计算和缓存伪逆,而不是缓存中间结果。可以计算这种方法,总结为:

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

结果是伪逆 * B。


推荐阅读