百科问答小站 logo
百科问答小站 font logo



CPU的一级缓存为什么不能做得大一点? 第1页

  

user avatar   crucis 网友的相关建议: 
      

来尝试写一个答案,提供一个电路到系统设计的视角吧。

1)首先需要明确的是,即便是数字电路,决定速度的也不是频率,频率实际上还是受逻辑电路的充放电物理时间约束决定。比如逻辑电路信号达到建立到稳定的时间是1ns,那就可以跑到1Ghz,如果是10ns,就只能跑在100Mhz。为了提高频率需要不停插D触发器,降低每段逻辑电路的充放电时间。但是代价是一件事变成好多个周期才完成,一条指令的运行时间就分割成了单周期延时*周期数,D触发器优化的tradeoff也就出现在这里。比如插一级D触发器,每一级电路可能降到60ns,需要2个时钟周期,虽然频率提高到133Mhz,但一件事完成的时间反而提升到120ns;这个太展开了就不说了。总之知道这些就同时知道不同电路的频率和性能是没有绝对对应关系的。

2)最底层,cmos电路可以简化为一堆级联的rc电路,逻辑功能的1/0本质上是c的充放电。那么既然是rc电路,就可以理解rc乘积越大,充放电时间越长。因此mos管的面积越大,r约小但c越大。这里是一部分需要取舍的地方来找到最合适的rc乘积,这是单管尺寸优化的tradeoff。cache多采用sram,6个管子才能完成1bit,而且p管空穴导电电阻率大,比如亚微米的时代p是n管2倍大,而dram也就一个nmos管再加个电阻,体积小很多很多。这就决定了sram做不大。更何况L1优化要做速度优化,每个管子体积是小不了的,所以单个bit的体积比l2/l3的sram又要大不少,因此l1的代价是非常高的

3)这还没完,上面讲的是一个bit的情况。如果一堆呢?这就要提扇入扇出了。数字电路的选择不是for一样去找,而是map reduce的样子,所以输入地址线需要连到每一个cache line的单元,也就是这些下一级的管子的电容直接并联形成一个超大电容。所以在地址信号来的时候,每一位上的0/1变换都会导致在给这个巨大的电容充放电。因此同时连入的路数(暂时可以等效为大小,下一条解释)越多,充放电越慢,筛选出需要cache line的速度也越慢。

4)这个时候就上升到系统级设计了。cache的寻址是比较白痴的,核心的部分是取出N位地址线中X位来选择cache line,剩下N-x位对比是否命中。比如地址线32位,cache有64个line,任何地址每个cache line都可以用,直接全部32根线都同时给64个line的比较器充电(也就是全相联)。慢都慢死了,怎么办呢?所以设计了组相联。先拿5根线选出1组2个,再拿剩下1根线选1/2,这样电容不就小多了么。所以就变成了具有32组的2路组相连。那如法炮制下去,不分青红皂白,就拿6根线找到cache line,剩下28条看是不是需要的,这就成了直接映射。这下皆大欢喜了,扇出降到了最小,不用给那么多电容充电了,一定运行的很快,频率高的飞起。

5)然而现实是残酷的,直接映射的代价是,每个地址只能对应某一个cache line,比如访问1000001和200001地址会不停洗刷同一块cache line,那么命中率会急剧下降,导致虽然充放电时间降低了,但是命中率下降带来的缺失惩罚加重了,还是不行。所以另外一个设计的trade-off就出来了,要有合适的组相联路数,但组数又不能太高也不能太低。

说到这里,核心的几个trade-off就出来了,

1)一组里面的路数不能太少,不然cache miss太多影响性能;但一组里面的路数也不能太多,不然扇出电容太大充电时间受不了;组数其实也不能太多,毕竟选组也是有扇出的。

2)尽管电容C可以靠降低mos管体积减小,但还是要足够大来降低电阻R,所以要找合适的尺寸平衡RC,优化充电时间

3)L1的sram做的比较大,面积和功耗受不了,为了保证数量,最优的RC也未必可以达到,所以面积限定下容量和充放电时间也是一对tradeoff

综上所述,每家设计商只能和代工厂不停磨合,找出在当前工艺和体系结构下最适合的L1尺寸设计。当然上面列出的只是一些通用的核心tradeoff,还有大量的只有在实际设计中的tradeoff,甚至和应用场景的统计数据也有关系,过于细节了就不表了


user avatar   yi-li-yan-74 网友的相关建议: 
      

首先明确的是,缓存都是SRAM,而SRAM都是CMOS器件,两个非门CMOS期间组成的一个bit的存储位,原理如下:(对原理不感兴趣的可直接拖到后面)

首先先说一下反相器,就是下图这个:

上面的是P沟道Mos管,下面的是N沟道Mos管,假设Vdd出有5V电压,Vss处接地。这里当我们在A处接上电压,N沟道Mos管导通,那么Q点就通过nMos管直接导通到Vss,也就是地,所以Q就是低电压,而当A出没有电压。上面的pMos管导通,Vdd处的5V电流顺着pMos点到通道Q点,这时候Q就是高电压,这样看Q点的电压与A点的输入总是相反,这个就叫CMOS反相器。

说完反相器,我们来看一下存储一个bit的SRAM的图是什么样的,两个大大的反相器就出来了。仔细看这个结构,两个反相器的输出Q又接在了对方的输入点上,这个结构为存储信号提供了基础。这一个bit的SRAM的有三个输入点,左边与右边的BL是信号输入,上面的WL是用来控制写入的。

这里以往这个SRAM写入一个1为例,如下图所示,我们把E的电平拉高,此时M5,M6就可以导通了,A,B两条线的信号可以走M5,M6走到Q’和Q处,我们在A输入低电平,B输入高电平。首先看左边的反相器,也就是A侧的,这个反相器的输入是B侧,因为B侧为高电平,所以这个反相器的输出Q’是低电平。而Q’又是右边反相器的输入,Q’又是低电平,那么右边的反相器的输出Q是高电平,而Q点恰好也接在了B的线上,也是高电平。我们把E点电压调低看看,这样两个反相器的输出Q总是高电平,Q’总是低电平,我们规定这种状态就存入了一个数据1.在读取的时候呢,我们直接把E点调高,让A,B两根线去感受这两侧电平,发现A为低电平,B为高电平,这样我们就知道这个SRAM存了一个1.相反,如果A为高电平,B为低电平,那么我们就判定存储了一个0,这就是6Mos管SRAM的存储结构。如果看到这迷迷糊糊,建议从新看一下,多理理就清楚了。

其次,L1,L2缓存各有各自的用途,这里就要明确另外一个概念,指令缓存与数据缓存。指令缓存是专门用来给CPU提供指令的,而数据缓存是专门给CPU提供数据的。而L2缓存是指令,数据并存的。L3缓存CPU所有核公用的,三级缓存分工不同,如果L2缓存去掉了,估计整个CPU的架构就要重新设计的。

并且缓存与缓存有一定的关系,比如Intel的处理器采用了Inclusive模式的缓存,这种模式下,L3的缓存包含了缓存的所有内容。也就是说L2缓存的内容是L3的子集,L1的内容又是L2的子集。如果L1做的很大,那么L2需要做的更大,L3呢,就需要更更大。而众所周知,缓存在CPU中所占有的面积是很大的,这个有人提到,这里还是要放一个图,所以L1做的很大的话,首先生产成本昂贵不说,CPU的面积也会增大,但是随着CPU工艺的提高,缓存也在逐渐变多。

而上述的问题对于AMD不存在,因为AMD使用的是Exclusive模式,而且内存中被缓存的内容会首先进入到L1缓存中,当L1的缓存占满后,会把优先级可能没那么高的数据放入L2,如果L2也被占满,就移到L3,如果L3也满了,直接淘汰掉。AMD的三层缓存更像三个仓库,L1是最近的小仓库,拿起来更方便,L1满了就往L2那个仓库里扔,L2满了,就往L3扔。

当然,上述的缓存模式近些年来Intel逐渐采用Inclusive和Exclusive混合的模式,也就是L2和L3是Exclusive的,L1和L2是Inclusive的。因为这种模式会造成缓存空间的浪费。

还有一些别的关于缓存的基本知识,可以参见这篇文章。

如有错误,欢迎各位指出,感谢。




  

相关话题

  M1芯片发布后,intel和amd的芯片只能好自为之,还是会降价?或是迎来性能突变? 
  史上什么CPU堪称发热量巨大? 
  能不能做到cpu和显卡单独供电? 
  三级缓存装系统是什么体验? 
  超线程的两个线程资源是动态分配的还是固定一半一半的? 
  为什么市面上没有山寨的 CPU 卖? 
  臭打游戏的,想用3080ti显卡 ,cpu是5800x还是升级12700k啊,有啥体验差别么? 
  英特尔挤了这么多年牙膏,背后真的没有过硬的技术储备吗? 
  如何看待王垠对于内存管理的理解? 
  为什么电脑 CPU 不像手机 SoC 那样设计成大小核? 

前一个讨论
很多人认为路由算法很先进,只有IP路由算法,为什么没有人研发一个MAC路由算法?
下一个讨论
对流和扩散有什么区别?





© 2024-12-23 - tinynew.org. All Rights Reserved.
© 2024-12-23 - tinynew.org. 保留所有权利