目錄
🧩 映射方式問題回顧
🏗? 組相聯映射?
?工作流程?
?地址結構
?? 替換策略
示例:?
優點?
?? 與其他映射方式對比
🧩 映射方式問題回顧
直接映射的問題:
-
優點:實現簡單,查找速度快(單一比較器)
-
缺點:
-
沖突未命中(Conflict Miss)嚴重:即使緩存沒滿,某些塊也只能映射到唯一行,造成不必要的替換
-
例子:如果地址 A 和地址 B 都映射到第 3 行,則每次訪問都會把對方替換掉,即使緩存中還有空位。
全相聯映射的問題:
-
優點:消除了沖突未命中(Conflict Miss 幾乎為 0)
-
缺點:
-
查找成本高:需要并行比較所有緩存行的 Tag → 成本高、功耗大、速度慢
-
不易擴展到大容量 Cache
-
🏗? 組相聯映射?
組相聯映射?是一種折中策略,它將 Cache 分為多個 集合(sets),每個集合中包含 多條 Cache 行。
每個主存塊根據其地址映射到 唯一一個集合,但在這個集合中,它可以存儲在 任意一行中。
?
?工作流程?
-
地址分解:將地址拆分為 Tag, Set Index, Block Offset
-
定位集合:使用 Set Index 定位到 Cache 中的一個集合
-
并行比較:在這個集合中并行比較所有行的 Tag 字段
-
命中判斷:
-
如果某一行的 Tag 匹配且 Valid Bit = 1,則 Hit
-
否則 Miss,需要替換策略
-
?地址結構
設:
-
主存地址長度 = 32 bits
-
Cache 有 2? 個集合,每個集合有
k
行(稱為 k-way set-associative)
那么地址被分為以下幾部分:
部分 | 中文 | 功能 |
---|---|---|
Tag | 標記位 | 用于與 Cache 中存儲的 tag 比較 |
Set Index | 集合索引 | 確定該塊應映射到哪個集合 |
Block Offset | 塊內偏移 | 定位塊內數據位置 |
如果 Cache 是 4-way set-associative,共有 256 sets,則需要:
-
log?(256) = 8 位用于 Set Index
-
Block Size = 64 Bytes → Block Offset = 6 位
-
剩余 32 - 6 - 8 = 18 位為 Tag
?? 替換策略
當一個 Set 中所有 Cache Line 都被占滿,需要替換一個塊,策略包括:
策略 | 中文 | 特點 |
---|---|---|
LRU (Least Recently Used) | 最近最少使用 | 最常用,也最能提高命中率 |
Random | 隨機替換 | 簡單但命中率較低 |
FIFO (First-In First-Out) | 先進先出 | 實現簡單,性能一般 |
每個集合內部相當于是一個 小型的全相聯 Cache。
示例:?
訪問示例(以地址 77 為例)
-
地址 77 → 二進制:
1001101
-
Block offset:
01
(第2個字節) -
Set index:
11
→ Set 3 -
Tag:
100
-
-
Cache 會在 Set 3 的兩個 line 中,查找是否有 tag = 100 的塊。
-
若某一行中 tag 匹配 → 命中(Hit)
-
否則 → 未命中(Miss),觸發替換策略(如 LRU)
-
?映射過程:
優點?
優點 | 說明 |
---|---|
? 更低的沖突失效(Conflict Miss) | 比 Direct-Mapped Cache 更靈活,一個 Set 內多個行減少映射沖突 |
? 接近 Fully Associative 的命中率 | 特別是當 k 比較大時 |
? 查找效率適中 | 只需比較一個 Set 中的多個行,而不是所有行(比 Fully Associative 更快) |
? 適配性強 | 可調節“k-way”來平衡速度和命中率 |
?? 與其他映射方式對比
特性 | Direct Mapping | Fully Associative | Set-Associative |
---|---|---|---|
映射方式 | 每塊 → 1 行 | 每塊 → 任意行 | 每塊 → 1 個集合中的任意行 |
沖突未命中 | 高 | 極低 | 低 |
硬件復雜度 | 最低 | 最高 | 中等 |
查找時間 | 最快 | 最慢 | 中等 |
替換策略 | 無需 | 需要 | 每個集合內部需要 |
?