摘要:
计算机体系结构数十年来蓬勃发展,但内存性能的提升远远不及处理器性能的增长。这种增长速度的不平衡造成内存和处理器之间的性能差异越来越大,内存访问成为计算性能的瓶颈,降低内存即DRAM的访问延迟往往能够显著改善程序的性能。DRAM的行缓存是对降低DRAM访问延迟十分有效的部件,DRAM的行缓存一次能够缓存DRAM一个bank中的一行数据,只要行缓存中的数据不被替换,那么稍后访问同一bank同一行的访问就能直接从行缓存中取得需要的数据,这样能够显著降低访存请求访问DRAM的延迟。内存控制器中的优化例如内存访问调度优化以及地址映射方式优化都是通过提高DRAM行缓存的局部性来改善系统性能。
本文提出了一个降低DRAM行缓存冲突,改善行缓存局部性的新方法,该方法基于操作系统的Bin-Hopping页分配算法实现,因此我们把这个方法简称为PARBLO(Page Allocation based Row Buffer Locality Optimization)。由于虚实地址映射的页分配算法决定了虚页被映射到哪一个物理页,而内存控制器的地址映射方式则决定了物理页被映射到DRAM的哪一个位置。一旦掌握了页分配算法的特点和地址映射方式的特点,PARBLO就能够利用这些特点来间接控制虚页在DRAM中的排布方式。PARBLO在程序的开始处插入一个或者多个初始化循环来影响页分配方式,初始化循环的作用只是触发缺页异常。我们通过分析程序核心片段的访问模式来决定初始化循环中应该包括哪些访问点,以及决定这些访问点的访问方式。通过初始化循环决定的特殊分页顺序,以及操作系统Bin-Hopping算法的作用,PARBLO可以按照程序核心段的模式来请求分页,并且将这些页映射到DRAM中对应的位置,从而间接地使程序的行为能够与DRAM中的数据排布方式相适应。
我们通过手工分析和变换对7个科学计算类的程序做了优化,我们的实验结果显示与已有的内存控制器优化相比,PARBLO对程序行缓存失效率的降低可以达到76%,平均达到37.4%。而对程序性能提升可以达到15%,平均提升5%。本文工作的主要贡献是提出了基于页分配算法的行缓存局部性优化来增加行缓存的重用,并在各种配置环境下实验验证了该方法的有效性,我们的方法主要有以下这些优点:
与已有的内存控制器中的优化相比,我们的方法具有更好的适应性。
与已有的软件优化相比,我们的方法对程序性能的副作用很小,它对编译器已有的优化或者程序的其它性能决定因素影响很小。
我们的方法非常简单,对大部分系统而言不需要修改操作系统,而且与内存控制器中的优化配合可以获得最好的效果。
本文工作主要还是针对单处理器执行环境的,但是这个工作可以被用于多核处理器执行环境下的程序优化,在多核环境下多道程序同时执行会引入程序间的DRAM行缓存冲突,虽然通过DRAM bank划分可以减少多道程序之间的行缓存冲突,但DRAM bank划分会使每一个程序占有的bank数目减少从而导致程序内的行缓存冲突会同时增加。 DRAM bank划分方面的研究是我们未来的研究工作,我们认为本文的工作可以与DRAM bank划分方面的研究结合起来同时降低程序内和程序间的DRAM行缓存冲突,有效地降低多核环境下DRAM访问的延迟。