在计算机中,高速缓冲存储器使用称为高速缓存行的概念来高速缓存主存储器。可以说我们增加了缓存行大小。空间局部性改善了吗?
但我发现时间局部性没有改善,因为参考的时间局部性意味着重复访问相同的存储位置。
我们能真正改善参考的时间局部性吗? 我觉得它无法完成,因为如何改善对同一内存位置的内存访问。
答案 0 :(得分:3)
从技术上讲,时间局部性是空间局部性:)
空间局部性表示如果在时间M0
访问某个存储区T0
,那么近期的存储器访问将在M0附近。
时间局部性更严格,它表示近期的内存访问将 at M0。您可以通过尽可能多地重复使用已加载的数据来改进它。
空间局部性对于读取是有益的,但对于写入来说不一定是好事,主要是在多处理器机器中,但也许在单核心机器中:高速缓存行越大,使用的数据类型越小,可能性越大。相同的缓存行被加载到多个处理器的缓存中。一个处理器在那里写入必须使所有其他处理器中的高速缓存行无效。
我们可以说,缓存的大小很好。进一步的改进可能是由于CPU中的更智能的缓存算法和执行代码中的缓存感知算法,并且由于更大的缓存而更少。
答案 1 :(得分:0)
时间局部性是应用程序展示的属性及其访问数据的方式。 没有一种实用的缓存设计适用于所有情况。
当然,应用程序表现出某种形式的空间局部性(访问附近的块),但是时间局部性并不总是存在,例如,流媒体行为。
为时间局部性设计缓存时要考虑的最重要的事情, 是替换和缓存块分配策略。 LRU替换接近大多数应用的最佳情况,但不是全部(存在病理情况),并且仅对于具有有限关联的高速缓存(例如,4路)是实用的。 缓存设计者也可以选择写入的分配策略(例如,通过优化写入组合/合并缓冲区进行写入 - 不分配)。
时间局部性优化通常是一项软件任务,可以应用多种技术,例如阻塞和缓存遗忘算法。 还有一个非常有用的指标/方法,您可以在其中表征应用程序的时间局部性,称为重用距离。此方法假定具有LRU替换和一个字的高速缓存行大小的完全关联高速缓存。 这通常被建模为堆栈,当你在缓存中命中时,堆栈中的位置会给你距离(然后你将它移到堆栈的顶部并留下一个洞),然后你可以生成直方图,看看会发生什么。
关于地方性可能会有无穷无尽的讨论,因为它永远是一个研究课题。