【发布时间】:2013-11-22 19:49:12
【问题描述】:
我试图了解 lmbench 如何测量 L1、L2 和主内存的延迟。
lat_mem_rd 的man page 提到了该方法,但我不清楚:
基准测试作为两个嵌套循环运行。外环是步幅 尺寸。内部循环是数组大小。对于每个数组大小, 基准创建一个指针环,指向向前迈出一大步。 遍历数组是通过
p = (char **)*p;
在 for 循环中(for 循环的开销并不重要; loop 是一个展开的循环,长度为 1000 个负载)。执行后循环停止 一百万次加载。
你如何“创建一个指向前一步的指针环”?这是否意味着如果步幅大小为 128 字节,您将需要创建一个链表,其中每个节点与前一个节点之间的距离正好为 128 字节? malloc 只是返回一些随机的空闲内存,所以我看不出这在 C 中是如何实现的。 在这段代码中,我总是会遇到分段错误。 (测试了一下,p应该用什么初始化?)
在 SO(link) 上有一个类似的线程,第一个答案讨论了这一点,但它没有讨论如何将跨步方法与链接列表一起使用。我还查看了源代码本身(lat_mem_rd.c),但也无法从中理解。
感谢任何帮助。
【问题讨论】:
标签: c linux pointers caching benchmarking