CPU快取和記憶體屏障

2022-04-28 03:43:33 字數 1500 閱讀 9407

ll cache(一級快取)是cpu第一層快取記憶體,分為資料快取和指令快取。一般伺服器cpu的l1快取的容量通常在32—4096kb。

l2由於ll級快取記憶體容量的限制,為了再次提高cpu的運算速度,在cpu外部放置一高速儲存器,即二級快取。

l3現在的都是內建的。而它的實際作用即是,l3快取的應用可以進一步降低記憶體延遲,同時提公升大資料量計算時處理器的效能。具有較大l3快取的處理器提供更有效的檔案系統快取行為及較短訊息和處理器佇列長度。一般是多核共享乙個l3快取!

cpu在讀取資料時,先在l1中尋找,再從l2尋找,再從l3尋找,然後是記憶體,再後是外儲存器。

多cpu讀取同樣的資料進行快取,進行不同運算之後,最終寫入主記憶體以哪個cpu為準?

在這種快取記憶體回寫的場景下,有乙個快取一致性協議多數cpu廠商對它進行了實現。mesi協議,它規定每條快取有個狀態位,同時定義了下面四個狀態:

多處理器時,單個cpu對快取中資料進行了改動,需要通知給其他cpu。

也就是意味著,cpu處理要控制自己的讀寫操作,還要監聽其他cpu發出的通知,從而保證最終—致。

指令重排的場景:當cpu寫快取時發現快取區塊正被其他cpu占用,為了提高cpu處理效能,可能將後面的讀快取命令優先執行。

並非隨便重排,需要遵守as-if-serial語義:

as-if-serial語義的意思指:不管怎麼重排序(編譯器和處理器為了提高並行度),(單執行緒)程式的執行結果不能被改變。編譯器,runtime和處理器都必須遵守as-if-serial語義。

也就是說:編譯器和處理器不會對存在資料依賴關係的操作做重排序。

快取記憶體的兩個問題:

1、cpu快取記憶體下有乙個問題:

快取中的資料與主記憶體的資料並不是實時同步的,各cpu (或cpu核心)間快取的資料也不是實時同步。在同乙個時間點,各cpu所看到同一記憶體位址的資料的值可能是不一致的。

2、cpu執行指令重排序優化下有乙個問題:

雖然遵守了as-if-serial語義,單僅在單cpu自己執行的情況下能保證結果正確。

多核多執行緒中,指令邏輯無法分辨因果關聯,可能出現亂序執行,導致程式執行結果錯誤。

處理器提供了兩個記憶體屏障指令(memory barrier)用於解決上述兩個問題:

寫記憶體屏障(store memory barrier)︰在指令後插入store barrier,能讓寫入快取中的最新資料更新寫入主記憶體,讓其他執行緒可見。

強制寫入主記憶體,這種顯示呼叫,cpu就不會因為效能考慮而去對指令重排。

讀記憶體屏障(load memory barrier):在指令前插入load barrier,可以讓快取記憶體中的資料失效,強制從新從主記憶體載入資料。

強制讀取主記憶體內容,讓cpu快取與主記憶體保持一致,避免了快取導致的一致性問題

CPU快取和記憶體屏障

cpu效能優化的手段 快取 為了提供程式執行的效能,現代cpu在很多方面對程式進行了優化。例如cpu快取記憶體。盡可能避免處理器訪問主記憶體的時間開銷,處理器大多數會利用快取以提高效能。cpu快取分為3級快取,l1,l2,l3,l1的訪問速度最快,然後遞減。如果機器是多核,則每個cpu對應相對的l1...

CPU快取和記憶體屏障

為了提高程式的執行效能,現代cpu在很多方面對程式進行了優化 例如 cpu快取記憶體,盡可能的避免處理器訪問主記憶體的時間開銷,處理器大多會利用快取以提高效能 l1 cache 一級快取 是cpu第一層快取記憶體,分為資料快取和指令快取,一般伺服器cpu的l1快取的容量通常在32 4096kb l2...

CPU快取和記憶體屏障

cpu效能優化手段 執行時指令重排 為了提高程式的執行效能,現代cpu在很多方面對程式進行了優化 例如 cpu快取記憶體,盡可能的避免處理器訪問主記憶體的時間開銷,處理器大多會利用快取以提高效能 l1 cache 一級快取 是cpu第一層快取記憶體,分為資料快取和指令快取,一般伺服器cpu的l1快取...