完全重写/更新为了清晰(和你的理智,它的长期太长)...(旧帖子)
对于赋值,我需要找到每个缓存的级别(L1,L2,...)和大小.给出提示和我到目前为止所发现的内容:我认为这个想法是创建不同大小的数组并阅读它们.计时这些操作:
sizes = [1k, 4k, 256K, ...]
foreach size in sizes
create array of `size`
start timer
for i = 0 to n // just keep accessing array
arr[(i * 16) % arr.length]++ // i * 16 supposed to modify every cache line ... see link
record/print time
Run Code Online (Sandbox Code Playgroud)
更新(9月28日下午6:57 UTC + 8)
另见完整来源
好了,现在按照@ mah的建议,我可能已经修复了SNR比率问题......还找到了一种计算代码的方法(wall_clock_time来自实验室示例代码)
但是,我似乎得到了不正确的结果:我在英特尔酷睿i3 2100上:[ SPECS ]
我得到的结果,在图表中:
lengthMod:1KB到512K

第一峰的基数是32K ......合理......第二个是384K ......为什么?我期待256?
lengthMod:512k到4MB

那为什么这个范围会变得一团糟? …