缓存污染
目录
缓存污染
缓存污染是指执行中的计算机程序不必要地将数据加载到CPU高速缓存中,从而导致其他有用的数据从高速缓存中逐出到较低的内存层次结构中,从而降低了性能。例如,在多核处理器中,一个内核可以将其他内核提取的块替换为共享缓存,或者预取的块可以替换从缓存中按需提取的块。

解决方案
除了上述代码重组以外,缓存污染的解决方案还可以确保仅将高重复使用数据存储在缓存中。这可以通过使用特殊的缓存控制指令,操作系统支持或硬件支持来实现。
专用硬件指令的示例包括PowerPC AltiVec提供的“ lvxl” 。该指令将128位宽的值到寄存器和标记对应的缓存块为“最近最少使用”,即作为总理候选人在驱逐需要逐出来自其缓存集的一个块。为了在以上示例的上下文中适当地使用该指令,必须使用该指令来加载循环引用的数据元素。当以这种方式实现时,不会发生高速缓存污染,因为这种循环的执行不会导致从高速缓存中过早地退出T。可以避免这种情况,因为随着循环的进行,C中元素的地址将映射到相同的缓存方式,而实际上保留了较旧的(但未标记为“最近最少使用”的)数据,而另一种方式完好无损。 )。仅从最早的数据(与给定的示例无关)中删除T不属于的缓存,因为它的更新恰好在循环开始之前发生。
类似地,使用操作系统(OS)支持,可以将主内存中与C数据数组相对应的页面标记为“禁止缓存”,或者说是不可缓存的。类似地,在硬件级别,可以使用缓存绕过方案,该方案基于程序访问模式识别低重用数据并从缓存中绕过它们。同样,共享缓存可以被分区以避免运行中的应用程序之间的破坏性干扰。这些解决方案的权衡点在于,基于OS的方案可能具有较大的延迟,这可能会使通过避免缓存污染而获得的收益无效(除非开始时不可缓存的内存区域),而基于硬件的技术可能没有全局性。程序控制流和内存访问模式的视图。
重要性越来越高
缓存污染控制的重要性日益提高,因为所谓的“内存墙”造成的惩罚不断增加。芯片制造商继续设计新技巧,以克服不断增加的相对于CPU的相对内存延迟。他们通过增加缓存大小并为软件工程师提供有用的方式来控制数据到达和停留在CPU上的方式来做到这一点。缓存污染控制是(主要是嵌入式的)编程器可用的众多设备之一。但是,也使用其他方法,其中大多数是专有方法,并且高度依赖于硬件和应用程序。