论文部分内容阅读
随着计算能力和可编程性的不断增强,GPU被越来越多的应用开发人员用作性能加速器以提高程序性能。然而,如果没有经过精心优化,很难在GPU上实现理想性能。这是因为GPU程序的优化工作已经从硬件设计者转移到应用开发人员手中。而GPU程序的性能优化是一个非常困难的过程,其实质是实现算法特性向底层硬件特征的高效映射。一方面这个过程需要对GPU底层硬件有着深入的认识,而现代GPU架构的日益多样性,无疑加剧了本已困难的优化工作;另一方面,移植到GPU上的应用的程序特性也日益多样化,从整体上看,这些应用可分为规则应用和非规则应用两大类。不同的程序特性在不同硬件架构上具有不同的优化方法和策略。为简化GPU程序的性能优化工作,使应用开发人员能够更加容易的实现高性能GPU程序。针对不同的应用特点,本文的主要工作可分为两部分:针对规则应用,我们提出性能优化链的概念,并根据GPU计算和访存的特点,将性能优化链划分为绝对性能优化链和相对性能优化链两类。通过引入Roofline模型,实现了性能优化链的可视化,建立了针对特定硬件平台的可视化GPU程序性能优化指导模型:GPURoofline。该模型可通过提供性能信息来确定GPU程序在特定硬件平台上的性能瓶颈以及应选择的优化策略和方法,以此来指导应用开发人员特别是对GPU底层架构不熟悉的应用开发人员更加容易的实现高性能GPU程序。本文通过三个具有不同计算密度和程序特性的典型应用验证了GPURoofline模型的可用性和正确性。针对非规则应用,以Viola-Jones人脸检测算法为例,引入了非规则应用在GPU上实现和优化的五大关键技术:粗粒度并行、Uberkernel、Persistent Kernel、本地队列和全局队列。并通过性能特征参数的定义和抽取,完成了可调优GPUkernel的初步实现,并以此实现了Viola-Jones人脸检测算法在不同GPU平台上的性能移植。实验表明,经过优化的Viola-Jones人脸检测算法比OpenCV库中同样经过精心优化的CPU版本在AMD HD5850GPU、AMD HD7970GPU和NVIDIA C2050GPU三个GPU平台上分别达到了5.19~27.724、6.468-35.080和5.850~28.768的性能提升。本文的创新点如下:(1)分析和比较当前主流GPU架构的异同,提出了GPU程序性能优化的三大有效途径:提高片外带宽利用率,提高计算资源利用率和数据本地化。(2)提出算法计算密度和硬件计算密度两个概念,并通过这两个概念的比较将GPU kernel分为访存密集型和计算密集型两大类。提出并构建针对特定硬件平台的性能优化链。并根据访存和计算优化的特点,将性能优化链划分为绝对性能优化链和相对性能优化链两类。(3)构建完成了一个可视化的GPU性能指导模型:GPURoofline.通过引入Roofline模型实现了性能优化链的可视化,以一种更加直观的形式指导GPU程序的优化。(4)引入非规则应用在GPU实现和优化的五大方法和策略:粗粒度并行、Uberkernel、Persist Thread、本地队列和全局队列。并通过Viola-Jones人脸检测算法说明了这五种方法的具体应用方式。最后,通过对性能参数的定义和抽取,初步完成了可调优kernel的实现,验证了在不同GPU硬件平台间实现性能移植的可能性。