直接映射、組相聯、全相聯的差異:快取架構比較
快取必須決定記憶體的每個區塊可以放在哪裡。直接映射快取中,每個區塊只能放在一個快取列,簡單而快速,但當兩個區塊爭用同一列時就會發生衝突。全相聯快取中,區塊可以放在任何地方,衝突消失,但需要與所有快取列比較。組相聯是折衷方案,可放在一個組內的數個路(way)之中的任一個。大部分CPU的快取是組相聯。
| 項目 | 直接映射 | 組相聯 | 全相聯 |
|---|---|---|---|
| 區塊可放置的位置 | 由索引位元決定的1個快取列 | 一個組內的路(例如4個或8個)中的任一個 | 快取內的任何快取列 |
| 一次存取的標籤比較 | 1次 | 每個路各1次(例如8次) | 並行比較所有快取列 |
| 命中時間 | 最快 | 略慢 | 最慢 |
| 硬體成本與功耗 | 最小 | 中等 | 最大。每個快取列都需要比較器 |
| 衝突未命中 | 最多 | 隨路數增加而減少 | 無。只剩強制未命中與容量未命中 |
| 替換策略 | 不需要。只有一個選擇 | 在組內選擇(LRU或其近似) | 在所有快取列中選擇 |
| 主要用途 | 小而簡單的快取、部分微控制器 | 大部分CPU的L1、L2、L3快取。多為4〜16路 | TLB或犧牲快取等小型結構 |
數值為具代表性的大致參考值,會因世代或產品而異。