论文部分内容阅读
以GPU为代表的通用众核加速器是并行与高性能计算领域在最近十年内的重要发展趋势之一。由于采用不同的体系结构设计思路,GPU能够以高度并发的形式提供数十倍于通用CPU的计算能力和内存带宽,因而在科学与工程计算等若干领域获得了广泛应用。然而,对于如何充分发挥CPU和GPU组成的异构系统所提供的高计算性能,目前研究成果相对较少,极少有工作从体系结构的角度探讨新的体系结构特性带来的潜力和可能性。早期GPU只能被用作独立于CPU的协处理器,GPU与CPU之间交互的开销较大,因而限制了其应用范围。新的GPU硬件所引入的新的体系结构特性使CPU-GPU系统变为具有可共享访问的页锁定内存区域的NUMA系统。这使得通过共享内存的方式实现高效CPU-GPU计算模式成为可能。 本文在CPU-GPU异构NUMA系统的基础上提出了GPU计算的一个全新方向,即共享内存式GPU程序设计。通过参考CPU上的共享内存式程序设计,利用页锁定内存的共享特性设计并实现了能够支持CPU-GPU高效任务交互及并行的CAGTP(CPU Assisted GPU Thread Pool,CPU辅助的GPU线程池)模型。在实现CAGTP模型的过程中提出任务槽、计算线程块级任务调度、任务复用kernel等机制,使CAGTP模型上的任务交互开销远低于CKE或持久化kernel等现有的CPU-GPU任务交互技术。 为支持所提出的CAGTP模型,本文设计了将已有的GPU代码转换为CAGTP任务式编程的代码转换方法,能够转换CUDA C层和PTX层的代码。为将PTX层代码转换为CUDA C层kernel,本文设计并实现了PTX2Kernel代码转换器,该技术尚未有同类的相关工作。 为评价所提出的CAGTP模型,本文使用微基准测试方法学对CAGTP中运行时任务调度的若干环节进行了验证实验。这些微基准测试程序提供了一种衡量CAGTP模型工作机制各环节开销的量化手段,其结果对分析和优化CAGTP模型上的应用性能、改进CAGTP的设计具有重要价值。 最后,将所提出的CAGTP模型应用于线性代数、机器学习等领域,实验结果说明CAGTP模型对于批量稠密矩阵乘、楚列斯基分解和混合类型任务等应用能够获得相对于CKE、持久化kernel等现有CPU-GPU任务交互技术明显的性能提升。 CAGTP模型是共享内存式GPU程序设计的一个尝试,实验结果说明本文提出的共享内存式GPU程序设计是可行的。研究共享内存式GPU程序设计对于扩展以GPU为代表的众核通用加速器的应用范围、探索新型通用加速器体系结构的发展方向具有重要的理论价值和实践意义。