较低级别的缓存是否可以具有更高的关联性并仍然包含?
Can a lower level cache have higher associativity and still hold inclusion?
较低级别的缓存是否可以具有较高的关联性并仍然保持包含?
假设我们有 2 级缓存。(L1 最接近 CPU,L2 最接近主存)
L1 缓存是 2 路组关联的 4 个集合,假设 L2 缓存直接映射到 16 个缓存行,并假设两个缓存具有相同的块大小。然后我认为它会遵循包含 属性 即使 L1(较低级别)具有比 L2(较高级别)更高的关联性。
根据我的理解,较低级别的缓存可以具有更高的关联性(并且仍然包含包含)。这只会改变标记位的数量(如每个级别的物理地址所示)、比较器和 MUX 的数量 used.Please 让我知道这是否正确。
是的,但外部缓存中的冲突逐出可能会强制从内部缓存中逐出以保持包容性。
(我认为如果两个缓存都使用简单的索引,那么您将不会使用更大且至少具有关联性的外部缓存,因为外部缓存中的别名只会在您也在内部中使用别名时发生。 )
随着外部缓存变大,对于在 L1 中使用别名的行,您不一定会在其中使用别名,因此它并非毫无用处。
但这很不寻常:通常外部缓存比内部缓存更大并且更具关联性,因为它们不必那么快,而且高命中率更有价值。
如果您要使外部缓存的关联性低于内部缓存,那么将其设置为 NINE(非包含非排他)可能是一个更好的主意。但你只问是否可能.
包含是一个属性,它强制包含缓存的内容,并且独立于缓存的关联性。包含提供了消除对包含的缓存的大多数侦听的好处,这允许实现通过减少标签带宽而逃脱,并且还可以导致减少的侦听延迟。
直觉上,当封闭缓存比包含缓存具有 更多 关联性时,包含缓存的内容应始终 "fit" 进入封闭缓存.这种 "static" 观点是一种不恰当的过度简化。替换策略和访问模式的差异几乎总是会产生这样的情况,即在被选择为包含缓存中的牺牲品之前,行被选为封闭缓存中的牺牲品。包含策略要求将此类行从包含的缓存中逐出——与关联性无关。
当封闭缓存比包含缓存具有 更少 关联性时,会出现直观上更有问题的情况。在这种情况下,很明显封闭缓存中的关联性冲突将强制从包含的缓存中逐出。
在任何一种情况下,判断包含缓存的额外驱逐是否超过包含的好处是多维的。性能影响将取决于缓存的具体大小、关联性和索引,以及应用程序访问模式。性能影响的重要性取决于应用程序特性——例如,紧密耦合的并行应用程序通常显示吞吐量与参与处理器的 最坏情况 性能成正比,而独立应用程序通常显示吞吐量与参与处理器的平均性能成正比。
较低级别的缓存是否可以具有较高的关联性并仍然保持包含?
假设我们有 2 级缓存。(L1 最接近 CPU,L2 最接近主存) L1 缓存是 2 路组关联的 4 个集合,假设 L2 缓存直接映射到 16 个缓存行,并假设两个缓存具有相同的块大小。然后我认为它会遵循包含 属性 即使 L1(较低级别)具有比 L2(较高级别)更高的关联性。
根据我的理解,较低级别的缓存可以具有更高的关联性(并且仍然包含包含)。这只会改变标记位的数量(如每个级别的物理地址所示)、比较器和 MUX 的数量 used.Please 让我知道这是否正确。
是的,但外部缓存中的冲突逐出可能会强制从内部缓存中逐出以保持包容性。
(我认为如果两个缓存都使用简单的索引,那么您将不会使用更大且至少具有关联性的外部缓存,因为外部缓存中的别名只会在您也在内部中使用别名时发生。 )
随着外部缓存变大,对于在 L1 中使用别名的行,您不一定会在其中使用别名,因此它并非毫无用处。
但这很不寻常:通常外部缓存比内部缓存更大并且更具关联性,因为它们不必那么快,而且高命中率更有价值。
如果您要使外部缓存的关联性低于内部缓存,那么将其设置为 NINE(非包含非排他)可能是一个更好的主意。但你只问是否可能.
包含是一个属性,它强制包含缓存的内容,并且独立于缓存的关联性。包含提供了消除对包含的缓存的大多数侦听的好处,这允许实现通过减少标签带宽而逃脱,并且还可以导致减少的侦听延迟。
直觉上,当封闭缓存比包含缓存具有 更多 关联性时,包含缓存的内容应始终 "fit" 进入封闭缓存.这种 "static" 观点是一种不恰当的过度简化。替换策略和访问模式的差异几乎总是会产生这样的情况,即在被选择为包含缓存中的牺牲品之前,行被选为封闭缓存中的牺牲品。包含策略要求将此类行从包含的缓存中逐出——与关联性无关。
当封闭缓存比包含缓存具有 更少 关联性时,会出现直观上更有问题的情况。在这种情况下,很明显封闭缓存中的关联性冲突将强制从包含的缓存中逐出。
在任何一种情况下,判断包含缓存的额外驱逐是否超过包含的好处是多维的。性能影响将取决于缓存的具体大小、关联性和索引,以及应用程序访问模式。性能影响的重要性取决于应用程序特性——例如,紧密耦合的并行应用程序通常显示吞吐量与参与处理器的 最坏情况 性能成正比,而独立应用程序通常显示吞吐量与参与处理器的平均性能成正比。