如何通過測試寫入來緩存緩存的類型(回寫/通過)來確定?我可以使用與我一樣的方法通過記錄修改緩存的時間來確定緩存的級別和大小,但是我需要與某些內容進行比較。例如。如果時間明顯短於已知的L1寫入緩存,我可以說它回寫。但是,我需要一個基線來比較,而不是我?確定緩存是回寫還是通過
的主要思想是:
- 如果寫通過寫
x
VSx * 100
時間拍攝的,時間大約是100倍 - 如果回寫,時間會差不多?
所以環路WRITES_BASE
次與時間爲各自的時代WRITES
時間減去執行循環只(無存儲器存取),並比較它們的時間......這給我的印象是我的酷睿i3 2100已全部通過寫緩存...
16, 0.03, 1.04 (31.28)
128, 0.07, 2.31 (31.78)
2048, 0.10, 3.19 (31.74)
上述數值是:test size (KB), time for WRITES_BASE, time for WRITES (t(WRITES)/t(WRITES_BASE))
我猜我的實驗問題我還沒有消除,我運行WRITES
次以上的時間差。 ..
UPDATE
我注意到一個奇異之處,如果我把我的WRITES = 64 * WRITES_BASE
,那麼如果我有我的WRITES_BASE = 4 million
。
16, 0.01, 0.13 (17.16)
128, 0.01, 0.29 (31.60)
2048, 0.01, 0.41 (30.53)
如果我增加WRITES_BASE = 16 million
16, 0.02, 0.52 (25.53)
128, 0.04, 1.16 (31.74)
2048, 0.05, 1.57 (31.89)
注意,當WRITES_BASE
越小,時間之間的差別沒有那麼大,也許是告訴我L1是回寫緩存。但是,因爲它並不總是如此,例如。當我增加WRITES_BASE時,我想知道我是否有一些邏輯錯誤?
嗯...「寫入各種大小的數組」部分如何進入圖片?這是指每個緩存級別的大小嗎? –
那麼,如果你寫入的內容不止適合緩存,那麼你將不得不等待回寫才能發生,對吧? – bdonlan
是的,但它會寫入另一個緩存嗎?如果是這種情況,時間增加可能是由於下一級的寫入時間較慢?在* [另一個實驗](https://github.com/jiewmeng/cs3210-assign1/blob/master/cache.cpp)**中確定緩存的級別和大小,我使用了它。 –