2010-04-05 48 views
14

如何以編程方式測量(不查詢操作系統)L1和L2高速緩存(數據高速緩存)的關聯大小和順序?測量L1和L2高速緩存的大小和順序

假設有關係統:

  • 它L1和L2高速緩衝存儲器(可以是L3也可以是高速緩存共享),
  • 它可以具有硬件預提取單元(就像P4 +),
  • 它有一個穩定的clocksource(ticktime或gettimeofday的好HPET)。

對操作系統(可以是Linux,Windows或其他)沒有任何假設,我們也不能使用POSIX查詢。

語言是C,並且編譯器優化可能被禁用。

+3

非常有趣的問題。 +1 – 2010-04-05 03:26:00

+1

有一個庫可以在構建時測量緩存大小。它叫ATLAS http://math-atlas.sourceforge.net/我想你也可以在那裏找到一些信息。 – 2010-04-05 03:26:52

+0

處理器識別與查找? (或者是作弊?) – 2010-04-05 03:51:18

回答

6

我認爲你所需要做的就是重複訪問內存不斷增加的塊(以確定緩存大小),我認爲你可以改變步幅來確定關聯性。

所以你會開始嘗試訪問非常短的內存段,並保持倍增的大小,直到訪問速度減慢。每次訪問速度變慢時,都會確定另一級緩存的大小。

+2

但我怎樣才能打開硬件預取,這會掩蓋一些尺寸? – osgx 2010-04-05 11:33:22

1

您可能會發現STREAM benchmark有用或有趣或兩者兼而有之。

+0

馬克,請看看http://stackoverflow.com/questions/2517694/can-the-stream-and-gups-single-cpu-benchmark-use-non-local-memory-in-numa-machi – osgx 2010-04-05 17:02:42

1

問題已經過時了一點,但答案是here

+0

只有很好的插圖,但不是解決方案。另外,我不明白,如何從他的圖表中獲得路數。 – osgx 2010-08-17 15:23:02

+2

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – 2011-10-27 14:58:02