论文部分内容阅读
矩阵计算在科学计算和其它很多的领域中有着广泛的应用。LAPACK是一款线性代数函数库,它实现了线性代数计算中的大部分操作,包括矩阵分解、线性方程求解、最小二乘问题和矩阵特征值求解等多类问题,它是矩阵计算中最重要的函数库之一。而随着计算机体系结构的不断发展,尤其是分层存储的出现,LAPACK中的经典矩阵计算算法和传统数据结构已经不太适应新硬件发展的需要了。为了解决这个问题,作为LAPACK性能基础的BLAS突出了对Cache和TLB等高速缓存的考虑,其中以GOTOBLAS为代表。虽然高速BLAS库的性能令人满意,但是它们通常是针对特定的平台进行优化,这种优化的手段缺乏共性,优化的程序缺乏可移植性。本文首先对GOTOBLAS库的实现机制,尤其是其中的GEMM部分的实现,进行了深入的分析,发掘出其中的规律和共性。之后,通过分析存储层次对矩阵计算的影响,结合近年来国内外的一些研究成果,提出了一种矩阵计算的理念——计算重排序理论。在此基础上,通过对比矩阵计算的各种分块算法和数据结构,提出了一种面向存储层次解决矩阵计算问题的方法——综合递归分块方法,并将这种方法应用到Cholesky分解中,对比实验表明,采用该方法既可以提高执行效率,又可以节省存储空间。最后,进一步说明了,有必要将存储层次对程序性能的影响提高到计算模型的高度。