论文部分内容阅读
图形处理器(Graphics Processing Unit, GPU)的飞速发展不但带动了虚拟现实、计算仿真以及图像处理等领域的高速前进,更将其应用范围扩展到图像处理以外的通用计算领域。其中,利用NVIDIA提出的CUDA平台执行高性能并行计算任务正成为新的热点研究课题。越来越多的计算密集型应用通过高效的并行化设计使得其性能在GPU上得到很大地提高。有限脉冲响应(Finite Impulse Response, FIR)滤波处理在数字信号处理中应用极其广泛。为了提高FIR滤波器的性能,例如更加陡峭的截止带,需要提高FIR滤波器的阶数。而高阶FIR滤波处理是一个典型的计算密集型应用。虽然基于频域的FIR滤波器的实现较基于时域的实现,其计算复杂度已有很大的降低,但是对于高采样率系统的数据流进行高阶FIR滤波处理,仍然是一项充满技术挑战的难题。本文在传统的基于频域FIR滤波处理算法Overlap-save方法的基础之上,根据新一代GPU体系结构的特点,提出了一种高效的并行Overlap-save方法,并利用CUDA在NVIDIA GTX465进行了实现。针对GPU计算带宽远大于其存储带宽的特点,该并行Overlap-save方法通过将输入数据划分为2倍的FFT长度的方法,极大地简化了输入数据和输出结果的搬移操作,并彻底消除了由于条件分支而引起的内核函数执行效率的下降。同时,通过安排Warp中相邻线程搬移相邻数据的方法,充分地利用了GPU内存访问合并的能力,最大限度地利用了GPU所能提供的存储带宽,从而使得并行Overlap-save方法更加适合GPU的并行体系结构。同时,为了能够部分地隐藏输入数据和结果数据在主机内存和GPU内存之间进行数据传输的时间,本算法利用了CUDA所提供的异步数据传输的方法,从而使得数据的传输与FIR处理计算能并行执行。实验结果表明,并行Overlap-save算法其性能与相同的基于频域的FIR滤波并行算法在多核CPU上——Intel Core i7上利用开源并行FFTW库进行的实现相比较,加速比可达15.4,说明该算法在性能上获得了很大的提升。