论文部分内容阅读
BLAS(Basic Linear Algebra Subprograms)定义了一组基本的矩阵和向量的操作,包括各种矩阵乘法和矩阵向量乘法,在许多领域有广泛的应用。现在的GPU已经发展为一种多核,多线程,具有杰出的计算能力和很高的存储器带宽,可编程的处理器。GPU可以用来加速许多具有数据并行特征的应用。本文在BLAS通用版本基础上,分析GPU体系结构特点和BLAS函数特征,使用CUDA在GPU上高效实现BLAS库的一些核心操作。本文首先介绍了BLAS函数标准,重点介绍了BLAS库中应用最多的是BLAS2和BLAS3提供的函数,特别是BLAS2中的GEMV和BLAS3中的General Martrix Multiply(GEMM),即通用矩阵相乘。介绍了GPU体系结构特点以及CUDA,包括CUDA的体系结构和常用的优化方法。然后,使用CUDA在GPU上设计和实现了三级BLAS库的核心函数GEMM(通用矩阵相乘)。在实现通用矩阵相乘时,需要考虑两种情况:一种是数据已经拷贝到GPU的显存中的情况。在Geforce GTX 260上,在数据已经拷贝到显存的前提下,算法峰值是65GFLOPS。而GTX 260的双精度峰值是67.068GFLOPS,因此双精度的实现效率达到了97%。另一种是数据没有拷贝到显存中的情况。在大规模矩阵乘法的计算中,数据不能够一次全部的拷贝到显存中。通过数据调度,本文的算法拷贝数据的时间不超过总时间的10%。最后,使用CUDA在GPU上设计和实现了二级BLAS库的核心函数GEMV,即矩阵向量相乘。并且对转置和非转置的双精度版本进行了测试,实验结果表明,本节实现的转置形式在大规模输入的情况下比CUBLAS的实现要快上50%,而非转置形式的性能跟CUBLAS相当。本文中使用的方法对GPU上的高性能BLAS实现有重要的参考意义。