是什么使CPU高速缓存内存比主内存快得多?我可以看到分层缓存系统有一些好处。较小的缓存可以更快地进行搜索是有意义的。但是必须有更多的东西。
是什么使CPU高速缓存内存比主内存快得多?我可以看到分层缓存系统有一些好处。较小的缓存可以更快地进行搜索是有意义的。但是必须有更多的东西。
Answers:
如果是CPU缓存,则它更快,因为它与处理器位于同一芯片上。换句话说,所请求的数据不必通过总线传送到处理器。它已经在那里。
对于高速缓存在硬盘驱动器上的情况,它更快,因为它位于固态存储器中,而不是仍在旋转的磁盘上。
对于网站上的缓存,它的速度更快,因为已经从数据库中检索了数据(在某些情况下,它可以位于世界的任何地方)。
所以主要是关于地点。缓存消除了数据传输步骤。
局部性是一种在时间或空间上说“紧密结合”的数据的奇特方法。使用较小,更快(但通常更昂贵)的内存进行缓存的原因是,通常总数据中相对较少的部分是最常访问的数据。
之所以更快,是因为两者都更近,而且因为它不是DRAM,而是SRAM。
SRAM比DRAM要快得多,而且可以比DRAM快得多。静态地保存值(S RAM 中的S),因此不必刷新它们,从而节省了周期。DRAM是动态的,就像微型可充电电池一样,您必须定期对其进行充电,以免它们耗尽而变为零。除了需要访问位等之外,这还会浪费周期时间。
与访问处理器相同或更靠近处理器的芯片可减少往返行程,从访问角度来看,L1和L2均比DRAM快。
SRAM的存取速度比DRAM存取的速度要快,而且与DRAM相比,高速缓存通常在芯片上或更近或在更快的总线上,因此存取时间也更快。
应该明确提及的一件事是光速的影响。在此视频中, Grace Hopper展示了一条约一英尺长的电线,这是电信号在一纳秒内传播的距离*。如果CPU工作在3GHz,则意味着每个时钟周期间隔为4“。这是对内存访问速度的严格物理限制。这是为什么接近CPU(如L1缓存)的很大一部分内存要更快。
编辑*实际上,真空中可以传播多远的光,穿过铜/硅的距离就更短。
其他答案已经涵盖了所有相关的位:局部性(以及相关的数据传输成本,总线宽度和时钟等);光速(同样,与传输成本以及总线宽度和吞吐量相关);不同的存储技术(SRAM与DRAM)。所有这些都是从成本/性能平衡的角度来看的。
遗漏了一点,Darkhogg评论中刚刚提到:较大的缓存具有较高的命中率,但延迟时间较长。还引入了多级缓存来解决这种折衷。
关于电子SE,在这一点上有很好的问答
从答案看来,在我看来要强调的一点是:执行高速缓存读取的所有必需操作的逻辑不是那么简单(特别是如果高速缓存是集关联的,就像今天的大多数高速缓存一样)。它需要门和逻辑。因此,即使我们排除成本和浪费空间
如果有人试图实现一个大得离谱的L1高速缓存,那么执行高速缓存读取所需的所有操作的逻辑也会变得很大。在某些时候,通过所有这些逻辑的传播延迟将太长,并且事先只需要一个时钟周期的操作就必须分成几个时钟周期。这将增加延迟。
在其他答案中有很多优点,但是似乎缺少一个因素:地址解码延迟。
以下是对存储器地址解码工作原理的极大简化,但是它很好地说明了为什么大型DRAM芯片通常速度很慢。
当处理器需要访问内存时,它会向存储芯片发送命令以选择要使用的特定字。该命令称为“列地址选择”(我们现在将忽略行地址)。现在,存储芯片必须激活所请求的列,这是通过沿一连串逻辑门发送地址以进行单次写操作来实现的,该写操作连接到列中的所有单元。根据实现方式的不同,地址的每一位都会有一定的延迟,直到结果出现在另一端为止。这称为内存的CAS延迟。因为必须顺序检查这些位,所以此过程比处理器周期(通常只有几个晶体管要等待)要花费更长的时间。它也比总线周期花费更多的时间(通常比处理器周期慢几倍)。典型存储芯片上的CAS命令可能需要5ns的时间(IIRC-自从我查看时序以来已经有一段时间了),这比处理器周期慢了一个数量级。
幸运的是,我们将地址分为三部分(列,行和库),这使得每个部分都可以更小并同时处理这些部分,否则延迟会更长。
但是,处理器缓存不存在此问题。它不仅小得多,所以地址转换是一件容易的事,实际上它不需要翻译的只是地址的一小部分(在某些变体中,根本没有),因为它是关联的。这意味着,在每条缓存的内存行旁边,都有额外的存储单元存储部分(或全部)地址。显然,这会使高速缓存更加昂贵,但这意味着可以查询所有单元,以查看它们是否同时具有我们想要的特定内存行,然后(希望)唯一具有正确数据的单元将其转储。到将整个内存连接到主处理器内核的总线上。发生时间少于一个周期,因为它要简单得多。
当我们讨论任何基于缓存的内存时,无论是CPU缓存,缓冲区缓存还是内存缓存,我研究的哲学之一就是获取最大吞吐量最小硬件运动。当用于检索/读取/写入数据的硬件移动最少或没有硬件移动并且操作完成得更快时,可以达到基本目的。
数据从磁盘->主存储器(RAM)(临时存储)-> CPU缓存(CPU附近较小的临时存储,用于频繁访问的数据)-> CPU(处理)传输。
CPU高速缓存是一个较小的,更快的内存空间,用于存储来自最近使用的主内存位置的数据副本。
缓冲区高速缓存是一个主存储区,用于存储来自最近使用的磁盘位置的数据副本。
浏览器缓存是目录或类似的空间,用于存储用户最近访问的网站的数据副本。
参考:计算机内存的工作方式