我有一個連續的內存 1024緩衝區,每個緩衝區大小2K字節。我使用鏈表來保存可用緩衝區的記錄(這裏的緩衝區可以被認爲是由生產者和消費者使用)。一些操作之後,鏈接列表中的緩衝區順序變得隨機。現代計算機緩存爲當地支持的相鄰數據大小
現代計算機體系結構主張緊湊的數據,地方很多。它在需要訪問位置時緩存相鄰數據。我的計算機的緩存行是64(從64K更正)字節。
問題1.對我來說,由於我的訪問模式是隨機的,是否有很多緩存未命中?
問題2.現代計算機緩存的鄰近數據的大小是多少?我想如果你訪問一個整數數組中的位置,它會緩存相鄰的整數。但是我的單元數據(2K)比int(4)大得多。所以,我不確定有多少鄰居會被緩存。
L2高速緩存通常小於2 MiB(例如,第2代至第4代Intel Core處理器具有256 KiB L2)。值得一提的是,64字節緩存線是對齊的。此外,除了後面的解釋之外,在第一個要點中提到硬件預取(例如,「好的,特別是對於硬件預取」)可能是一種改進。 – 2014-11-05 10:25:57
@ PaulA.Clayton感謝您的意見。我會很好地調整帖子。關於L2尺寸,這是有爭議的。在L2是最後一級的移動SoC上,它通常更大。ARM和Intel Atom可以輕鬆升級到2MB。你也有L3,你是對的。 – VAndrei 2014-11-05 10:32:38
可悲的是,自從我提出這個帖子以來,我無法用upvote獎勵你的編輯。 (是的,當L2是有限責任公司時,它往往更大,而AMD的FX處理器有2MiB L2加L3,我確實寫過「經常」。) – 2014-11-05 14:12:11