我试图理解为什么某些CPU高速缓存的内存比其他的快。将高速缓存存储器与主存储器之类的存储器进行比较时,存储器类型(SRAM与DRAM)和可能影响访问速度的局部性问题(片上存储器与必须穿越存储器总线)存在差异。但是L1和L2通常在同一芯片上,或者至少在同一芯片上,我认为它们是同一类型的存储器。那么为什么L1更快呢?
我试图理解为什么某些CPU高速缓存的内存比其他的快。将高速缓存存储器与主存储器之类的存储器进行比较时,存储器类型(SRAM与DRAM)和可能影响访问速度的局部性问题(片上存储器与必须穿越存储器总线)存在差异。但是L1和L2通常在同一芯片上,或者至少在同一芯片上,我认为它们是同一类型的存储器。那么为什么L1更快呢?
Answers:
不,即使它们在使用相同制造工艺的同一芯片上,它们也不是相同类型的RAM。
在所有高速缓存中,L1高速缓存需要具有最快的访问时间(最低的延迟),而不是其具有多少容量才能提供足够的“命中”率。因此,它是使用较大的晶体管和较宽的金属走线构建的,因此需要在空间和功率之间进行权衡。较高级的高速缓存需要具有较高的容量,但可以承受得较慢,因此它们使用更紧凑的较小晶体管。
L1通常用作解码指令的存储,而L2是单个内核的通用缓存。高速缓存越低,它的大小就越小,通常速度就越快。作为PC处理器的粗略经验法则:
L1缓存:2-3个时钟周期访问
L2缓存:〜10个时钟周期访问
L3缓存:〜20-30个时钟周期访问
L1高速缓存的设计应该是最大化命中率(所需指令地址或数据地址在高速缓存中的概率),同时保持尽可能低的高速缓存延迟。英特尔使用的L1缓存的延迟为3个周期。L2缓存在一个或多个L1缓存之间共享,并且通常更大得多。L1高速缓存旨在最大程度地提高命中率,而L2高速缓存旨在最大程度地降低未命中损失(发生L1未命中时产生的延迟)。对于具有L3高速缓存的芯片,其目的特定于芯片的设计。对于Intel而言,L3缓存在2002年首次出现在4路多处理器系统(奔腾4 Xeon MP处理器)中。从这种意义上讲,L3缓存大大减少了多线程环境中的延迟,并减轻了FSB的负担。当时,
引用来源这里从“Pinhedd的”回应。
除了固有的性能特征外,局部性也起作用(L1更靠近CPU)。根据每个程序员对内存的了解:
有趣的是,对于片上L2缓存,访问时间的很大一部分(可能甚至是大部分)是由线路延迟引起的。这是一个物理限制,只会随着高速缓存大小的增加而变得更糟。只有缩小工艺(例如,从Merom的60nm到Intel的Penryn的45nm)才能改善这些数字。