论文部分内容阅读
当前处理器发展向异构和众核方向发展。异构是指在同一个芯片上包含有不同架构的处理器核心。众核是指同一个芯片上的处理器核心数目达到上千个。异构众核的体系结构以其高性能、高能效比的优势在高性能计算中得到广泛应用。但是,当前的处理器性能的进一步发展正被功耗和“存储墙”问题所困扰。一方面,随着工艺的进步,单芯片上集成的集体管数目越来越多,但是功耗和散热问题使得这些晶体管难以同时工作,制约了性能的提升。另一方面,内存速度的增长仍远远落后在处理器速度增长之下,造成两者之间的速度差异越来越大,成为性能瓶颈。Cache在微处理器中担任着缓解“存储墙”问题的角色,通过发掘数据的局部性,弥补内存和处理器之间的速度差异。但是大容量的Cache占据了芯片上大量的面积,并消耗着高达50%的处理器核心能耗。这就要求在异构众核的体系结构下,一方面需要优化Cache功耗,以此降低整个芯片的功耗,另一方面要提高Cache性能,从而提高整个系统的性能和吞吐率。Cache的功耗和性能优化研究对于整个芯片的低功耗和高性能研究具有重要的意义。本文针对异构众核体系结构下一级Cache的访问功耗和Cache利用效率展开研究,重点关注了一级Cache并行访问造成的功耗浪费,以及上千线程共享Cache下的Cache分配问题。本文主要取得以下研究成果:1.提出了一种面向低功耗的Cache路划分方法。根据程序中栈区和非栈区数据的访问特性,在本文的工作中,提出了基于程序存储区的一级Cache的划分方法。通过将程序访问的栈区和非栈区的数据访问进行分离,分别对应到不同的Cache路中。每个存储访问不用访问所有的Cache路,从而降低Cache访问的功耗开销。并且这种根据程序数据访问特征进行的动态划分方法可以适应于不同的程序,避免了静态划分方法可能带来的程序性能下降。对于4路组相联的Cache,这种方法可以节省约28%的Cache功耗。2.提出了一种消除标识检查的Cache功耗优化方法。同样针对于Cache并行访问的功耗问题,本文提出了一种通过直接访问曾经访问过的Cache行,避免多路访问的方法。该方法首先在缓存中记录曾经访问过的Cache行的基地址寄存器和相应的偏移,在另一个具有相同基地址寄存器的指令进行存储访问时,对存储访问的偏移量和缓存中的偏移量进行比较确定当前的访问是否在记录的Cache行中。如果在同一个Cache行中,就可以直接对相应的Cache行进行访问,从而避免标识检查。同时由于可以直接对Cache行进行访问,就不需要对TLB进行访问,从而进一步节省相应的功耗。实验表明,这种方法可以减少约30%的Cache动态功耗,并减少67%的TLB访问功耗。3.提出了一种众核体系结构下的Cache动态分配方法。由于Cache容量和线程数量的差异,众核GPGPU中Cache行的利用率通常比较低。本文针对这样的情况,提出了一种面向众核体系结构的概率性的Cache行分配方式。在每个Cache行上记录最开始请求该Cache行的指令地址和该Cache行的重用次数。根据重用信息对指令进行动态的Cache行分配。Cache行重用率低的指令将具有较小的概率分配到Cache行。通过这样的Cache分配方式,提高Cache的利用率,避免过多的Cache请求造成冲突,提高整个系统的性能。实验表明该方法最多可以提高程序性能达2.5倍。4.提出了一种面向Cache性能的众核处理器并发度分配方法。GPGPU上具有上千的线程,而整个系统的存储带宽和Cache并不能够支持这样多的线程并发运行。在本文的工作中,提出了一种基于指令访问模式的Cache和并发度的分配方法。该方法首先对整个程序核心中的访存指令按访问模式进行分类。通过访问模式的特征和Cache访问命中率,分析访问的局部性。根据访问的局部性和Cache的容量,确定可以使用一级Cache的Warp数量和可以并发运行的Warp数量。由于对使用Cache的Warp进行限制,对并发Warp的数量进行约束,更好地利用整个系统的存储和计算资源,最终提高整个系统的性能。实验表明该方法最多可以提高程序性能达3倍,并取得54%的平均性能提升。