Set Associativity 和 Way 的概念
1. Set Associativity(组相联)
-
定义:
Set Associativity 是缓存的一种组织方式,用于决定一个特定的内存地址可以映射到缓存的哪个位置。缓存被分为多个 set(组),每个 set 中包含若干条缓存行(lines)。- 如果一个缓存行可以映射到多个位置,则称为 组相联缓存。
- 每个组包含若干条缓存行的个数,称为 way。
2. Way(路数)
-
定义:
Way 指的是一个组中包含的缓存行数。例如:- 2-way set associative: 每个组中有 2 条缓存行。
- 4-way set associative: 每个组中有 4 条缓存行。
- Direct-mapped cache: 这是 1-way set associative(每组只有 1 条缓存行)。
- Fully associative cache: 这是特殊情况,缓存中只有 1 组,所有缓存行都属于同一组。
缓存类型的对比
类型 | Set 数量 | Way 数量 | 特点 |
---|---|---|---|
Direct Mapped | 多(每个内存地址唯一映射到一个组) | 每组 1 条缓存行(1-way) | 简单快速,但容易发生冲突缺失(conflict miss)。 |
Set Associative | 多 | 每组有多条缓存行(n-way) | 冲突缺失减少,速度和硬件复杂性在 Direct-Mapped 和 Fully Associative 之间。 |
Fully Associative | 1(只有一个组) | 所有缓存行(n = 全部) | 没有冲突缺失,但硬件复杂性高,访问速度较慢(需检查所有缓存行)。 |
Set Associativity 和 Way 的关系
-
Set 数量计算:
Set 数量 = Cache 容量 / (Way 数量 × 缓存行大小)
-
例子:
一个 2-way set associative 缓存,大小为 16KB,缓存行大小为 64B:- 缓存总行数 = 16KB / 64B = 256 行
- 每组 2 行(2-way),因此组数量 = 256 / 2 = 128 组。
-
Way 表示灵活性:
- Way 的数量越多,表示每组中可以容纳更多的缓存行,冲突缺失减少,但硬件成本和复杂性会增加。
实际例子
Direct Mapped Cache (1-Way)
- 特点: 每个内存地址被直接映射到某个固定的组(set)。
- 问题: 如果多个地址映射到同一组,就会频繁替换,导致冲突缺失。
2-Way Set Associative Cache
- 特点: 每个组包含 2 条缓存行(way)。如果一个地址映射到某组,它可以存储在该组的任意 2 条缓存行中。
- 优势: 减少了冲突缺失,但需要硬件支持两路并行比较(比较两个 tag)。
Fully Associative Cache
- 特点: 所有内存地址可以存储在缓存中的任何位置,没有组的概念。
- 问题: 查找缓存行需要比较所有的标签,硬件复杂性高。
总结
- Set Associativity 是缓存的组织方式,决定了内存地址在缓存中的映射范围。
- Way 表示一个组中缓存行的数量。
- Direct Mapped 是 1-way 的特例,而 Fully Associative 是所有行属于同一组的特例。