论文部分内容阅读
GPU(Graph Processing Unit,图形处理单元)以其独有的结构设计,在进行并行和高性能计算时通常都会获得高于多核CPU的计算性能。高并行性、高存储带宽和高计算性特点,使得GPU自上世纪末由Nvidia公司提出以来,在工程计算和科学计算领域都获得了非常广泛的应用。以GPU计算为代表的众核计算也逐渐成为高性能计算领域的一个重要分支,这也推进了GPU硬件及其开发技术的更新换代。 自Nvidia推出第二代Fermi架构以后,GPU硬件开始支持UVA(UnifiedVirtual Address Space,统一虚拟地址空间)和页锁定内存,CPU-GPU系统已经成为了拥有共享存储器的紧耦合非对称多处理器系统。原有的CUDA(ComputeUnified Device Architcture,计算统一设备架构)编程模型将GPU视为完全独立的协处理器,共享存储的新CPU-GPU系统打破了这种思维习惯和设计局限性,对细粒度、不规则的任务并行提供了可能。 CAGTP(CPU Assistant GPU Thread Pool,CPU辅助的GPU线程池)技术是共享内存式GPU程序设计的初步尝试,利用页锁定内存实现了能够支持CPU-GPU高效任务并行。本文在CAGTP的基础上,提出了基于线程池的GPU任务计算模型,该模型通过将分块计算调整成高效的细粒度任务并行,并提供了计算块级别的任务调度器和用户接口,用于在CPU-GPU异构系统上实现任务并行和数据并行的结合。稠密线性代数领域中的矩阵乘、乔列斯基分解,以及机器学习领域中的T近邻和K均值算法被用来评价此模型。实验结果显示,相比于传统的CUDA模型,基于线程池的GPU任务并行模型拥有更高的性能提升和负载均衡,针对细粒度的多任务并行,该模型能够达到接近2.0倍的性能提升。