2013-08-01 66 views
4

當髒高速緩存行被刷新(由於任何原因)時,是將整個高速緩存行寫入內存還是CPU跟蹤哪些單詞被寫入並減少了內存寫入次數?高速緩存行刷新是否將整行寫入內存?

如果這個架構之間是不同的,我在知道這對Blackfin處理器主要有興趣,但它會很高興聽到X86,ARM等做法...

回答

2

通常,如果您有寫入緩衝區,它將通過寫入緩衝區(整個緩存線)進行刷新。然後寫入緩衝區在某個時刻完成對RAM的寫入。我還沒有聽說過一個高速緩存,用於保存一行中的每個項目,哪些部分是髒的或者不是,這就是爲什麼你有一個高速緩存行。所以對於我所聽說的情況,整條線路都熄滅了。另一點是,例如高速緩存DDR背面的慢速存儲器通過某些固定寬度,每次32位一次64位,每次128位,或者每個部分被訪問並不罕見在那個寬度和有多個部分。這樣的事情,所以要避免讀取 - 修改 - 寫你想寫在完整的內存寬度大小。高速緩存行肯定是其倍數,並且不會寫入的機會就在那裏。另外,如果在該RAM上有ecc,則需要一次寫入整個ecc行以避免讀取 - 修改寫入。

您需要在高速緩存行中爲每個可寫入項目設置一個髒位,以便將髒位存儲bu乘以一定的數量,這可能會或可能不會對大小或成本產生實際影響等。在每個事務的ram端是一個開銷,並且執行多字事務可能會更便宜,而不是甚至兩個單獨的事務,所以此方案可能會創建性能下降而不是提升(寫入緩衝區內的相同問題,而不是一個事務與一個起始地址和長度,現在多個交易)。

對於可能導致或者不會導致增益的事情來說,這看起來像是很多工作。如果你找到一個請在這裏發佈。

2

我除塵過我cobwebby電腦來自15年前的課程的架構知識 - 如果我完全錯誤,請善待。

我似乎記得x86,MIPS和摩托羅拉,整個系列都被寫入。這是因爲高速緩存線與總線寬度相同(除非是非常奇怪的情況,例如發黴的舊386-SX線是32位架構,帶有16位總線),所以嘗試沒有任何意義做字面優化,整條線將被寫入無論如何。

我無法想象任何類型的硬件架構都可以做任何不同的事情,但過去我知道這是錯誤的。