在这篇文章的“示例”部分,作者列出了所有内存组件寄存器/L1/L2/RAM的延迟...我的问题是:如何测量(在线查找)真正的延迟任何给定的芯片?来说说吧
model name : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz
stepping : 13
cpu MHz : 1200.000
我也尝试过从英特尔手册中挖掘信息,但对于我来说,这些东西太大了,我不知道在哪里寻找信息。
一个简单的 google 查询(“英特尔 cpu 缓存延迟”)揭示了英特尔的一项有趣的研究:测量缓存和内存延迟以及 CPU 到内存带宽。在本文中,作者使用 LMbench 来执行测量。
如何进行测量
使用名为“lat_mem_rd”的可执行二进制文件 在实用程序目录的“bin”文件夹中找到。接下来,使用以下内容 命令行:
taskset 0x1 ./lat_mem_rd –N [x] –P [y] [depth] [stride]
其中 [x] 等于报告之前进程运行的次数 潜伏。通常将其设置为“1”足以进行精确测量。 对于“-P”选项,[y] 等于调用运行的进程数 基准。对此的建议始终为“1”。 仅使用一个处理核心或线程来测量访问延迟。这 [深度] 规范指示实用程序将测量内存中的深度。 为了确保准确的测量,请指定将要进行的金额 超出缓存足够远,因此不会影响延迟 测量。
了解结果
由于 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
您可以根据自己的需求进行修改的快速解决方案: http://code.google.com/p/mem-latency/
它通过加载不同大小的链表来测量延迟。
要进行测量,您需要尽早在裸机上进行测量,因为您不希望出现任何干扰(即时钟速率变化、总线争用等)。
您必须编写一些汇编代码...在 x86 上,步骤是:
完成此操作后,您所需要做的就是开始规划和使用缓存。请记住,缓存大小和架构在这里发挥着巨大作用,因此您需要根据相关主题调整测量值。另外,您可能想尝试预取以使填充更容易。