Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 内存层次结构延迟信息_Memory_Latency - Fatal编程技术网

Memory 内存层次结构延迟信息

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缓存延迟”)展示了一项

在的“示例”部分中,作者列出了寄存器/L1/L2/RAM中所有内存组件的延迟。。。我的问题是:如何测量(在线查找)任何给定芯片的实际延迟?比方说

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状态/以前执行的指令)