缓存先前调用 lapacke gelsd 的中间结果
Cache intermediate results of prior calls to lapacke gelsd
迭代算法调用 LAPACKE_sgelsd 每次迭代使用 B 的单列。后续调用通常使用相同的 A 矩阵。我相信显着的性能改进将是缓存或一些如何在 A 矩阵未更改时重用前一次迭代的中间结果。这应该有点类似于为 B 传递多列时可能获得的收益。这是正确的吗?实施起来有多困难,如何实施?它使用 openblas。谢谢。
代替缓存中间结果,可以计算和缓存伪逆。可以用this的方法计算,总结为:
- 计算 SVD
- 将所有 "small" 个奇异值设置为零
- 反转所有非零奇异值
- 再将三个矩阵相乘
- 伪逆是结果的转置。
结果是伪逆*B.
迭代算法调用 LAPACKE_sgelsd 每次迭代使用 B 的单列。后续调用通常使用相同的 A 矩阵。我相信显着的性能改进将是缓存或一些如何在 A 矩阵未更改时重用前一次迭代的中间结果。这应该有点类似于为 B 传递多列时可能获得的收益。这是正确的吗?实施起来有多困难,如何实施?它使用 openblas。谢谢。
代替缓存中间结果,可以计算和缓存伪逆。可以用this的方法计算,总结为:
- 计算 SVD
- 将所有 "small" 个奇异值设置为零
- 反转所有非零奇异值
- 再将三个矩阵相乘
- 伪逆是结果的转置。
结果是伪逆*B.