CPU快取什麼時候會刷新回主存?

CPU快取什麼時候會刷新回主存?

如果我有一個有兩個核心的CPU,每個核心都有自己的L1緩存,Core1和Core2是否有可能同時緩存同一部分記憶體?
如果可以的話,如果Core1和Core2都修改了cache中的值,那麼主存的值會是多少?

答案1

如果我有一個有兩個核心的CPU,每個核心都有自己的L1緩存,Core1和Core2是否有可能同時緩存同一部分記憶體?

是的。如果不是這樣的話,性能將會很糟糕。考慮兩個執行緒運行相同的程式碼。您希望程式碼位於兩個 L1 快取中。

如果可以的話,如果Core1和Core2都在快取中編輯了它們的值,主存的值將是多少?

舊值將位於主記憶體中,這並不重要,因為兩個 CPU 都不會讀取它。在從快取中彈出修改後的值之前,必須將其寫入記憶體。通常是一些變體MESI協定用來。在 MESI 的傳統實作中,如果某個值在一個快取中被修改,則該值根本不可能出現在同一層級的任何其他快取中。

答案2

是的,這種情況(有兩個快取快取相同的記憶體區域)是可能發生的,實際上這是一個在實踐中經常發生的問題。解決方案有多種,例如:

  • 兩個快取可以進行通訊以確保它們不會不一致
  • 你可以有某種監督者來監視所有快取並相應地更新它們
  • 每個處理器監視它已快取的記憶體區域,當它檢測到寫入時,它會丟棄其(現在無效)緩存

這個問題被稱為快取一致性。這維基百科關於該主題的文章對問題和可能的解決方案有很好的概述。

答案3

要回答標題中的問題,這取決於快取協議是什麼。如果是回寫式,只有當快取控制器別無選擇只能在已經佔用的空間中放入新的快取區塊時,快取才會刷新回主記憶體。先前佔用該空間的區塊將被刪除,並將其值寫回主記憶體。

另一種協議是直寫式的。在這種情況下,每當在第 n 級上寫入快取區塊時,第 (n+1) 級上的對應區塊就會更新。 (這在概念上類似於在下面用複寫紙填寫表格;您在上面寫的任何內容都會複製到下面的紙上。)這會比較慢,因為它顯然涉及更多的寫入操作,但緩存之間的值更加一致。在回寫方案中,只有最高等級的快取才會有特定記憶體區塊的最新值。

相關內容