如何通过测试写入来确定缓存类型(回写/直通)?我可以使用类似的方法,通过记录修改缓存的时间来确定缓存的级别和大小,但我需要与某些东西进行比较。例如。如果时间明显短于已知的 L1 通过缓存写入,我可以说它的回写。但是,我需要一个基线来比较,不是吗?
主要思想是:
- 如果它的写入,写入时间
x
与x * 100
时间的关系大约是 100 倍 - 如果它写回,时间会差不多吗?
因此,时间循环的WRITES_BASE
时间与时间的WRITES
时间减去它们各自的仅执行循环的时间(无内存访问),并比较它们......这给我的印象是我的 Core 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
更多次的时差......
更新
我注意到一个奇怪的是,如果我保留我的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 时,我想知道我是否有一些逻辑错误?