论文部分内容阅读
大规模并行处理器在空间上堆叠大量横向计算单元,通过提高并行度为许多计算带来了性能加速。以图形处理单元(Graphic Processing Unit, GPU)为硬件平台的通用计算GPU (General-purpose GPU, GPGPU)是大规模并行处理器的典型实例,加之CUDA和OpenCL等软件开发平台的推出,而备受亲睐。很多操作系统、图形图像处理软件、科学计算软件等都引入了GPGPU性能加速,且每年都有大量的关于GPGPU并行算法的学术成果被发表,不断拓展着GPGPU的应用范围、提高算法的性能。然而,以GPGPU为代表的大规模并行处理器由于体系结构和CPU之间的差异为其性能有效发挥带来了巨大的挑战。在软件方面,需要充分考虑这些差异,优化组合使用各种计算资源,才能充分发挥性能潜力;在硬件方面,需要不断完善体系结构设计,改进优化调度机制与策略,才能保证计算资源充分利用,避免过度硬件开销。而软硬件调度系统是保证GPGPU资源和性能优化的关键。分别从资源分配、执行次序、并行度三个角度对现有调度系统的各层次调度机制和策略存在的问题进行了剖析,提出相应的调度优化方法,其具体的内容如下:(一)资源分配,是指GPGPU各种软硬件资源的配给与管理机制,需要防止配给错误和访问冲突。针对GPGPU内存资源分配机制进行了研究:(1)GPGPU的多地址空间的内存模型导致了数据管理的复杂化。提出了多地址空间封装机制,将多地址副本整合成单一数据结构,在保持性能的同时简化了资源利用。(2)GPGPU特有内存和核函数之间的静态关联导致其在多线程程序中产生资源访问冲突。以纹理内存为例,提出内存资源池调度管理机制,将静态资源实现动态化分配,提高了特有内存利用率。(二)执行次序优化,是指根据依赖关系与资源需求优化线程、线程块(Cooperative thread array, CTA)、核函数等的时间分配和空间分布。针对线程和CTA的执行次序优化进行了研究:(1)探究GPGPU单指令流多线程的协同调度的设计合理性,研究了虚拟化平台的VCPU协同调度,并针对其时间片碎片化问题提出了缩小CPU作用范围的细粒度协同调度优化。该研究确认了GPGPU协同调度的合理性和GPGPU细粒度协同调度优化的性能优势。(2)负载均衡是GPGPU性能的关键,然而现有CTA调度策略由于数据局部性优化而产生了CTA分配的不均衡。设计CTA负载均衡调度优化策略CLASO,通过信用额度控制CTA分发,提高了CTA负载均衡和性能,同时模块化设计实现了对多种调度策略的兼容。(三)并行度优化,是指通过匹配源代码、核函数、线程等计算任务和硬件平台之间的并行度以减少调度开销,提高资源利用率并避免资源拥塞。针对源代码并行粒度和运行时线程级并行度的优化策略进行了研究:(1)现有GPGPU源代码并行粒度调整算法不能支持足够的语句类型。对此提出了多层次递归形式的源代码模型,并设计了自动化源代码并行粒度调整算法,实现了对包含在多层次分支、循环语句中的同步语句的支持。(2)现有线程级调度中面向CTA的并行度优化存在的调整粒度过粗和优化条件不准确等问题。提出了基于流水线停顿的Warp调度器上的细粒度动态并行度优化策略。对比CTA和Warp两个调度层次的并行度优化及其组合优化效果,Warp调度的并行度优化更具性能优势。