在this post的“示例”部分,作者列出了所有内存组件寄存器/ L1 / L2 / RAM的延迟...我的问题是:你如何衡量(在线查找)真实内容延迟适用于任何给定的芯片?我们说
model name : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz
stepping : 13
cpu MHz : 1200.000
我也尝试过从英特尔手册中获取信息,但对于我的生活,这些事情是巨大的,我不知道在哪里寻找信息。
感谢。
答案 0 :(得分:11)
一个简单的google query(“英特尔CPU缓存延迟”)揭示了英特尔的一项有趣的研究:Measuring Cache and Memory Latency and CPU to Memory Bandwidth。在本文中,作者使用LMbench来执行测量。
如何进行测量
使用名为“lat_mem_rd”的可执行二进制文件 在实用程序的目录的“bin”文件夹中找到。接下来,使用以下内容 命令行:
taskset 0x1 ./lat_mem_rd –N [x] –P [y] [depth] [stride]
其中[x]等于在报告之前运行流程的次数 潜伏。通常将其设置为“1”足以进行精确测量。 对于'-P'选项,[y]等于调用运行的进程数 基准。对此的建议总是“1”。这就足够了 仅使用一个处理核心或线程来衡量访问延迟。该 [depth]规范指示实用程序将在多大程度上测量内存。 为了确保准确的测量,请指定将要进行的数量 远远超出缓存,因此它不会考虑延迟 测量
了解结果
由于L1和L2缓存延迟与核心时钟相关,因此CPU频率在如何发挥作用 快速内存访问实时发生。这意味着核心数量 时钟保持不变,与核心频率无关。对于可比的 结果,最好将LMBench给出的延迟从纳秒转换 进入CPU时钟。为此,请将延迟乘以处理器频率。
Time(seconds) * Frequency(Hz) = Clocks of latency
因此,如果2.4 GHz处理器需要17 ns才能访问某个级别 缓存,转换为:
17 x 10-18 seconds * 2400000000 Hz = 17 ns * 2.4 GHz ≈ 41 Clocks
答案 1 :(得分:1)
要进行测量,您需要尽早在裸机上进行测量,因为您不需要任何干扰(即时钟频率变化,总线争用等)。
你必须在x86上编写一些汇编程序代码......步骤如下:
完成所有操作后,您只需要开始计划并使用缓存。请记住,缓存大小和体系结构在这里发挥着重要作用,因此您需要根据相关主题定制测量值。此外,您可能希望使用预取来使填充更容易。
答案 2 :(得分:1)
快速解决方案,您可以破解以满足您的需求: http://code.google.com/p/mem-latency/
它通过加载不同大小的链表来衡量延迟。