论文部分内容阅读
传统的单核处理器的性能由于散热、功耗等问题,已无法与硬件资源发展速度相适应,但近年来高性能计算领域的新兴应用的发展对计算机的性能要求却越来越高。相对于传统的单核处理器,多核/众核处理器可利用线程级并行获得性能提升,从而更好地满足高性能计算领域对计算机的性能要求,目前已被学术界和产业界广泛接受。然而,多核/众核平台虽拥有较高的浮点峰值和计算能力,但它的结构和编程环境具有一定的复杂性,如何充分挖掘众核处理器的强大计算能力便成为了一个突出的问题。为了解决该问题,探索众多应用中的核心算法,并针对多核/众核平台特点对其进行优化便显得尤为重要。本文以信号处理算法中用的比较多的稠密矩阵乘法、矩阵求逆和FFT运算作为规则应用核心算法的代表进行研究。本文首先介绍矩阵的基本运算在CUDA架构下的实现,对于矩阵乘法来说,从矩阵乘法的定义出发,用带状划分的方式进行实现;然后考虑到可以通过利用共享内存来减少对全局内存的访问次数,提高程序性能,采用棋盘阵列划分的方式进行实现;最后考虑到每个SM中有着许多的寄存器资源,可以改变计算方式,增加对寄存器的使用,进一步提高程序性能。对于矩阵求逆来说,最初版本是根据高斯消元法开辟两块空间分别存储原矩阵和单位阵,分别进行归一操作和消元操作,然后注意到有一些线程的操作数是零,做了无用运算,浪费计算资源,优化后将原矩阵和单位矩阵结合到一起,提高计算资源利用率。对于FFT算法来说,在分析FFT并行性特征的基础上,采用多线程并行的映射方法实现算法,并从存储层次进行优化算法;然后考虑到一般的DIF-FFT输入数据不是正常序,需要倒序重排,这一部分的运算需要在CPU端进行,而数据频繁地在主机端和设备端之间传输会降低程序性能,因此可以采用输入输出都是正常序的DIT-FFT来避免,提升程序性能。实验结果表明,这三个模块在CUDA架构下的实现跟CPU下的实现方式相比能达到上十倍的加速比,跟CUDA自带的CUBLAS库和CUFFT库相比也有着一定的优越性。