内存层次延迟信息

问题描述 投票:0回答:3

这篇文章的“示例”部分,作者列出了所有内存组件寄存器/L1/L2/RAM的延迟...我的问题是:如何测量(在线查找)真正的延迟任何给定的芯片?来说说吧

model name  : Intel(R) Core(TM)2 Duo CPU     E4600  @ 2.40GHz
stepping    : 13
cpu MHz     : 1200.000

我也尝试过从英特尔手册中挖掘信息,但对于我来说,这些东西太大了,我不知道在哪里寻找信息。

memory latency
3个回答
11
投票

一个简单的 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

2
投票

您可以根据自己的需求进行修改的快速解决方案: http://code.google.com/p/mem-latency/

它通过加载不同大小的链表来测量延迟。


1
投票

要进行测量,您需要尽早在裸机上进行测量,因为您不希望出现任何干扰(即时钟速率变化、总线争用等)。

您必须编写一些汇编代码...在 x86 上,步骤是:

  • 执行序列化指令
  • 读取时间戳计数器
  • 执行序列化指令
  • 进行记忆阅读
  • 执行序列化指令
  • 再次读取时间戳计数器
  • 执行序列化指令
  • 算一下

完成此操作后,您所需要做的就是开始规划和使用缓存。请记住,缓存大小和架构在这里发挥着巨大作用,因此您需要根据相关主题调整测量值。另外,您可能想尝试预取以使填充更容易。

© www.soinside.com 2019 - 2024. All rights reserved.