2

多核處理器的MESI協議的細節對我來說非常重要,但我無法在任何地方找到它們。即使http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf不包含足夠的細節。例如:假設一個私有的L1和共享的二級緩存。如果一條線的狀態在L1中是排他的,那它是否也是L2的獨佔(或者是無效的,因爲只有一個緩存可能是一行獨佔的狀態)?顯然,如果另一個內核寫入此行,則L1中以前專用行的狀態變爲無效,但是如何更改L2緩存行的狀態?如果L1中的修改過的行被另一個內核讀取,將會是該行共享的新狀態,並通過L2高速緩存寫回到主內存,還是保持在L2中修改?等等。有關多核處理器的MESI協議的詳細信息

+0

我有類似的問題。我似乎無法找到詳細信息。 – atoMerz

+0

與可接受的答案可以找到類似的問題[Here](http://stackoverflow.com/a/8006202/403279) –

回答

0

我找到了this。它可能有幫助。
第三條評論here也可能有用。

1

您找不到這些答案的原因是因爲傳統協議沒有爲分層高速緩存體系結構定義,因此MESI協議本身並未定義當您擁有L1和L2高速緩存時會發生什麼情況。它取決於其他三個系統屬性。

如果L2被設計爲不包含L1(即保證L2和L1永遠不會有共同的緩存行),那麼L1中的任何行都將是無效狀態(基本上不存在) L2。

如果L2包含L1,即L1中的每一行也必須在L2中具有條目,則L2中的條目將包含描述符,該描述符指出哪一個L1高速緩存具有處於E狀態的行。

無論是否值被寫到L2或內存上給E或W階段讀取決於你的系統是否支持高速緩存到緩存傳輸與否。在過去,當每個芯片都是單核時,核心到核心的通信與讀寫內存一樣昂貴,系統會將數據寫入內存並使其他處理器讀取它(這使得它們不支持緩存到緩存傳輸)。在多內核中,通過內存進行通話相比與片上其他內核而言是非常昂貴的,因此幾乎所有的多核芯片都支持緩存到緩存傳輸。因此,從E或W階段的讀取不通過寫入存儲器來提供服務。

我希望這會有所幫助。

相關問題