一句话:提出整体化缓存管理 KPC,融合预取与替换策略并消除 PC 传播,多核性能较最优组合提升 8%。
数据预取与缓存替换通常独立设计:预取器在私有缓存中工作,不与共享末级缓存(LLC)的替换策略交互;基于程序计数器(PC)的替换策略无法利用预取请求,因其不含 PC,且受编译器优化影响。本文提出整体化缓存管理技术 Kill-the-PC(KPC):其一,预取器根据预测置信度近似预取请求的未来使用距离;其二,采用简单替换策略,借助全局迟滞获得与当前最优 PC 策略相当或更好的性能;其三,将预取与替换整合为互惠系统,并避免在整个片上缓存层次中传播 PC。评估表明,在多核负载上 KPC 比现有最优预取器与替换策略组合的性能高 8%。
Data prefetching and cache replacement algorithms have been intensively studied in the design of high performance microprocessors. Typically, the data prefetcher operates in the private caches and does not interact with the replacement policy in the shared Last-Level Cache (LLC). Similarly, most replacement policies do not consider demand and prefetch requests as different types of requests. In particular, program counter (PC)-based replacement policies cannot learn from prefetch requests since the data prefetcher does not generate a PC value. PC-based policies can also be negatively affected by compiler optimizations. In this paper, we propose a holistic cache management technique called Kill-the-PC (KPC) that overcomes the weaknesses of traditional prefetching and replacement policy algorithms. KPC cache management has three novel contributions. First, a prefetcher which approximates the future use distance of prefetch requests based on its prediction confidence. Second, a simple replacement policy provides similar or better performance than current state-of-the-art PC-based prediction using global hysteresis. Third, KPC integrates prefetching and replacement policy into a whole system which is greater than the sum of its parts. Information from the prefetcher is used to improve the performance of the replacement policy and vice-versa. Finally, KPC removes the need to propagate the PC through entire on-chip cache hierarchy while providing a holistic cache management approach with better performance than state-of-the-art PC-, and non-PC-based schemes. Our evaluation shows that KPC provides 8% better performance than the best combination of existing prefetcher and replacement policy for multi-core workloads.