CPU Cache
架構(gòu)



cpu core -> l1 cache -> l2 cache -> l3 cache -> main memory
- L1緩存:幾乎所有的現(xiàn)代多核CPU都會(huì)為每個(gè)核心提供獨(dú)立的L1緩存,這是因?yàn)長(zhǎng)1緩存設(shè)計(jì)用于提供極低的訪(fǎng)問(wèn)延遲。每個(gè)核心的L1緩存通常分為兩部分:L1數(shù)據(jù)緩存(L1-D)和L1指令緩存(L1-I)。
- L2緩存:多核處理器中的L2緩存可能是每個(gè)核心獨(dú)立的,也可能是部分或完全共享的。這取決于具體的CPU設(shè)計(jì)和制造商。共享L2緩存可以提高多核心之間的數(shù)據(jù)共享效率,但也可能增加核心之間的競(jìng)爭(zhēng)。
- L3緩存:許多現(xiàn)代多核處理器都采用了共享的L3緩存,它是位于CPU核心和主內(nèi)存之間的最后一級(jí)緩存。共享L3緩存可以大幅度提高不同核心之間的數(shù)據(jù)共享效率和降低訪(fǎng)問(wèn)主內(nèi)存的延遲。所有核心都可以訪(fǎng)問(wèn)這個(gè)緩存層次來(lái)檢索數(shù)據(jù)。
緩存操作
- 一個(gè)臟緩存線(xiàn)不存在于任何其他處理器的緩存之中。
- 同一緩存線(xiàn)中的干凈拷貝可以駐留在任意多個(gè)其他緩存之中
BTW, 這也會(huì)直接影響到程序的設(shè)計(jì), 例如經(jīng)典的 volatile 關(guān)鍵字, 其實(shí)就會(huì)涉及到cpu cache的使用位置, 即此變量每次都從內(nèi)存中獲取, 而不是直接使用cache中的數(shù)據(jù).
緩存寫(xiě)入策略
寫(xiě)通(write-through)
寫(xiě)通比較簡(jiǎn)單。當(dāng)修改緩存線(xiàn)時(shí),處理器立即將它寫(xiě)入主存。這樣可以保證主存與緩存的內(nèi)容永遠(yuǎn)保持一致。當(dāng)緩存線(xiàn)被替代時(shí),只需要簡(jiǎn)單地將它丟棄即可。這種策略很簡(jiǎn)單,但是速度比較慢。如果某個(gè)程序反復(fù)修改一個(gè)本地變量,可能導(dǎo)致 FSB 上產(chǎn)生大量數(shù)據(jù)流,而不管這個(gè)變量是不是有人在用,或者是不是短期變量.
寫(xiě)回(write-back)
寫(xiě)回比較復(fù)雜。當(dāng)修改緩存線(xiàn)時(shí),處理器不再馬上將它寫(xiě)入主存,而是打上已弄臟(dirty)的標(biāo)記。當(dāng)以后某個(gè)時(shí)間點(diǎn)緩存線(xiàn)被丟棄時(shí),這個(gè)已弄臟標(biāo)記會(huì)通知處理器把數(shù)據(jù)寫(xiě)回到主存中,而不是簡(jiǎn)單地扔掉。