【问题标题】:Approximate timings for various operations on a "typical desktop PC" anno 2010 [closed]“典型台式电脑”anno 2010 上各种操作的大致时间 [关闭]
【发布时间】:2023-03-14 04:13:02
【问题描述】:

在文章"Teach Yourself Programming in Ten Years"Peter Norvig(Google 研究总监)中,给出了 2001 年典型 1GHz PC 上各种操作的以下大致时间:

  • 执行单条指令 = 1 纳秒 = (1/1,000,000,000) 秒
  • 从 L1 高速缓存中提取字 = 2 纳秒
  • 从主内存取字 = 10 纳秒
  • 从连续磁盘位置获取字 = 200 纳秒
  • 从新磁盘位置获取字(搜索)= 8,000,000 纳秒 = 8 毫秒

您对典型 PC 桌面版 2010 年的定义的相应时间安排是什么?

【问题讨论】:

  • 我们现在是 9 年后,这意味着,根据摩尔定律,晶体管数量是 5 到 6 倍。因此,至少在 CPU 和主内存的速度方面,这转化为 32 或 64 倍的速度提升。除非我搞错了。磁盘性能与时间大致呈线性关系,因此这可能不会快太多。

标签: memory assembly computer-science performance


【解决方案1】:

高速缓存和主内存变得更快。磁盘具有更高的顺序带宽。 SSD 的寻道时间要短得多。

虽然原始列表非常糟糕,但他将延迟度量(如寻道时间)与 1/吞吐量混合在一起(如果您认为可以往返于磁盘控制器,即使数据已经在缓存中,您也是在做梦并且不需要头部移动,在 200ns 内)。

所有延迟都没有真正改变。单条指令和 L1 延迟实际上比他给出的数字要长,但是您可以得到多条指令并行工作(流水线),并且以一个价格从缓存中获取多个字。同样,对于磁盘传输,您会以更快的速度连续交付连续的块,但发出请求后的等待时间并没有太大变化,除非您已迁移到 SSD。

不过,CPU 架构已经发生了很大变化,试图在其中任何一个上加上一个数字是一种损失。不同的指令需要非常不同的执行时间,并且数据依赖关系控制着你看到的吞吐量。缓存行为主要由多核 CPU 之间的共享成本决定。以此类推。

【讨论】:

    【解决方案2】:

    我试图从这些时间中获得的主要信息是它们之间的规模差异:内存比直接在 CPU 上执行代码慢大约一个数量级,而磁盘比这慢几个数量级。

    许多开发人员仍然在考虑 CPU 时间方面的优化。但是,如果有一次缓存未命中,那么在给定上述时序的情况下,您的 CPU 至少会空闲 10 个时钟周期。一个硬页面错误需要 800 万个时钟周期。这就是为什么优化内存使用(以减少页面错误)和优化数据布局(以减少缓存未命中)通常比任何只关注代码流的优化具有更高的回报。

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多