从缓存角度来提高程序性能(二):高速缓存Cache

目录

1 高速缓存Cache机制

1.1 通用的高速缓存存储器结构

1.2 直接映射高速缓存

1.3 组相联高速缓存

1.4 全相联高速缓存

2 编写高速缓存友好的代码


1 高速缓存Cache机制

1.1 通用的高速缓存存储器结构

      通用的高速缓存存储器的结构如图所示:

       由图可见,高速缓存存储器实际上是由多个缓存行组成的,共分为S个组,每个组中有E个缓冲行,对于每个缓冲行来说,其主要由三部分组成:有效位(1bit)、标记位(t bits)以及1个缓存块组成,这个缓存块由B个字节组成。因此,高速缓存存储器的大小为C=S×E×B。其中有效位用来表明当前缓冲行的缓存块数据是否有意义,有意义即为1;标记位用于判别是否缓存命中的关键信息。

       而另一方面,内存中每一个单元都拥有其地址,而每个地址则对应高速缓存存储器中的一个块。假设地址为m位的,那么这m位的地址构成如图所示:

                     

       如图所示,m位的地址中,低b位表示块偏移,这b位共对应有2^b种偏移情况,即是0~B-1字节;中间的s位为组索引,用来确定该地址映射到哪一个缓冲组里的,s位共对应2^s种情况,相应的就是组0~组S-1;然后就是高t位标记位了,只有当高速缓存存储器中某一缓存行的有效位为1,标记位与该地址中的t个标记位完全相同时,才能认为高速缓存命中,然后根据b位偏移来选择起始字节。

        当CPU执行一条读内存字w的命令时,它会向L1高速缓存请求这个字,来看w是否在L1缓存命中。这时就会先根据w的地址的中间s位来确定w是在哪一个缓存组中,然后再根据t位标记位来确定w是在哪一个缓存行中,最后根据b位来确定w的偏移量从而确定w的起始字节。因此,整个过程分为三步:①组选择;②行匹配;③字抽取

1.2 直接映射高速缓存

        所谓直接映射高速缓存,就是每个缓存组中只有1行,即E=1。如图所示。

      

       由于每个缓存组中只有一行缓存行,因此根据地址的s位即可确定缓存行的位置,然后再通过低b位确定起始字节。现在假设CPU每次读取一个字节的字,且高速缓存的描述为(S,E,B,m)=(4,1,2,4),根据S=4,因此缓存组一共有4组,那么就需要s=2位来选择是哪一个组;根据B=2,那么缓存块有2个字节,因此就需要b=1位来选择偏移字节。它的初始结构如下:

<

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值