论文部分内容阅读
GPU作为一种新兴的体系结构在高性能计算领域中使用愈来愈广泛,其高带宽和计算吞吐量以及低功耗的特点能够提升应用程序的性能。然而,在GPU编程中,需要有效管理大量线程中内存层次和处理单元之间数据传输,使GPU数据本地化需要权衡程序性能、代码复杂度以及优化所需付出的努力。因此,其编程复杂性给开发人员带来了重大的挑战。目前计算机硬件结构和软件执行环境日新月异,硬件技术的革新很难与软件性能的提升保持同步,无法充分发挥硬件的计算能力。软件自适应技术被认为解决这一问题的有效途径。FFT是计算离散傅里叶变换(DFT)的快速算法,具有广泛的应用,常被用于数字滤波、求解偏微分方程和信号分解等。因此,优化FFT的性能在实际应用中具有十分重要的意义。
目前比较通用的GPU编程模型CUDA(Compute Unified Device Architecture)、OpenCL(OpenCL Computing Language)以及OpenACC只支持利用安装在本地的GPU,如果要使用远程结点上的GPU,程序员需要在不同的结点上显示的管理数据通信。当今计算机系统中每个计算结点都安装了多个GPU,因此,整个系统包含了成百上千个GPU,如何有效利用系统中计算资源变得更加复杂。
为此,本文基于CPU+GPU混合异构平台,研究了自适应FFT框架、集群多维FFT并行算法以及GPU虚拟化技术,具体如下:
基于GPU提出了一个FFT自适应性能优化框架,基于该框架实现了名为MPFFT(Massive Parallel FFT)的高性能FFT软件包。对于计算长度为2的幂多维FFT,MPFFT的性能在AMD GPU上远远优于clAmdFft,在NVIDIA GPU上与CUFFT的性能相当。此外,MPFFT也支持规模非2的幂FFT的计算。对于3维非2的幂FFT,MPFFT是FFTW在4线程时性能的1.5倍至28倍,在TeslaC2050上相较于CUFFT4.0取得了20.01倍的平均加速比。
研究了多维FFT在集群系统上的并行算法,基于该算法开发了名为MPFFT-MPI软件包,该软件包采用二维分解,可以在GPU集群上计算n维FFT。
为了管理集群系统中GPU资源,本文重新设计了VOCL(Virtual OpenCL)虚拟化解决方案,该框架主要基于OpenCL和MPI(Message Passing Interface)编程模型,由于VOCL API和ABI与OpenCL API和ABI保持一致,本地OpenCL应用程序无需更改源代码和重新编译就可以使用系统中所有远端GPU资源。VOCL除了透明使用系统中所有GPU之外,还支持动态任务迁移。