缓存或寄存器 - 哪个更快?

时间:2013-01-24 15:20:22

标签: performance caching memory cpu cpu-registers

我很抱歉,如果这是一个错误的地方问这个,但我搜索过,总能找到不同的答案。我的问题是:

哪个更快? 缓存或CPU注册?

据我所知,寄存器是直接加载数据来执行它的,而缓存只是CPU内部或内部的存储位置。

以下是我发现的让我困惑的消息来源:

2用于缓存|寄存器为1

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

缓存更快。

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

  

那究竟是哪个?

2 个答案:

答案 0 :(得分:33)

CPU寄存器总是比L1缓存快。它是最接近的。差异大致为3倍。

尽量使这一点尽可能直​​观,而不会迷失在问题背后的物理学中:电子学中的速度和距离之间存在简单的相关性。进行信号传输的距离越远,就越难将信号传送到电线的另一端而信号不会被破坏。这是"没有免费午餐"电子设计原理。

推论是更大更慢。因为如果你做出更大的东西,那么距离不可避免地会变大。一段时间以来自动缩小芯片上的特征尺寸会自动产生更快的处理器。

处理器中的寄存器文件很小,并且物理上靠近执行引擎。从处理器中移除的最远的是RAM。您可以弹出案例,实际上看到两者之间的连线。在两者之间坐着缓存,旨在弥合这两个对立面的速度之间的巨大差距。每个处理器都有一个L1缓存,相对较小(典型值为32 KB),位于最靠近核心位置。更低的是L2缓存,相对较大(典型值为4 MB),位于核心区域以外。更昂贵的处理器也有一个L3缓存,越来越远。

答案 1 :(得分:10)

特别是在x86架构上:

  • 从寄存器读取有0或1个周期延迟。
  • 写入寄存器的周期延迟为0。
  • 读取/写入L1缓存的周期延迟为3到5(因架构年龄而异)
  • 由于回写缓冲区和存储转发功能,实际加载/存储请求可能在0或1个周期内执行(详情如下)

由于其设计,从寄存器读取在Intel Core 2 CPU(和早期型号)上可能有1个周期延迟:如果有足够的同时执行指令从不同寄存器读取,则CPU的寄存器库将无法为所有请求在一个周期内。自2010年以来,任何已经投放到消费者市场的x86芯片都没有这种设计限制(但它存在于2010/11年发布的至强Xeon芯片中)。

L1高速缓存延迟是按模型修复的,但随着时间的推移,往往会变慢。但是,请记住三件事:

  1. x86芯片现在有一个具有0周期延迟的回写缓存。将值存储到内存时,它会进入该缓存,并且该指令可以在一个周期内退出。如果发出足够的连续写入以填充回写高速缓存,则内存延迟才会变为可见。自2001年左右以来,回写缓存一直在台式机芯片设计中占据突出地位,但直到最近才基于ARM的移动芯片市场广泛缺失。

  2. x86芯片现在从回写缓存中 存储转发 。如果将地址存储到WB缓存中,然后在几个指令后读回相同的地址,则CPU将从WB缓存中获取值,而不是为其访问L1存储器。这将出现的可见延迟减少为1个周期的L1请求。但实际上,在这种情况下,L1根本没有被引用。存储转发还有一些其他规则可以使其正常工作,这在当今市场上可用的各种CPU(通常需要128位地址对齐和匹配的操作数大小)方面也有很大差异。

  3. 存储转发功能可以生成误报,其中CPU认为地址位于写回缓冲区中,基于快速部分位检查(通常为10-14位,具体取决于在芯片上)。它使用额外的周期来验证完整的检查。如果失败则CPU必须作为常规内存请求重新路由。此错过可以为合格的L1缓存访问添加额外1-2周期的延迟。例如,在我的测量中,商店转发失误经常发生在AMD的Bulldozer上;足以使其L1缓存延迟时间比其记录的3个周期高出约10-15%。这几乎是英特尔Core系列的一个非因素。

  4. 主要参考:http://www.agner.org/optimize/,特别是http://www.agner.org/optimize/microarchitecture.pdf

    然后使用维基百科上各种CPU列表页面中的体系结构,模型和发布日期表来手动绘制信息。