缓存级数是否有上限?
可能增加但是不会无止境的增加。
原本缓存有三层,L1取得的收益是最大的,因为L2和L3上的locality都是L1吃剩下的。L2和L3的存在目的是浪费一定的存储单元尽可能的兜住绝大部分locality避免访问片外存储造成miss penalty(这个penalty绝大部分考虑的实际上是能耗,因为多发射和out of order可以较大程度上缓解cache miss latency)。
这实际上是在用芯片面积换功耗,要求L3和L2的大小指数级上升。这是没办法无休止的继续下去的,第一个原因是由更多的晶体管增加的leakage power 会超过cache 节省下来的dynamic power, 使得多出来的一级cache毫无价值。
第二个原因是比L3再大一级的SRAM实在太大了。L3的面积已经占到整个CPU die的一半以上了。再叠个更大的SRAM L4上去,CPU 的die size就到了不可接受的大小。这是会牺牲产量的,毕竟一片晶元只有300mm直径,die越大边角损耗越高。有人可能会问,die增加,增加晶元的大小不就可以了。但是增加晶元尺寸的成本可能更高,见这篇专栏(个人非常喜欢这个专栏,也很感谢作者老狼)。
450mm的晶圆在哪里?
出现四级缓存的主要原因是DRAM可以做到片上了(eDRAM),而且显示核心需要更大的缓存。这相当于新工艺提供了一种在片上以较小尺寸提供更大存储单元的途径。往后可能某种NVM也会成为缓存的一级,如果它能集成到片上的话。也有可能NVM会取代当前的eDRAM成为第四级.
■网友
泻药。
同意Chant Zine的观点。这些缓存的面积真的很大很大。
下面说说我自己从CPU design的角度一些看法。
“理论上没有上限,可以继续增加”
但是,增加缓存级数,设计更复杂,效果未必十分明显,投入产出比低,不划算。不是做不到,而是没必要。
CPU的性能,不是单单增加缓存级数就能明显增加的,应该去解决当前最大的瓶颈。不同时期,不同工艺节点,瓶颈不一样。比如,现在,分支预测/cache命中率/cache替换算法,这些往往能很大幅度提高CPU Core的性能,这些更像瓶颈。
首先明白一点,缓存的功能:为了缓解取数据/指令的速度与CPU Core内部处理指令的速度差距太大的问题。
通俗一点说就是,CPU Core吃饭(指令)的速度快,胃口大,而喂饭的速度跟不上,core经常挨饿,所以采用缓存来提高喂饭速度。
目前的L1在Core内,L2在Core外,但是只属于单个Core,L3在Core外,被多Core共用。
但是,并不仅仅有这些cache,比如还有victim cache/ filter cache,又或者,write buffer也是类似缓存。只是这些cache还没有被广泛采用,也证明其效果并不十分突出,对性能提升没有质的飞跃。
所以,最后一句话:
不是做不到,而是没必要。
■网友
理论上可以无限增加,但一方面增加缓存会增加芯片面积;另一方面,带不来太多的性能增加,自然成本上就不划算了。
■网友
架构寄存器是物理寄存器的缓存,物理寄存器是cache的缓存,cache是内存的缓存,内存是硬盘的缓存,硬盘是你遇到的程序与数据的缓存,你看随随便便就超过四层了。~( ̄▽ ̄~)~
■网友
不是搞这方面的 可能回答不准确。我的理解是:大体来说,边际效益递减是必然的,因为对于大部分程序,缓存命中率还是很高的,再增加级数,效益未必显著。况且万一Miss了 还有penalty。就像流水线级数也不是多多益善那样。
■网友
可以的,但要看有没有意义。
要明白为什么会增加缓存级数。
假如我们把现在l4的缓存放到l3.l2甚至l1去到底行不行,有没有好处?
从设计本身来说当然希望l1的尺寸越大越好,越大意味可以缓存更多的数据,更不容易发生访问不命中,需要去下一层级缓存或主存取数据的问题。因为越往下一层级去要数据,延时就会越大,延时越大积压在发送侧的数据就越晚被释放,从而影响了运行速度。
推荐阅读
- 傻子当国有银行行长都能赚钱这句话是否是对的
- 网通社|喜欢蔚来的越来越多了 连续四个月交付创新高 你是否愿意放弃特斯拉选择它?
- 豆瓣为啥受到同志社群的欢迎
- |PHEV车款没比较环保,新能源是否存在谎言呢?
- 如果把DNS从godaddy转到DNSPOD是不是所有的二级域名都要重新设置,然后等这个各个ISP的缓存重新解析啊
- 运营商收取的流量费用价格是否合理
- 游戏公司一般咋识别游戏脚本
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 是否该停止密码掩饰了
- 织毛衣这种工艺是否会渐渐消失
