论文部分内容阅读
硬件高速缓存能够充分利用指令和数据的局部性特征,提前将所需的指令和数据放至高速的缓存设备来减小访存延迟。目前的体系结构设计能力和工艺水平已经能够将大容量高速缓存集成至片内以缓解访存带宽和速度对系统性能的影响。随着多核与片上高速缓存组织形式的多样化,硬件高速缓存在设计时面临许多新的问题:(1)传统的单线程应用严重浪费了硬件高速缓存资源。尤其是引入了高速缓存层次结构后,单线程应用只能简单地使用本地缓存资源,而未能利用片上其它远程缓存资源;(2)缓存间一致性协议的维护变得更加复杂,尤其是引入了多线程机制以后,不仅要考虑单线程内的数据依赖,还需要考虑线程间交互时数据的正确性维护,在缓存一致性维护的过程中产生了大量的一致性缓存缺失;(3)缓存缺失处理带来的数据访问延迟问题更加严重。由于多核间的数据交互是通过共享硬件高速缓存来完成的,因此多核系统中缓存缺失处理机制变得更加复杂,特别是引入多线程思想以后,处理缓存缺失所需的时间代价不容忽视。另外,多核片上硬件高速缓存层次的组织形式、私有/共享机制的选择、替换策略和划分机制都有可能根据具体的多核结构和应用访存特性进行相应调整,以便在低访问延迟和高命中率之间进行权衡与折中。针对以上问题,本文研究如何在现有多核处理器结构的基础上添加少量低开销的硬件性能监测部件来实时监测并行程序运行时共享数据的访问特征信息和单线程程序运行时缓存空间的分配问题,实现程序运行时对硬件高速缓存资源的更高效管理利用,减少缓存缺失以及降低缓存缺失处理延迟。本文针对提高片上缓存利用率做了以下几个方面工作:(1)研究了多核处理器平台上单线程程序片上缓存资源利用率低的问题,提出了一种轻量级的缓存控制机制LVUCP。LVUCP融合了多核处理器中所有分布的片上缓存资源,并将其虚拟化为一个大的可供所有处理器核使用的共享缓存。只需很少的数据迁移和划分代价,用户就可以直接利用片上所有的分布式的硬件高速缓存资源,显著地增加了单线程应用程序可利用的硬件高速缓存容量;同时用户还可以显式地指定强局部性数据驻留在缓存,减少程序访问时的缓存缺失率。与通过并行化应用程序来最大化利用片上计算资源不同,LVUCP试图最大化片上硬件缓存资源的利用率,获得更快的访存速度并加速应用程序的执行。实验表明相比于传统无管理的执行方式,LVUCP可以将单线程程序片上缓存利用率提高57%,特别是在拥有较大硬件高速缓存资源的大规模多核处理器上,片上缓存利用率的提升甚至达到200%。(2)研究了并行程序线程间的数据相关问题,提出了基于共享数据感知的多线程调度机制,降低线程间的数据交互延迟。并行程序线程间交互是通过共享数据来完成的,并且这种交互具有阶段性特征。本文提出了基于共享数据感知的线程调度算法来实时监测系统中共享数据的使用模式,并将对同一共享数据访问最多的线程组同时映射到共享同一末级缓存的核组中执行,极大地减少了共享数据访问的维护时间和缓存间的数据冗余,增加了数据重用率并加速程序执行。实验表明,相对于传统的以负载均衡为目的的线程调度算法,共享数据感知的多线程调度机制有7%的性能加速,片上末级缓存的缺失率平均降低了15%。(3)研究了并行程序执行时缓存一致性维护所带来的开销严重问题,提出在现行的基于目录写无效协议的基础上添加写更新协议,在此基础上实现一种混合型共享数据感知的状态转换策略。在线程的交互过程中,传统的写无效协议在对共享数据的一致性维护过程中会形成大量的一致性缺失,严重影响系统的整体性能。本文提出的共享数据感知的状态转换策略能够有效地避免一致性缺失的产生。通过添加低开销的硬件计数器实时地监测数据访问过程中写共享数据操作。当重复地读写同一共享数据块时,用写更新状态转换策略取代传统的写无效状态转换策略,实时更新远程的缓存中副本数据,消除后续访问过程中的一致性缓存缺失。本文提出的策略是以牺牲少量带宽来换取高额的缓存命中率来提高片上缓存资源的利用率,加速并行程序的执行;特别是在频繁线程交互的并行应用中,本策略表现尤为突出。实验表明,相对于传统的写无效转换策略,本文提出的混合型的缓存一致性维护转换策略对所有测试程序有21%的性能提升。通过以上研究工作,我们获得了如下重要认识:(1)在多核处理器时代“存储墙”日益严重,单个程序及系统整体性能严重依赖访存性能,因此提高片上硬件高速缓存利用率比程序本身的指令优化更加有效;(2)在并行程序中,线程对共享数据的访问具有动态阶段性特征,传统的静态分析方法并不能完整地剖析并行程序的行为;(3)并行程序线程间交互是通过共享数所来完成的,共享数据的使用和维护是造成片上缓存资源利用率低的重要原因。