为什么CPU缓存如此之快?


58

是什么使CPU高速缓存内存比主内存快得多?我可以看到分层缓存系统有一些好处。较小的缓存可以更快地进行搜索是有意义的。但是必须有更多的东西。


2
您所说的主记忆是什么意思?
marcocs 2014年

1
为清晰起见,对@marcocs进行了编辑。我指的是CPU缓存和主系统内存,即大多数主板上的可移动调光。
ConditionRacer


2
@ratchetfreak呃... OP显然是在寻求直接原因,而不是最终原因。
凯尔·斯特兰德

1
哇,我认为我不会使用我的计算机工程学位。接受的答案并不是真正的答案。这是因为CPU高速缓存以更高的时钟频率(CPU时钟频率,大约4GHz)运行,而主内存以总线时钟频率(大约1600MHz)运行。不仅如此,CPU缓存可以读取4个时钟周期,而且系统RAM可能需要100个系统时钟周期。同样,系统RAM与磁盘或网络等其他外围设备争用,而CPU缓存专用。导线越长,它可以工作的时钟频率就越慢。tinyurl.com/zkdsstd
Chloe,

Answers:


115

如果是CPU缓存,则它更快,因为它与处理器位于同一芯片上。换句话说,所请求的数据不必通过总线传送到处理器。它已经在那里。

对于高速缓存在硬盘驱动器上的情况,它更快,因为它位于固态存储器中,而不是仍在旋转的磁盘上。

对于网站上的缓存,它的速度更快,因为已经从数据库中检索了数据(在某些情况下,它可以位于世界的任何地方)。

所以主要是关于地点。缓存消除了数据传输步骤。

局部性是一种在时间或空间上说“紧密结合”的数据的奇特方法。使用较小,更快(但通常更昂贵)的内存进行缓存的原因是,通常总数据中相对较少的部分是最常访问的数据。

维基百科上的进一步读取
缓存(计算)


29
我认为这是一个很好的答案。但是,可能值得补充的是,还有一个缓存成本层次结构:网络存储比本地硬盘便宜,而本地硬盘比RAM便宜,而RAM比CPU上缓存便宜。如果不是因为这个原因,我们只需要在芯片上制造具有120GB内存的CPU即可。
查尔斯·格兰特

1
@ConditionRacer:相同的原因。L1速度更快,但价格更高,因此它们为您提供了一些非常昂贵的L1,并为您提供了一些更便宜但更慢的L2。另请参见stackoverflow.com/questions/3699582/…–
罗伯特·哈维

9
“为什么L1比L2快?”-该问题已成为Programmers.SE的话题,应在Electronics.SE上提问
mattnz 2014年

5
@ConditionRacer IIRC,与用于实现内存的技术有关。我认为L2是片上DRAM,而L1是SRAM或类似的东西。贵些,但要快得多。自从我从事CPU设计以来已有十多年了……
Donal Fellows 2014年

4
@ CharlesE.Grant:虽然成本层次结构是一个很好的例子,但是还有另一个原因我们没有120 GB的片上缓存:寻址更大的内存需要更大的地址,因此,更大的指令或更多的CPU周期。因此,为了最快,寄存器的数量需要保持相对较小。当然,除了寄存器之外可以具有片上存储器,但是最快的一层必须保持较小,否则它将不再那么快。
vsz 2014年

33

之所以更快,是因为两者都更近,而且因为它不是DRAM,而是SRAM。

SRAM比DRAM要快得多,而且可以比DRAM快得多。静态地保存值(S RAM 中的S),因此不必刷新它们,从而节省了周期。DRAM是动态的,就像微型可充电电池一样,您必须定期对其进行充电,以免它们耗尽而变为零。除了需要访问位等之外,这还会浪费周期时间。

与访问处理器相同或更靠近处理器的芯片可减少往返行程,从访问角度来看,L1和L2均比DRAM快。

SRAM的存取速度比DRAM存取的速度要快,而且与DRAM相比,高速缓存通常在芯片上或更近或在更快的总线上,因此存取时间也更快。


1
SRAM的每位功耗也更高,因此您必须为其添加散热器,否则电池供电的任何部件都会遭受损失。
9000

1
更不用说增大SRAM会使它变慢的事实。
Darkhogg

同意,相对于其他sram,功率更大,并且速度更慢。我认为sram每位4个晶体管,dram每位1个晶体管。dram依赖于英尺的电容,而sram则依赖于良好的老式逻辑。因此,您必须一直为所有这些晶体管供电,而不仅仅是定期泵送电荷。
old_timer 2014年

4
高速缓存中的SRAM通常为6T,而不是4T。同样,SRAM(肯定是6T型号)具有更高的能源效率。DRAM的真正功耗是刷新周期,而SRAM不需要刷新周期。开关时,SRAM晶体管会消耗功率,而DRAM电容器始终会漏电。如果您更换DRAM的漏液盖,您将得到EEPROM,但这并不快:如果电荷很难泄漏出来,也很难以正常方式将其清除。
MSalters 2014年

@dwelch CMOS FET处于打开或关闭状态时不会消耗功率,因此有关功耗的说法无效。此外,这是CMOS逻辑开关,这使CPU消耗了大部分功率-电流峰值处于中间状态(非1和非0),因此情况与您所说的相反:)
Ruslan

21

应该明确提及的一件事是光速的影响。在此视频中, Grace Hopper展示了一条约一英尺长的电线,这是电信号在一纳秒内传播的距离*。如果CPU工作在3GHz,则意味着每个时钟周期间隔为4“。这是对内存访问速度的严格物理限制。这是为什么接近CPU(如L1缓存)的很大一部分内存要更快。

编辑*实际上,真空中可以传播多远的光,穿过铜/硅的距离就更短。


2
铜的硬极限。不过,这是一个好点,我没有考虑过现代处理器有多么荒谬。
ConditionRacer

@ConditionRacer我刚刚添加了一个更正,在真空中11.8英寸很轻。
马修·芬利

2
您需要将该数字减半,因为需要往返来检索内存。因此,在真空中每个潜伏周期只有5厘米而不是10厘米。
CodesInChaos 2014年

2
光速是为什么几年前主存储器总线时钟不再变快的原因(2000ish?),这不是直接的影响-它与CMOS逻辑信号在总线频率上不再是完美的方波有关-但c显示在数学上占优。
zwol 2014年

5

其他答案已经涵盖了所有相关的位:局部性(以及相关的数据传输成本,总线宽度和时钟等);光速(同样,与传输成本以及总线宽度和吞吐量相关);不同的存储技术(SRAM与DRAM)。所有这些都是从成本/性能平衡的角度来看的。

遗漏了一点,Darkhogg评论中刚刚提到:较大的缓存具有较高的命中率,但延迟时间较长。还引入了多级缓存来解决这种折衷。

关于电子SE,在这一点上有很好的问答

从答案看来,在我看来要强调的一点是:执行高速缓存读取的所有必需操作的逻辑不是那么简单(特别是如果高速缓存是集关联的,就像今天的大多数高速缓存一样)。它需要门和逻辑。因此,即使我们排除成本和浪费空间

如果有人试图实现一个大得离谱的L1高速缓存,那么执行高速缓存读取所需的所有操作的逻辑也会变得很大。在某些时候,通过所有这些逻辑的传播延迟将太长,并且事先只需要一个时钟周期的操作就​​必须分成几个时钟周期。这将增加延迟。


5

在其他答案中有很多优点,但是似乎缺少一个因素:地址解码延迟。

以下是对存储器地址解码工作原理的极大简化,但是它很好地说明了为什么大型DRAM芯片通常速度很慢。

当处理器需要访问内存时,它会向存储芯片发送命令以选择要使用的特定字。该命令称为“列地址选择”(我们现在将忽略行地址)。现在,存储芯片必须激活所请求的列,这是通过沿一连串逻辑门发送地址以进行单次写操作来实现的,该写操作连接到列中的所有单元。根据实现方式的不同,地址的每一位都会有一定的延迟,直到结果出现在另一端为止。这称为内存的CAS延迟。因为必须顺序检查这些位,所以此过程比处理器周期(通常只有几个晶体管要等待)要花费更长的时间。它也比总线周期花费更多的时间(通常比处理器周期慢几倍)。典型存储芯片上的CAS命令可能需要5ns的时间(IIRC-自从我查看时序以来已经有一段时间了),这比处理器周期慢了一个数量级。

幸运的是,我们将地址分为三部分(列,行和库),这使得每个部分都可以更小并同时处理这些部分,否则延迟会更长。

但是,处理器缓存不存在此问题。它不仅小得多,所以地址转换是一件容易的事,实际上它不需要翻译的只是地址的一小部分(在某些变体中,根本没有),因为它是关联的。这意味着,在每条缓存的内存行旁边,都有额外的存储单元存储部分(或全部)地址。显然,这会使高速缓存更加昂贵,但这意味着可以查询所有单元,以查看它们是否同时具有我们想要的特定内存行,然后(希望)唯一具有正确数据的单元将其转储。到将整个内存连接到主处理器内核的总线上。发生时间少于一个周期,因为它要简单得多。


-2

当我们讨论任何基于缓存的内存时,无论是CPU缓存,缓冲区缓存还是内存缓存,我研究的哲学之一就是获取最大吞吐量最小硬件运动。当用于检索/读取/写入数据的硬件移动最少或没有硬件移动并且操作完成得更快时,可以达到基本目的。

数据从磁盘->主存储器(RAM)(临时存储)-> CPU缓存(CPU附近较小的临时存储,用于频繁访问的数据)-> CPU(处理)传输。

CPU高速缓存是一个较小的,更快的内存空间,用于存储来自最近使用的主内存位置的数据副本。

缓冲区高速缓存是一个主存储区,用于存储来自最近使用的磁盘位置的数据副本。

浏览器缓存是目录或类似的空间,用于存储用户最近访问的网站的数据副本。

参考:计算机内存的工作方式


“操作系统哲学是……”-这仅仅是您的意见还是可以以某种方式予以支持?
2014年

莫里斯·巴赫(Maurice Bach)在学习Unix时曾被教导有关此问题。不幸的是,没有任何支持性文档。编辑..
roshan4074 2014年

5
众所周知,howstuffworks不可靠,无法获得可靠的技术信息。它们非常适合Joe和Jane可以理解的总体简化,仅此而已。
jwenting 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.