相关疑难解决方法(0)

C程序,用于确定缓存的级别和大小

完全重写/更新为了清晰(和你的理智,它的长期太长)...(旧帖子)

对于赋值,我需要找到每个缓存的级别(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 ]

  • L1:2 x 32K
  • L2:2 x 256K
  • L3:3MB

我得到的结果,在图表中:

lengthMod:1KB到512K

在此输入图像描述

第一峰的基数是32K ......合理......第二个是384K ......为什么?我期待256?

lengthMod:512k到4MB

在此输入图像描述

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

c caching

30
推荐指数
2
解决办法
3万
查看次数

标签 统计

c ×1

caching ×1