论文部分内容阅读
随着图形处理器(GPU)的计算能力和可编程性的不断提高,利用GPU进行通用计算(GPGPU)逐渐成为研究的热点。通常GPGPU计算采用CPU-GPU的异构模式,虽然这种异构模式能够获得好的性能收益,但其程序开发和性能优化的复杂度要比同构系统大的多。在CPU-GPU异构系统上进行计算会遇到很多性能瓶颈,例如:负载均衡、同步与延迟、数据局部性、任务划分等。这些因素对提高程序的性能至关重要。此外,尽管CUDA编程模型极大的降低了CPU-GPU异构平台编程的难度,但对于大多数串行程序开发者来说,其开发门槛还是相对较高,而且当底层的硬件平台发生变化时,软件开发者又要学习一种新的编程模型并针对新的硬件平台重新改写已有的程序,这无疑加重了程序员的负担。因此设计一种使用简单、平台无关的多核并行编程模型具有重要意义。本文主要进行了以下研究工作:(1)分析了影响CPU-GPU异构平台上程序性能的关键因素,全面总结了已有的优化方法并设计了一种使用原子函数实现不同线程块之间同步等自己的优化方法和优化策略。对每一种优化方法都进行了实验验证和理论分析,其中我们设计的使用原子函数实现不同线程块之间同步的方法比现有的重新启动内核函数的方法要快4~5倍。(2)为了进一步验证各种优化方法的效果,也为了完整的介绍在CPU-GPU异构上进行程序开发的流程(算法设计、编程实现、性能优化),我们以解决生物信息学中的DNA或蛋白质局部序列比对问题为例,在CPU-GPU异构平台上设计并实现了基于列并行的Smith-Waterman算法,综合运用多种优化方法进行优化后的并行程序获得了平均37倍的加速比。(3)在深入分析了OpenMM并行编程框架之后,我们设计了一个基于库的、平台无关的多核并行编程模型。为了验证该模型的可行性和易用性,我们实现了一个面向科学计算的原型系统,通过设计合理的API层次结构,对上层用户屏蔽了底层硬件的具体细节,用户只需在编译时根据具体的底层硬件平台选择相应的动态链接库就可以将原来的串行程序变成高效的并行程序。