簡體   English   中英

每個內存訪問Xeon帶入緩存的字節數是多少?

[英]How many bytes does a Xeon bring into the cache per memory access?

我正在開發一個用C ++編寫的系統,在Linux上的Xeon上運行,需要盡可能快地運行。 在RAM中保存的大型數據結構(基本上是結構數組)超過10 GB,並且需要定期訪問它的元素。 我想修改數據結構以盡可能地使用系統的緩存機制。

目前,訪問主要在整個結構中隨機進行,每次讀取1-4個32位的整數。 在同一個地方發生另一次讀取需要很長時間,因此緩存沒有任何好處。

現在我知道當你從RAM中的隨機位置讀取一個字節時,不僅僅是那個字節被帶入緩存。 我的問題是引入了多少字節? 是16,32,64,4096嗎? 這被稱為緩存線嗎?

我希望重新設計數據結構,以最大限度地減少隨機RAM訪問,並使用緩存而不是緩存。 知道在隨機訪問中將多少字節拉入緩存將告知我所做的設計選擇。

更新(2014年10月):在我提出上述問題后不久,該項目被擱置。 它已經恢復並基於下面答案中的建議,我進行了一些圍繞RAM訪問的實驗,因為似乎TLB捶打可能正在發生。 我修改了程序以運行大頁面(2MB而不是標准的4KB),觀察到一個小的加速,大約2.5%。 我找到了關於在這里這里設置大頁面的很好的信息。

今天的CPU以(通常)64字節的塊(稱為緩存行)獲取內存。 當您讀取特定的內存位置時,整個緩存行將從主內存中提取到緩存中。

更多信息: http//igoro.com/archive/gallery-of-processor-cache-effects/

任何當前Xeon處理器的高速緩存行為64字節。 您可能想要考慮的另一件事是TLB。 如果你真的在10GB內存中進行隨機訪問,那么你很可能會有很多TLB未命中,這可能與緩存未命中一樣昂貴。 您可以使用大頁面進行解決,但這是需要牢記的。

舊的SO問題有一些可能對您有用的信息(特別是第一個答案在哪里尋找Linux CPU信息 - 響應者沒有提到正確的行大小,但在關聯性之上的'其他信息'等)。 問題是x86,但答案更為一般。 值得一看。

記錄了Intel x86處理器的L1內存緩存在哪里?

你可能想要訪問http://agner.org/optimize/並獲取那里可用的優化PDF - 那里有很多好的(低級)信息。 非常注重匯編語言水平,但也有為C / C ++程序員學習的經驗教訓。

第3卷,“英特爾,AMD和威盛CPU的微架構”應引起關注:-)

關於組織數據結構以便從GNU的libc維護者考慮緩存和RAM層次結構的好(長篇)文章: https//lwn.net/Articles/250967/ (完整的PDF文件: http//www.akkadia.org/drepper /cpumemory.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM