為了提高程式執行的效能,現代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快取...