【論文導讀】 Complexity-Effective Multicore Coherence
阿新 • • 發佈:2020-10-19
目前通用的維護cache 一致性的就是通過MESI或者MOESI來標誌cacheline的state,在訪問相同的資料時,會進行broadcast或者使用directory的方式進行記錄。
論文采取了新的一致性策略VIPS以及改進的版本VIPS-M來進行已執行的維護,即不需要broadcast,也不需要維護directory。
- dynamic write policy 將寫回和寫直達動態結合,利用了寫直達不需要維護cache 一致性的優點
- selective flush 如果當前的core想要寫資料,但是在其他的L1中有備份,那麼不可避免的會需要snoop其他的L1 cache,那麼如何避免snoop?在當前core到達同步點(lock acquire/release, barriers, wait/signal sychronization)的時候自己主動的將所有share的data都自己flush掉,只保留private data,這樣就不需要directory記錄來實現snoop了。
VIPS : Valid/Invalid/Private/Share
VIPS-M: 額外在MSHR中增加了用於表明dirty word的標誌位,用來將false-sharing 的data進行 merge。
具體實現方法
- share的data 使用 write through的方式 考慮到write through可能會對同一個地址的資料進行重複的寫,而降低效能,因此在實現了delayed write through,在MSHR中將資料保留,進行merge
- private的data使用write back的方式
- CPU初次獲取資料時,拿到的資料就是private型別,這時候就是用write back 策略,等到其他的CPU也訪問這個資料,就像資料的型別從private轉為share。這時那些之前dirty的資料就需要write back了,不過這種情況比較少見
VIPS:
VIPS-M
對於鎖操作的支援:
普通的spin操作會持續的讀取到資料的值,但是資料的值在另一個CPU釋放鎖之前一直不滿足,paper中提到的方法則是另一個鎖就一直不會讀到資料的值,會持續的等待,這樣對效能的影響也很小。