CPU性能提升:Cache机制

随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁数据交换的内存的运行速度却没有相应提升,于是两者之间就产生了带宽问题,进而影响计算机系统的整体性能。CPU执行一条指令需要零点几纳秒,而RAM则需要30纳秒左右,读写一次RAM的时间,CPU都可以执行几百条指令了。为了不给CPU拖后腿,解决内存带宽瓶颈的方法一般有两个:一是大幅提升内存RAM的工作频率,目前最新的DDR4内存条的工作频率可以飙到2GHz,但是和高端的CPU相比,还是存在一定差距的,这就需要第二种方法来弥补差距:使用Cache缓存机制。

计算机系统的存储器被组织为一个金字塔形层次结构,如下图所示(图来自嵌入式系统设计师教程第二章)。在这个结构中,自上而下,依次为CPU内部寄存器,cache、芯片外的高速缓存、主存储器、外部存储器和远程二级存储。其中cache的速度仅次于CPU内部寄存器。
在这里插入图片描述

Cache的工作原理

Cache在物理实现上其实就是静态随机访问存储器(Static Random AccessMemory,SRAM),Cache的运行速度介于CPU和内存DRAM之间,是在CPU和内存之间插入的一组高速缓冲存储器,用来解决两者速度不匹配带来的瓶颈问题。Cache的工作原理很简单,就是利用空间局部性和时间局部性原理,通过自有的存储空间,缓存一部分内存中的指令和数据,减少CPU访问内存的次数,从而提高系统的整体性能。
具体来说,是把主存储器和cache都划分成相同大小的块。贮存地址假设由块号M和块内地址N两部分组成。统一,cache也有块号m和块内地址n组成,工作原理图如下所示。
在这里插入图片描述
当CPU要访问cache时,CPU送来主存地址,放到主存地址寄存器中。然后通过地址变换部件,将主存地址中的块号M变成cache块号m,并放到cache地址寄存器中。同理也会将块内地址N之间作为cache的块内地址装入到cache地址寄存器中。
如果地址变换成功(通常叫做cache命中),就用得到的cache地址去访问cache,从cache中取出数据送到CPU中。
如果变换不成功,则产生cache失效信息,并且接着使用贮存地址之间去访问主存储器。从主存储器读数据的同时也将数据装入到cache中。如果这个适合cache满了,则需要采用cache替换策略(如FIFO策略),把不常用的块先调出到主存储器中相应的块中,以便腾出空间来存放新调入的块。

一级Cache和二级Cache

CPU从Cache里读取数据,如果缓存命中,就不用再访问内存,效率大大提升;如果缓存未命中,情况就不太乐观了:CPU不仅要重新到内存中取数据,还要缓存一片新的数据到Cache中,如果Cache已经满了,还要清理Cache,如果Cache中的数据有“Dirty Bit”,还要回写到内存中。这一波操作可能需要几十甚至上百个指令,消耗上百个时钟周期的时间,严重影响了CPU的读写效率。为了减少这种情况发生,我们可以通过增大Cache的容量来提高缓存命中的概率,但随之带来的就是成本的上升。在CPU内部,Cache和寄存器的电路比内存DRAM复杂了很多,会占用很大的芯片面积,如果大量使用,芯片发热量会急剧上升,所以在CPU内部寄存器一般也就几十个,靠近CPU的一级Cache也就几十千字节。既然无法继续增加一级Cache的容量,一个折中的办法就是在一级Cache和内存之间添加二级Cache。二级Cache的工作频率比一级Cache低,但是电路成本会降低,元器件的运行速度总是和电路成本成正比。
现在的CPU一般都是多核结构,一个CPU芯片内部会集成多个Core,每个Core都会有自己独立的L1 Cache,包括D-Cache和I-Cache。在X86架构的CPU中,一般每个Core也会有自己独立的L2 Cache,L3 Cache被所有的Core共享。而在ARM架构的CPU中,L2 Cache则被每簇(Cluster)的Core共享。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值