【问题标题】:Can a lower level cache have higher associativity and still hold inclusion?较低级别的缓存可以具有更高的关联性并且仍然保持包含吗?
【发布时间】:2020-04-10 18:18:48
【问题描述】:
较低级别的缓存是否可以具有更高的关联性并仍然保持包含?
假设我们有 2 级缓存。(L1 离 CPU 最近,L2 离主存最近)
L1 缓存是 2-way set associative with 4 sets,假设 L2 缓存直接映射到 16 个缓存行,并假设两个缓存具有相同的块大小。然后我认为它会遵循包含属性,即使 L1(低级)具有比 L2(高级)更高的关联性。
据我了解,较低级别的缓存可以具有更高的关联性(并且仍然保持包含)。这只会改变标签位的数量(如每个级别的物理地址所示)、比较器的数量和要使用的 MUX。如果这正确,请告诉我。
【问题讨论】:
标签:
caching
memory
memory-management
cpu-architecture
cpu-cache
【解决方案1】:
Inclusion 是一种在所包含缓存的内容上强制的属性,并且独立于缓存的关联性。包含提供了消除所包含缓存的大多数窥探的好处,这允许实现在减少标签带宽的情况下逃脱,并且还可能导致窥探延迟减少。
直观地说,当封闭缓存比包含缓存具有更多关联性时,包含缓存的内容应该始终“适合”到封闭缓存中。这种“静态”观点是不恰当的过度简化。替换策略和访问模式的差异几乎总是会产生这样的情况:在被包含的缓存中选择作为牺牲之前,在封闭缓存中选择行作为牺牲。包含策略要求从包含的缓存中逐出此类行 - 与关联性无关。
当封闭的缓存比包含的缓存具有更少的关联性时,直观上会出现更多问题的情况。在这种情况下,很明显封闭缓存中的关联性冲突将强制从包含的缓存中逐出。
在任何一种情况下,判断被包含的缓存中的额外驱逐是否超过包含的好处是多维的。性能影响将取决于缓存的特定大小、关联性和索引,以及应用程序访问模式。性能影响的重要性取决于应用程序的特性——例如,紧密耦合的并行应用程序通常显示吞吐量与参与处理器的最坏情况性能成正比,而独立应用程序通常显示吞吐量与参与处理器的平均性能。
【解决方案2】:
是的,但是外部缓存中的冲突驱逐可能会强制从内部缓存中驱逐以保持包容性。
(我认为,如果两个缓存都使用简单的索引,那么对于更大且至少具有关联性的外部缓存,您将不会有这种情况,因为外部缓存中的别名只会在您也在内部缓存中发生别名时发生。)
由于外部缓存更大,对于在 L1 中具有别名的行,您不一定会在其中获得别名,因此它不是无用的。
但这是不寻常的:通常外部缓存比内部缓存更大并且更具关联性,因为它们不必那么快,而且高命中率更有价值。
如果您要使外部缓存的关联性低于内部缓存,则将其设为 NINE(非包含非独占)可能是一个更好的主意。但你只问是否可能。