论文部分内容阅读
目前GPU因其强大的计算能力已经被广泛地应用到通用计算领域中,为了有效地管理和执行众多的线程,它采用了SIMT的执行模型。然而,这种模型可能会使程序的执行产生非一致的控制流,限制了性能的提升。针对这个问题,人们提出了重组的优化方法,将一个或多个Warp内执行相同分支路径的线程组合在一起,构成一个新的Warp,从而更有效地开发出线程级并行。但是通过分析发现,这类方法普遍存在着一些不必要的重组,引入了额外的开销,限制性能的进一步提升。本文针对上述问题,对重组的开销来源进行了分析并提出了一种轻量级的优化方法——部分重组。它通过设置阈值的方式来控制重组的范围,在保证较高重组效率的前提下,减少了对包含活跃线程数量较多的Warp进行重组,避免因线程重组引入过多的开销。本文的主要工作包括:首先我们对目前重组机制存在的问题进行了分析。GPU为了减少硬件设计的复杂度,通常按照体的方式对寄存器进行组织。当线程按照静态映射的方式执行时,并不会产生任何的影响。然而在进行重组操作后,可能会出现多个线程访问相同寄存器体的情况,这就产生了寄存器的体冲突,导致流水线停顿。同时,重组可能会导致Warp的拆分,使得访存事务增多,降低了内存访问的效率。通过分析发现,这些开销往往是对包含活跃线程数量较多的Warp进行重组产生的,它会抵消掉一部分重组带来的收益,甚至可能会降低程序的性能。为此我们提出了部分重组的方法,它通过设置阈值的方式来控制重组的范围,避免引入额外的开销。通过对重组范围进一步的分析,发现不同的测试程序在部分重组中所取的最佳阈值是不同的。为此我们又提出了一种能够动态调节阈值的通用部分重组框架,它通过对程序执行时的性能参数进行动态采样和分析,指导阈值的调整。在对齐Warp的处理上,采用了重映射的思想,将线程均匀的分布到各个执行通道上,减少了重组引入的开销,加速程序的执行。最后,我们在GPGPU-Sim上对上述机制进行实现与验证。实验结果表明,部分重组能够在保证重组效率的前提下显著减少不必要的开销,相对PDOM性能平均提升12%,最高达到27%。已有的Lane-Aware重组虽然也能实现不错的性能提升,但是硬件设计开销也是不容忽视的。在重映射的测试中,针对特定的程序,平均能够获得9.1%的加速比,最高提升近20%。总体来说,本文所提出的部分重组机制能够获得不错的性能加速,它的优势主要在于相对简单的硬件设计,而且它可以很容易的集成到目前已有的重组方法中,通过显式的阈值调整可以实现在PDOM和完全重组之间的切换,大大提升了它的通用性。