2016-11-22 68 views
0

引用Henessey和Patterson的話,「寫操作的另一個關鍵方面是發生在寫操作中,我們首先從內存中獲取塊的 字符,在塊被提取並放入我們可以覆蓋導致錯過的字進入緩存塊,我們還用 使用完整地址將字寫入主存儲器。「高速緩存中的直寫方案

我似乎沒有理解上述說法。如果我們覆蓋緩存中的單詞,這意味着之前的地址索引是匹配的,但標籤值不同。因此,處理器停止並命令從內存中讀取並寫入緩存。這顯然會取代該塊的前一個內容(以1塊包含1個字)。那爲什麼我們再把這個詞寫進記憶呢?我們不是從那裏拿走它嗎?

有人可以詳細說明以前的陳述,並在一般寫錯?寫小姐是什麼意思?

回答

2

寫入未命中與讀取未命中(您正在查找的條目不在緩存中)類似,但操作是寫入。當發生寫入錯誤時,我們可以做很少的事情。其中之一就是將miss作爲讀取未命中,我們稱之爲fetch-on-write,獲取數據並修改需要更新的單詞。你已經提到,如果要修改內存,從內存中獲取數據沒有意義。這是真實的,但是高速緩存行由多個字組成,因此,如果後續操作是讀取並且它指向獲取的高速緩存行的其中一個字,則獲取整個高速緩存行是有益的。我相信主要好處是設計的便利性。如果您按照write-allocate的路徑爲新的緩存行分配了未命中條目並且存儲了新數據。現在我們必須小心,因爲如果緩存行由多個單詞組成,比如4,那麼只有一個單詞擁有正確的數據,而其他所有單詞都是垃圾。這要求在高速緩存行中維護每個字掩碼,以指示哪個字有效以及哪個字無效。

這是Norman P. Jouppi關於writre miss政策的一篇很好的文章。 http://dl.acm.org/citation.cfm?id=165154

+0

寫通緩存通常仍舊讀取舊數據,不是嗎?您可以保留子線粒度有效/無效的信息,如您所建議並避免閱讀,但這並不常見,是嗎?要在多級緩存系統中保持緩存一致性,通常需要讀取所有權來將行置於修改狀態。 –