Memory 内存层次结构延迟信息
在的“示例”部分中,作者列出了寄存器/L1/L2/RAM中所有内存组件的延迟。。。我的问题是:如何测量(在线查找)任何给定芯片的实际延迟?比方说Memory 内存层次结构延迟信息,memory,latency,Memory,Latency,在的“示例”部分中,作者列出了寄存器/L1/L2/RAM中所有内存组件的延迟。。。我的问题是:如何测量(在线查找)任何给定芯片的实际延迟?比方说 model name : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz stepping : 13 cpu MHz : 1200.000 我也试着从英特尔手册中挖掘信息,但对我来说,这些信息是巨大的,我不知道在哪里可以找到这些信息 谢谢。一个简单的(“英特尔cpu缓存延迟”)展示了一项
model name : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz
stepping : 13
cpu MHz : 1200.000
我也试着从英特尔手册中挖掘信息,但对我来说,这些信息是巨大的,我不知道在哪里可以找到这些信息
谢谢。一个简单的(“英特尔cpu缓存延迟”)展示了一项关于英特尔的有趣研究:。在本文中,作者使用进行测量
如何测量
使用名为“lat_mem_rd”的可执行二进制文件
在实用程序目录的“bin”文件夹中找到。接下来,使用以下命令
命令行:
taskset 0x1 ./lat_mem_rd –N [x] –P [y] [depth] [stride]
其中[x]等于报告前流程运行的次数
延迟通常,将其设置为“1”就足以进行精确测量。
对于'-P'选项,[y]等于为运行
基准。这方面的建议始终为“1”。只需
仅使用一个处理核心或线程测量访问延迟。这个
[depth]规格指示实用程序将测量的内存深度。
为确保准确测量,请指定将要测量的量
远远超出缓存,因此不会影响延迟
测量
了解结果
由于一级和二级缓存延迟与核心时钟有关,因此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
要进行测量,您需要尽早在裸机上进行,因为您不希望受到任何干扰(即时钟频率变化、总线争用等) 您将不得不编写一点汇编代码。。。在x86上,步骤如下:
- 执行序列化指令
- 读取时间戳计数器
- 执行序列化指令
- 进行内存读取
- 执行序列化指令
- 再次读取时间戳计数器
- 执行序列化指令
- 算算
一旦你完成了,你所需要的就是开始计划和使用缓存。请记住,缓存大小和体系结构在这里起着巨大的作用,因此您需要根据所讨论的主题定制度量。此外,您可能还想使用预取来简化填充过程。一个快速解决方案,您可以根据自己的需要进行修改:
它通过加载不同大小的链表来测量延迟。CPU延迟有点棘手-指令可以通过管道传输,因此有点难以测量-gmplib有一篇文章简要介绍了它。简而言之,寄存器延迟不是一件简单的事情——您可以“执行”一条指令,它看起来可能已经完成了,但在检索到结果之前,它实际上可能无法执行。智能编译器会非常努力地对指令进行排序,以利用这一点。(寄存器延迟取决于当前CPU状态/以前执行的指令)