記憶體屏障和CPU快取

2021-10-11 02:29:24 字數 843 閱讀 6884

為了提高程式執行的效能,現代cpu在很多方面對程式進行了優化。例如:cpu快取記憶體。盡可能地避免處理器訪問主記憶體的時間開銷,處理器大多會利用快取(cache)以提高效能。

一、cpu的快取分為**快取,l1-l3

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

二、快取同步協議

多cpu讀取同樣的資料進行快取,進行不同的運算之後,最終寫入主記憶體需要有乙個規則,規定在這種快取記憶體回寫的場景下,如何保證資料的一致性和正確性。

mesi協議,規定每條快取有乙個狀態位,同時定義了四個狀態:

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

多處理器時,單個cpu對快取中的資料進行了改動,需要通知給其他cpu。也就是說,cpu處理要控制自己的讀寫操作,還要監聽其他cpu發出的通知,從而保證最終一致

三、cpu效能優化手段

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

as-if-serial語義僅在單cpu單執行緒的情況下能保證結果正確。多核多執行緒中,指令邏輯無法分辨因果關聯,可能出現亂序執行,導致程式執行結果錯誤。

四、記憶體屏障

不論是快取同步還是指令重排,都是執行緒不安全的。

處理器提供了兩個記憶體屏障指令(memory barrier)用於解決快取同步和指令重排的問題。

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快取...