LAPACK理论求助

各位Julia社区的朋友们,
我最近一直在编写基础线性代数库的程序,想深入了解LAPACK的计算理论。
我想问一下是否有书籍或者其他文献综述过这些理论,如果有的话,请不吝赐教。
谢谢。

《Matrix Computations》之类的?

我并没有看过《Matrix Computations》。目前现在在读手上的这本《数值线性代数》。 这书讲了一些问题,但是都不是很深入,有些问题直接都略过了。 比如我现在在编写计算条件数、数值求逆和矩阵范数的代码,计算条件数需要计算逆矩阵的1-norm或者inf-norm。LAPACK中使用了一种优化的算法,我看代码没怎么看明白,所以想找些理论文献看看。

如果你想学的是数值分析那部分的话,除了线性代数的书我还推荐Accuracy and Stability of Numerical Algorithms

如果你想学习高性能计算方面的话,可以看看LAWNs。线性代数的发展方向是从简单的教科书代码(unblocked)到分块计算(blocked)或者递归计算。LAPACK主要用的技巧是写unblocked的简单计算,然后blocked代码调用unblocked代码。

比如说LU分解是getrf(blocked)它会用到unblocked代码getrf2。你会注意到在blocked代码里多数有类似于


 *              Compute block row of U.
 *
                CALL dtrsm( 'Left', 'Lower', 'No transpose', 'Unit', jb,
      $                     n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
      $                     lda )
                IF( j+jb.LE.m ) THEN
 *
 *                 Update trailing submatrix.
 *
                   CALL dgemm( 'No transpose', 'No transpose', m-j-jb+1,
      $                        n-j-jb+1, jb, -one, a( j+jb, j ), lda,
      $                        a( j, j+jb ), lda, one, a( j+jb, j+jb ),
      $                        lda )

这样的代码,因为成块的矩阵可以用到level 3 BLAS的函数(如gemm和trsm),达到高效利用CPU缓存的目的。

FLAWNS也可以找到不少很好的关于高性能稠密线性代数的文献。比如说 http://www.cs.utexas.edu/users/flame/pubs/lu_update_TR.pdf 就写得非常易懂。

1 个赞