我如何通过测试写入缓存来确定缓存类型(写回/直通)?我可以使用与确定缓存级别和大小相似的方法,通过记录修改缓存的时间来优化内容,但我需要进行比较。例如,如果时间明显短于已知的L1写入直通缓存,则可以说它是写回。但是,我需要一个基准进行比较,不是吗?
这是我在GitHub上尝试的结果
主要思想是:
- 如果是直通写入,则写入x次所需的时间与写入x * 100次的时间大约相同 - 如果是写回,则时间大约相同?
因此,将循环的时间(WRITES_BASE次与WRITES次)减去仅执行循环(没有内存访问)的时间,然后进行比较...这让我觉得我的Core i3 2100具有所有的写入直通缓存...
上述数值为:
更新:
我注意到一个奇怪的事情,如果我保持
注意,当
- 如果是直通写入,则写入x次所需的时间与写入x * 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)
上述数值为:
测试大小(KB),WRITES_BASE的时间,WRITES的时间(t(WRITES)/t(WRITES_BASE))
我猜测实验中的问题在于我没有消除运行WRITES
更多次所需的时间差异...更新:
我注意到一个奇怪的事情,如果我保持
WRITES = 64 * WRITES_BASE
,那么如果我有WRITES_BASE = 400万
。16, 0.01, 0.13 (17.16)
128, 0.01, 0.29 (31.60)
2048, 0.01, 0.41 (30.53)
如果我增加WRITES_BASE = 1600万
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
时,我想知道是否存在一些逻辑错误?