从内存中获取一个字需要多长时间?

时间:2010-06-29 16:39:39

标签: architecture hardware computer-architecture

考虑Peter Norvig's advice,我正在思考这个问题:

  

在有和没有缓存未命中的情况下,从内存中获取一个字需要多长时间?

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

3 个答案:

答案 0 :(得分:15)

似乎是Norvig answers this himself

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是可靠的​​: - )

答案 1 :(得分:3)

公平摘要here,有些不精确。当写入(2年以前)和当时的中档PC时,它估计:内存访问,60ns; L1缓存,10ns; L2缓存,20-30ns(无估计L3缓存访问时间)。当然,这取决于争用和访问模式,所有这些都取决于批次(因为缓存层通常由较慢的内存“按行”填充,如果您访问地址X然后地址X + 1,则第二次访问可能因为第一次访问启动了缓存行填充,所以要快一点。

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

答案 2 :(得分:2)

该表中有nice visualization个数据发布在github.org上。它们还对那里的时间值进行了“人类尺度”重新解释。

enter image description here