3

我试图了解 lmbench 如何测量 L1、L2 和主内存的延迟。

lat_mem_rd的手册页提到了该方法,但我不清楚:

基准测试作为两个嵌套循环运行。外环是步幅大小。内部循环是数组大小。对于每个数组大小,基准创建一个指针环,指向前一个步长。遍历数组由

p = (char **)*p;

在 for 循环中(for 循环的开销并不重要;循环是展开的循环 1000 负载长)。循环在一百万次加载后停止。

您如何“创建一个指向向前迈出一大步的指针环”?这是否意味着如果步幅大小为 128 字节,您将需要创建一个链表,其中每个节点与前一个节点之间的距离正好为 128 字节?malloc 只是返回一些随机的空闲内存,所以我看不出这在 C 中是如何实现的。在这段代码中,我总是会遇到分段错误。(测试过了,p 应该用什么来初始化?)

SO( link )上有一个类似的线程,第一个答案讨论了这个,但它没有讨论如何将跨步方法与链表一起使用。我还查看了源代码本身(lat_mem_rd.c),但也无法理解这一点。

任何帮助表示赞赏。

4

1 回答 1

1

You can allocate large chunk of memory and then arrange elements of the linked list within allocated block on any boundary you want.

于 2013-11-11T05:41:44.703 回答