论文部分内容阅读
大数据时代的到来给海量数据处理带来了新的挑战,传统的多核架构难以满足大规模计算的需求,GPU和CPU在芯片上的结合是缓解大规模计算压力的一种趋势。对传统多核处理器而言,由于芯片上的核心数量越来越多,长期积累下来的处理器发展速度与存储器系统发展速度不均衡的现象形成了著名的“内存墙”问题,它对存储系统造成的压力已经很大。如今,除了芯片上核心数量的急剧增长之外还出现了核心类型异质的问题。在CPU-GPU异构多核环境中,CPU应用程序和GPU应用程序具有各自的特性。其中,CPU主要负责执行串行的任务和逻辑控制,GPU因其线程级并行性(Thread-level Parallelism,TLP)在并行计算上具有很大的优势。CPU-GPU异构多核可以充分发挥CPU与GPU在各自应用场景下性能优势,然而这一架构对CPU与GPU之间共享的各类资源尤其是最后一级缓存(Last-level Cache,LLC)的管理造成了极大的压力,严重影响了系统的性能与功耗。本文针对异构多核系统下共享内存的优化方案进行分析发现,目前异构多核环境下Cache替换算法的实现都是线程盲目的,未能较好地利用GPU应用程序和CPU应用程序各自的特性,因此缓存的利用率较低。许多GPU应用程序通过线程级并行性和缓存来降低内存延迟的消极影响,而大多数内存密集型CPU基准测试程序则只能通过缓存来弥补内存延迟。因此,CPU应用程序对Cache的需求较GPU应用程序而言更为敏感。针对以上特点,本文提出了面向缺失感知的异构多核缓存替换算法以提升异构多核系统下的系统性能。优化后的缓存替换算法对CPU与GPU的缓存请求的优先级别区别对待,CPU应用程序和GPU应用程序动态地非绝对公平地共享最后一级缓存,从而保证缓存敏感度较高的CPU应用程序在缓存中具有较长的生命周期。此外,本文采用的缓存替换算法综合考虑了Cache块的新近访问时间和访问频率,通过在最后一级缓存上缓存缺失次数的比较来动态地选择LRU或LFU算法以适合当前的运行状态。该算法不仅考虑了异构多核下CPU应用程序与GPU应用程序的运行特征,还结合了LRU与LFU两大经典替换算法,对异构多核下最后一级缓存的高效利用具有重要的意义。为充分发挥两大经典算法各自的优势,本文提出了基于数据块重用度的动态调整替换算法。这一算法对CPU与GPU应用程序的缓存优先级进行区别对待,同时增加与缓存队列长度一样的指针数组来放置被换出的缓存块地址信息,用于避免LRU替换算法容易出现Cache抖动现象的问题。该算法既考虑了不同类型核心的访存特征,又考虑了程序运行过程中的程序局部性,从而达到在异构多核下提升系统性能的目的。为了精准地评估实验方案对系统性能的影响,本文采用gem5-gpu模拟器作为基础架构模拟平台,通过组合运行SPEC CPU 2006+GPU Rodinia的基准测试应用程序来评估本文的设计方案对系统性能的影响。实验结果表明,本文设计实现的算法与传统的LRU替换算法相比,CPU应用程序的性能提升最高达到9.1%,平均提高了6.7%;GPU应用程序的性能提升最高达到7.5%,平均提高了7.0%;CPU应用程序的最后一级缓存缺失率最高降低了44%,平均降低了23%;同时,GPU应用程序的最后一级缓存缺失率最高降低了54.7%,平均降低了34.7%;因此,本文提出的面向缺失感知的异构多核缓存替换算法和基于数据块重用度的动态调整替换算法对异构多核系统的性能方面有很大的提高。