谢邀。实际上问题并不成立,因为已经有L4了,它有两种形式:
eDRAM
- Haswell/Broadwell:在Iris系列中,一块高速DRAM被放入Package中,叫做eDRAM。
它在平时可以做显存。也可以被设定为L4缓存:
Optane DIMM
Intel 2018年将要推出内存条形式的Optane:3D XPoint
因为Optane内存是NvRAM(非易失)的内存,且容量很大,普通的内存条在这时当作他的cache,类似L4 cache,不过不保证通常意义上的“Cache一致性”。
引申
从广义的角度上看,Cache是快设备为了缓解访问慢设备延时的预留的Buffer,从而可以在掩盖访问延时的同时,尽可能地提高数据传输率。 快和慢是一个相对概念,与微架构(Microarchitecture)中的 L1/L2/L3 Cache相比, DDR内存是一个慢速设备;在磁盘 I/O 系统中,DDR却是快速设备,在磁盘 I/O 系统中,仍在使用DDR内存作为磁介质的Cache。在一个微架构中,除了有L1/L2/L3 Cache之外,用于虚实地址转换的各级TLB, MOB( Memory Ordering Buffers)、在指令流水线中的ROB,Register File和BTB等等也是一种Cache。
就算是狭义 Cache,是CPU流水线和主存储器的 L1/L2/L3 Cache,它的演进也是渐进的:
- PC-AT/XT和286时代:没有Cache,CPU和内存都很慢,CPU直接访问内存。
- 386时代:CPU速度开始和内存速度不匹配了。为了能够加速内存访问,芯片组增加了对快速内存的支持,这也是在电脑上第一次出现Cache(尽管IBM 360 model系统上已经出现很久了),也是L1(一级Cache)的雏形。这个Cache是可选的,低端主板并没有它,从而性能受到很大影响。而高级主板则带有64KB,甚至高端大气上档次的128KB Cache,在当时也是可以笑傲江湖了。当时的Cache都是Write-Through,即Cache内容的更新都会立刻写回内存中。
- 486时代:Intel在CPU里面加入了8KB的L1 Cache,当时也叫做内部Cache。它在当时是Unified Cache,就是不分代码和数据,都存在一起。原先在386上面的Cache,变成了L2,也被叫做外部Cache。大小从128KB到256KB不等。这时增加了Write-back的Cache属性,即Cache内容更改后不立刻更新内存,而是在Cache miss的时候再更新,避免了不必要的更新。
- 586/Pentium-1时代:L1 Cache被一分为二,分为Code和data,各自8KB。这是因为code和data的更新策略并不相同,而且因为CISC的变长指令,code cache要做特殊优化。与此同时L2还被放在主板上。后期Intel推出了Pentium Pro ('80686'),L2被放入到CPU的Package上:
- 奔腾2/3:变化不大,L2还在CPU Die外面,只是容量大了不少。
- 奔腾4/奔腾D:L2被放入到了Die里面。这就和现在的L1和L2很相像了,问题来了,多内核呢?第一代奔腾D双核中,L1和L2被两个Die各自占据。Netburst的Pentium 4 Extreme Edition高端版甚至加入L3。但在后期与HT一起随着Netburst架构被放弃。
- Core/Core2:巨大的变化发生在L2,L2变成多核共享模式:
- 现在:L3被加入到CPU Die中,它在逻辑上是共享模式。而L2则被每个Core单独占据。这时L2也常被指做MLC(Middle Level Cache),而L3也被叫做LLC(Last Level Cache):
结论
细心的读者也许会发现,Cache演变总的来说级数在增加,新加入的层级在位置上总是出现在外层,逐渐向内部靠近。回到我前面的两个L4的例子来看,L4都不在CPU的Die里,未来也许会增加到Die内,CPU还在演进之中,未来还是未知之数。
本文大部分出自:
Cache其他文章:
欢迎大家关注我的专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!