【发布时间】:2018-03-22 19:02:16
【问题描述】:
我在某处读到,要找到内存的实际延迟,您可以使用以下规则:
1/((RAMspeed/2)/1000) x CL = True Latency in nanoseconds
即对于具有 400Mhz 时钟速度的 DDR1,除以 2 以获得 FSB 速度或在这种情况下为 200Mhz 的实际总线速度对我来说是否合乎逻辑。所以上面的规则似乎对 DDR1 是正确的。
另一方面,根据文章“每个程序员应该了解的内存”,DDR2 的总线频率也比上一代 DDR1 增加了一倍(即每个时钟周期 4 位) .
因此,对于具有 800Mhz 时钟速度的 DDR2,要找到“真实延迟”,上述规则应相应更改为
1/((RAMspeed/4)/1000) x CL = True Latency in nanoseconds
正确吗?因为在所有情况下,我读到正确的方法是使用<strong>RAMspeed/2</strong>,无论是 DDR、DDR2、DDR3 还是 DDR4。
获取真实延迟的正确方法是什么?
【问题讨论】:
-
最好发给Quora。
-
这个问题的灵感来自文章“每个程序员应该知道的关于内存的知识”,它肯定与程序员有关
-
没有通用公式。记忆远比一篇简单的文章所能处理的要复杂得多。有 L1、L2、L3 缓存,NUMA 对某些类型的多核系统有影响,还有多通道内存等。在过去,我们只有一个 CPU,它直接连接到核心的系统内存时钟速度,1:1,但那些日子早已一去不复返了。
-
我不是在开玩笑。没有简单的公式。单核机器实际上已经不存在了,而在多核机器中,尤其是那些有四个或更多的机器,内存架构非常复杂。从英特尔到 AMD 到 ARM,它也有很大不同。延迟和时钟速度只是松散相关。比 DDR4 内存“慢”的 DDR3 内存实际上具有更快的首字节响应时间,但带宽更低。
-
DDR SDRAM 延迟比您的公式表明的变化更大。您在已经打开的 DRAM 页面中获得更低的延迟(与 4k 虚拟内存页面不同或大小不同),因此即使在 16kiB 左右的范围内,访问的局部性也很重要,而不仅仅是在相同的高速缓存行或相同的 4k 页(TLB 条目)。 (正如我在答案中评论的那样,这只是谈论内存控制器和 DRAM 之间的延迟,忽略 CPU 内部的执行核心和内存控制器之间的延迟,尤其是套接字之间的延迟。这是不可忽略的。
标签: performance benchmarking frequency ram latency