12

接受Peter Norvig 的建议,我正在思考这个问题:

从内存中取出一个单词需要多长时间,无论有没有缓存未命中?

(假设标准硬件和架构。为了简化计算假设 1Ghz 时钟)

4

3 回答 3

18

似乎 Norvig自己回答了这个问题

execute typical instruction         1/1,000,000,000 sec = 1 nanosec
fetch from L1 cache memory          0.5 nanosec
branch misprediction                5 nanosec
fetch from L2 cache memory          7 nanosec
Mutex lock/unlock                   25 nanosec
fetch from main memory              100 nanosec
send 2K bytes over 1Gbps network    20,000 nanosec
read 1MB sequentially from memory   250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk     20,000,000 nanosec
send packet US to Europe and back   150 milliseconds = 150,000,000 nanosec 

它说“执行典型指令”= 1 ns 的部分意味着 1 GHz CPU(当然假设有效流水线)。

我不知道他从哪里获取这些信息,但我相信 Peter Norvig 是可靠的 :-)

于 2010-06-29T16:45:12.427 回答
3

公平的总结在这里,有些不精确。在编写(2 年多前)和当时的中档 PC 时,它估计:内存访问,60ns;一级缓存,10ns;L2 缓存,20-30ns(没有估计 L3 缓存访问时间)。当然,这一切都有很大的不同,具体取决于争用和访问模式(因为缓存层通常从较慢的内存中“按行”填充,如果您访问地址 X,那么地址 X+1,第二次访问可能会更快一点,因为缓存行填充由第一次访问开始)。

而且,当然,经过良好调整的高端服务器会快得多(此类机器在内存访问延迟方面的相对差异通常远大于“原始”CPU 速度)。

于 2010-06-29T16:51:49.227 回答
2

在 github.org 上发布的该表中的数据有一个很好的可视化,他们还对那里的时间值进行了“人类规模”的重新解释。

在此处输入图像描述

于 2013-03-30T20:31:44.347 回答