caching - 较低级别的缓存可以具有更高的关联性并且仍然保持包含吗?
问题描述
较低级别的缓存可以具有更高的关联性并且仍然保持包含吗?
假设我们有 2 级缓存。(L1 离 CPU 最近,L2 离主存最近)L1 缓存是 2 路集,与 4 组相关联,假设 L2 缓存直接映射到 16 条缓存线,并假设两者缓存具有相同的块大小。然后我认为即使 L1(下层)比 L2(上层)具有更高的关联性,它也会遵循包含属性。
据我了解,较低级别的缓存可以具有更高的关联性(并且仍然保持包含)。这只会改变标签位的数量(如每个级别的物理地址所示)、比较器的数量和要使用的 MUX。如果这正确,请告诉我。
解决方案
包含是对所包含缓存的内容强制执行的属性,并且独立于缓存的关联性。包含提供了消除所包含缓存的大多数窥探的好处,这允许实现在减少标签带宽的情况下逃脱,并且还可能导致窥探延迟减少。
直观地说,当封闭缓存比包含缓存具有更多关联性时,包含缓存的内容应该始终“适合”到封闭缓存中。这种“静态”观点是不恰当的过度简化。替换策略和访问模式的差异几乎总是会产生这样的情况,在这些情况下,行在被选为包含缓存中的牺牲品之前被选为封闭缓存中的牺牲品。包含策略要求将这些行从包含的缓存中逐出——与关联性无关。
当封闭缓存的关联性低于包含的缓存时,会出现直观上更成问题的情况。在这种情况下,很明显封闭缓存中的关联性冲突将强制从包含的缓存中逐出。
在任何一种情况下,判断来自包含缓存的额外驱逐是否超过包含的好处是多维的。性能影响将取决于缓存的特定大小、关联性和索引,以及应用程序访问模式。性能影响的重要性取决于应用程序的特性——例如,紧密耦合的并行应用程序通常显示吞吐量与参与处理器的最坏情况性能成正比,而独立应用程序通常显示吞吐量与参与处理器的平均性能成正比.
推荐阅读
- php - 转换为 php 多维数组后如何循环遍历 json 对象?
- reactjs - 尝试在 React-Native 中使用 MOBX
- c# - PrincipalPermission.Demand() 检查哪个委托人?
- android - 在 Dagger Dialog Fragment 中使用 View Model Providers(ViewModelProviders)
- python - 如何在通过 for 循环时在 Python3 中获得严格的单词匹配
- php - PHP日历,每周计算小时数并一一回显
- jquery - 将 maxlenght 添加到文本框
- typo3 - 如何在模板中呈现来自后端的内容?
- asp.net - 如何在for循环asp.net vb的新选项卡中打开报告n时间
- fluent - 在 Silverstripe 中翻译 UI 元素