緩存miss了,傳統(tǒng)做法是等整個64字節(jié)塊從內(nèi)存回來再交給CPU。但CPU可能只需要其中4字節(jié)。關(guān)鍵字優(yōu)先(Critical Word First)和提前重啟動(Early Restart)就是用來解決這個問題的——讓CPU早點(diǎn)拿到急需的數(shù)據(jù),剩下的慢慢傳。
1. 傳統(tǒng)加載的問題
假設(shè)L1緩存miss,需要從DDR4內(nèi)存加載一個64字節(jié)塊:
- 內(nèi)存延遲:50ns
- 內(nèi)存帶寬:20GB/s
- 加載64字節(jié)理論上只需要3ns,但延遲是50ns
傳統(tǒng)做法:等50ns,64字節(jié)全到了,再交給CPU。CPU在這50ns里完全停頓。
實(shí)際上,DDR內(nèi)存是burst傳輸?shù)摹R粋€64字節(jié)塊需要8個burst(每個burst 8字節(jié)),按順序傳輸。如果CPU要的是第7個burst,也得等前面6個傳完。
2. 兩種優(yōu)化策略
2.1 提前重啟動(Early Restart)
核心思想:不按順序等,只要請求的那個字到了,立刻給CPU,讓它繼續(xù)執(zhí)行,剩下的字后臺慢慢傳。
工作流程:
- 內(nèi)存按正常順序傳burst 0,1,2,3,4,5,6,7
- 假設(shè)CPU請求的是burst 3
- burst 3到達(dá)時,立即送給CPU,CPU流水線重啟
- burst 4,5,6,7繼續(xù)傳,填充緩存
適用場景:順序訪問。因?yàn)榭臻g局部性,CPU很可能接下來要burst 4,5,6,7,這些已經(jīng)在路上了。
局限性:如果CPU接下來要的是burst 0(回跳),還得等,因?yàn)橐呀?jīng)傳過了。
2.2 關(guān)鍵字優(yōu)先(Critical Word First)
核心思想:改變傳輸順序,先傳CPU要的那個字,再傳其他的。
工作流程:
- CPU請求burst 3
- 內(nèi)存控制器調(diào)整順序:先傳burst 3
- burst 3到達(dá),送給CPU,CPU流水線重啟
- 后臺繼續(xù)傳burst 0,1,2,4,5,6,7
適用場景:隨機(jī)訪問。比如指針追逐、分支跳轉(zhuǎn)目標(biāo),不知道接下來要哪個字。
關(guān)鍵區(qū)別:
- Early Restart:不改變傳輸順序,只改變響應(yīng)時機(jī)
- Critical Word First:改變傳輸順序,優(yōu)先傳關(guān)鍵字
3. 效果分析
3.1 理論收益
假設(shè):
- 塊大?。?4字節(jié)(8個burst,每個8字節(jié))
- 內(nèi)存延遲:50ns(從請求到第一個burst到達(dá))
- burst間隔:6ns(50ns/8個burst的傳輸時間)
| 策略 | 等待時間 | 節(jié)省 |
|---|---|---|
| 傳統(tǒng)方式 | 50ns | 0% |
| Early Restart(關(guān)鍵字在中間) | ~25ns | 50% |
| Critical Word First(關(guān)鍵字優(yōu)先) | ~12ns | 75% |
注意:Critical Word First不是0等待,因?yàn)閮?nèi)存控制器需要時間處理請求、調(diào)整順序。
3.2 實(shí)際限制
Early Restart的問題:
Hennessy & Patterson的經(jīng)典教材[1][2]指出:
"Spatial locality => tend to want next sequential word, so first access to a block is normally to 1st word, but next is to 2nd word, which may stall again and so on, so benefit from early restart alone is not clear"
翻譯:空間局部性導(dǎo)致第一次訪問通常是第0個字,但第二次訪問第1個字時,如果Early Restart已經(jīng)傳過第1個字了,CPU還是得等。所以Early Restart單獨(dú)使用的效果不明確。
Critical Word First的問題:
- 內(nèi)存控制器復(fù)雜度:需要支持亂序burst傳輸
- DDR協(xié)議限制:DDR的burst傳輸有固定模式(如sequential或interleaved),完全亂序可能不支持
- 塊大小限制:塊越大(128B),收益越高;塊?。?2B),節(jié)省的時間可能被控制邏輯開銷抵消
4. 與非阻塞緩存的協(xié)同
Critical Word First/Early Restart和Non-blocking Cache是絕配。
Non-blocking Cache:允許miss時繼續(xù)處理其他請求
Critical Word First:讓CPU盡快拿到數(shù)據(jù),繼續(xù)執(zhí)行
兩者結(jié)合:
- Load A miss,請求Critical Word
- CPU繼續(xù)執(zhí)行,發(fā)射Load B
- Load B hit(如果數(shù)據(jù)在緩存)
- Critical Word到達(dá),CPU繼續(xù)Load A的依賴指令
- 同時,緩存后臺加載剩余塊
這種重疊可以顯著降低effective miss penalty。
5. 總結(jié)
| 策略 | 改變傳輸順序 | 適用場景 | 實(shí)現(xiàn)復(fù)雜度 | 實(shí)際收益 |
|---|---|---|---|---|
| Early Restart | 否 | 順序訪問 | 低 | 中等(空間局部性限制) |
| Critical Word First | 是 | 隨機(jī)訪問 | 中 | 高(大塊緩存) |
關(guān)鍵認(rèn)知:
- 塊越大(≥64B),這兩種技術(shù)的收益越高
- Early Restart單獨(dú)使用效果有限,因?yàn)榭臻g局部性導(dǎo)致下一次訪問很可能已經(jīng)傳過了
- Critical Word First需要內(nèi)存控制器支持,實(shí)現(xiàn)更復(fù)雜
- 現(xiàn)代處理器主要依賴硬件預(yù)取和Non-blocking Cache來隱藏延遲,這兩種技術(shù)作為輔助
理解這些,做緩存設(shè)計(jì)時就能在復(fù)雜度、功耗、性能間找到平衡。