gpt4 book ai didi

caching - 冲突未命中和容量未命中有什么区别

转载 作者:行者123 更新时间:2023-12-01 19:35:16 25 4
gpt4 key购买 nike

发生容量缺失的原因是缓存无法包含程序执行所需的所有 block (程序工作集远大于缓存容量),从而从缓存中丢弃 block 。

在集合关联或直接映射的 block 放置策略的情况下会发生冲突缺失,当多个 block 映射到同一集合或 block 帧时会发生冲突缺失;也称为碰撞未命中或干扰未命中。

它们实际上有非常密切的关系吗?

例如,如果所有缓存行都已满,并且我们有一个对内存 B 的读取请求,则我们必须逐出内存 A。

那么,由于我们没有足够的空间,是否应该将其视为容量不足?稍后如果我们想访问内存 A,并且由于它之前已被逐出,因此将其视为冲突未命中。

我的理解正确吗?谢谢

最佳答案

这里的重要区别是由数据集大小引起的缓存未命中与由缓存和数据对齐的组织方式引起的缓存未命中之间的区别。

假设您有 32k 直接映射缓存,并考虑以下 2 种情况:

  1. 您重复迭代一个 128k 数组。数据不可能适合该缓存,因此所有未命中都是容量未命中(除了每行的第一次访问,这是强制未命中,即使您可以无限增加缓存,它也会保留)。

  2. 您有 2 个小型 8k 数组,但不幸的是它们都对齐并映射到相同的集合。这意味着虽然它们理论上可以放入缓存中(如果您修复了对齐方式),但它们不会利用完整的缓存大小,而是会竞争同一组集合并相互冲突。这些是冲突遗漏,因为数据可以容纳,但仍然由于组织而发生冲突。组关联缓存也可能会出现同样的问题,尽管不太常见(假设缓存是 2 路的,但您有 4 个对齐的数据集...)。

这两种类型确实相关,您可以说,鉴于高水平的关联性、设置倾斜、​​适当的数据对齐和其他技术,您可以减少冲突,直到您几乎留下不可避免的真实容量缺失。

关于caching - 冲突未命中和容量未命中有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com