Associativity 和 Way 的概念
在缓存设计中,associativity
(关联性)和 way
是描述缓存结构的重要术语。它们定义了内存地址如何映射到缓存块(cache line),以及缓存的组织方式。
1. Direct-Mapped Cache (直接映射缓存)
- 定义: 每个内存地址只能映射到缓存中的唯一一个块(cache line)。
- 特点:
associativity = 1
。way = 1
。
- 结构:
- 每个内存地址根据索引位直接找到对应的缓存行。
- 容易实现,但会导致冲突失效(conflict miss)。
- 示例:
- 缓存大小:16 bytes
- 缓存行大小:4 bytes
- 行数:16 / 4 = 4 行
- 内存块通过
index = (address / line size) % cache lines
找到缓存行。
2. Fully Associative Cache (全相联缓存)
- 定义: 内存地址可以映射到缓存中的任意一个块。
- 特点:
associativity = 总缓存块数
。way = 总缓存块数
。
- 结构:
- 所有缓存块共享一个全局存储空间,查找时需要比较所有缓存块的标签(tag)。
- 灵活性高,但硬件实现复杂。
- 示例:
- 缓存大小:16 bytes
- 缓存行大小:4 bytes
- 行数:16 / 4 = 4 行
- 任意内存块可以存储在 4 个缓存行中的任何一个,需要逐一比较标签。
3. N-Way Set-Associative Cache (N 路组相联缓存)
- 定义: 每个内存地址可以映射到一个特定的缓存组(set),而一个组中包含
N
个缓存块(way)。 - 特点:
associativity = N
。way = N
。
- 结构:
- 缓存被分成多个组(sets),每个组有固定数量的缓存块(ways)。
- 查找时先根据索引找到组,再比较组中缓存块的标签。
- 示例:
- 缓存大小:16 bytes
- 缓存行大小:4 bytes
- 组数:4 / 2 = 2 组
- 每个组有 2 条缓存块(2-way)。
具体示例解释:2-way 4-set cache
- 总行数为
4 x 2 = 8
行。 - 一个地址分为 索引位 (Set Index) 和 标记位 (Tag)。
- 例如,地址为 32-bit:
- 低 2 位表示块内偏移(block offset)。
- 接下来 2 位表示组索引(set index)。
- 剩余高位是标签(tag)。
- 例如,地址为 32-bit:
4. Associativity 和 Way 的关系
Associativity
是一种描述缓存灵活性的指标,表示一个内存地址可以映射到的缓存块数量。Way
表示每个组(set)中的缓存块数量(即每个 set 的宽度)。- 对于直接映射缓存,
way = 1
。 - 对于全相联缓存,
way = 总缓存块数
。 - 对于
N-Way Set-Associative
缓存,way = N
。
- 对于直接映射缓存,
总结
缓存类型 | Associativity | Way | 描述 |
---|---|---|---|
Direct-Mapped Cache | 1 | 1 | 每个地址固定映射到一个缓存块 |
Fully Associative Cache | 总块数 | 总块数 | 地址可存放在任意缓存块 |
N-Way Set-Associative | N | N | 地址可存放在一个组中的 N 个块内 |
扩展
Associativity
和 Way
直接影响缓存性能:
- 较高的
Associativity
减少冲突失效,但硬件实现复杂。 - 较低的
Associativity
硬件简单,但冲突失效增加。
选择适当的 Associativity
是设计缓存时需要权衡的关键。