2013-01-24 84 views
14

对不起,如果这是错误的地方要问这个,但我已经搜查,总能找到不同的答案。我的问题是:缓存或寄存器 - 哪个更快?

哪个更快? 缓存或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

所以这真的是什么呢?

+4

寄存器总是最快的,因为这是执行“发生”的地方。但是寄存器在存储方面非常有限。例如x86处理器只有** 4 **通用寄存器,您可以将它们存储到内存中,甚至这些寄存器具有双重目的。 –

回答

7
具体地说

在x86架构:

  • 从寄存器读取具有0或1个周期的延迟。
  • 写入寄存器具有0个周期的延迟。
  • 读取/写入L1高速缓存具有3至5周期的延迟(由架构年龄而异)
  • 实际的加载/存储请求可内由于回写缓冲器和存储转发功能0或1个周期执行(下面详细说明)

从寄存器读会对英特尔酷睿2的CPU(和早期型号)1个周期的延迟,因为它的设计:如果有足够的同时执行的指令来自不同的寄存器读取,CPU的寄存器组将无法在一个周期内为所有请求提供服务。自2010年以来,任何已投放到消费市场的x86芯片都没有这种设计限制(但它在2010/11发布的Xeon芯片中存在)。

L1缓存的延迟是固定的每个型号都有,但往往会变慢,你回到过去老款车型。然而,要记住三两件事:

  1. x86芯片,这些天有有0周期延迟回写缓存。当将值存储到内存时,它会落入该缓存中,并且指令可以在单个周期中退出。只有当您发出足够的连续写入来填充回写缓存时,内存延迟才会变得可见。自2001年以来,回写缓存一直在桌面芯片设计领域占有重要地位,但直到最近才被基于ARM的移动芯片市场所忽略。

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

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

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

,然后手工绘制与架构,模型中的表从该信息,并从维基百科的CPU页的各种名单发布日期。

+0

您可以提供一些链接/时间参考。 – ydroneaud

+0

感谢链接 – ydroneaud

28

试图尽可能直观地做到这一点,而不会在物理背后隐藏问题:电子设备中的速度和距离之间存在简单的相关性。信号走得越远,越难将信号传到线路的另一端,而不会损坏信号。电子设计的“没有免费的午餐”原则。

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

处理器中的寄存器文件很小,并且与物理上距离执行引擎很近。 RAM最远离处理器。你可以弹出案例,实际上两者之间的电线。之间坐下的缓存,旨在弥合这两个对立的速度之间的戏剧性差距。每个处理器都有一个L1缓存,相对较小(典型值为32 KB),位置最靠近内核。进一步下去的是二级缓存,相对较大(4 MB典型值),距离内核更远。更昂贵的处理器也有L3缓存,越来越远。

因此,CPU寄存器总是比L1高速缓存更快。这是最接近的。差异大致是因子3.

+0

缓存通常也有相对于寄存器中的地址被解决的缺点,通常具有偏移量;所以地址通常不可用,直到从寄存器中读取基地址并添加偏移量后。 (PC相对和绝对寻址是例外,但硬件很少[如果有]旨在利用这一点)。此外,Alpha 21464的regfile [“占用了四倍于L1KB的L1缓存大小的四倍”] (http://books.google.com/books?id=FQ-uGlvmSIkC&pg=PA24)(“多线程微处理器 - 进化或革命”,Jesshope,2003) –