CPU Study-Cache Components

参考来源:《超标量处理器设计》—— 姚永斌
推荐阅读:https://zhuanlan.zhihu.com/p/102293437?utm_psn=1823039848652599296

可以先看知乎这篇文章,有了对Cache基本概念后再从CPU设计视角看下面内容。

Cache的两个Block

Cache由两部分组成:TAG Block + Data Block。
Data Block
包括Index + Block Offset。
Index作为在Cache Block中的Cache Line索引。
Offset则可以用来确定指定地址中的不同字节位置(例如3bit的offset:010,就可以定位到8Byte中的第2个Byte的Data)。

TAG Block
TAG为完整地址减去Data Block后的剩余公共地址。
根据TAG以及Index是否为物理地址,可产生PIPT,VIPT和VIVT三种不同的组织方式。

由于两部分的空间分布是分开的,TAG的比较和Index索引是可以并行执行(时钟频率低但是周期短)的,当然也可以串行执行(时钟频率高但是多一个周期)。

Cache组成方式

直接映射
CPU访问存储器的地址会被分为三部分:Tag + Index + Block Offset。
直接映射
每个Cache Line在Cache Block中会有一个单独的Index(Cache Data Size ≈ 2 ^ (bit number of index + bit number of Block Offset))。
而存储器地址中index部分相同的地址都会映射到同一条Cache Line,而存储器中的数据也只能放在一个Cache Line中。
因此需要通过tag判断Cache Lin存储的地址是否hit CPU需要访问的存储器地址。
这样就会产生CPU需要访问的地址,虽然index在Cache Line命中率,但是经常存在TAG不相同的问题(Cache miss)。

组相联
组相联
存储器中的一个数据可以放在多个Cache Line中(可以放在n个位置,这就是n路相联的Cache)。
这样扩大了相同index不同地址的命中率,但还是要通过比较tag确认是否 hit。

全相联
全相联
存储器中的一个数据可以放在任意一个Cache Line中(不再有index,比较tag即可)。
约等于直接寻址存储器部分区域。
通过内容寻址的存储器(CAM Content Address Memory)存储TAG value,TAG hit直接输出数据(Cache miss概率低,但是latency严重)。
一般这种结构不会有太多容量(TLB采用此结构)。

Cache写入

Write Through 写通
当数据写到Data Cache时,也写到下级存储器中。较为耗时,一致性管理简单。

Write Back 写回
数据写到Data Cache时,只对Cache Line作dirty标记,并不写到下级存储器中。只有此Cache Line被替换时,才写到下级存储器。

Non-Write Allocte
发生Write Miss时,直接将数据写到下级存储器,不写到Data Cache。

Write Allocate
发生Write Miss时,先从下级存储器将缺失地址的整个data block提取,再合入要写的数据,最后把修改过的data block写到Data Cache。

注意:Write Miss时,要考虑直接操作Cache Line的风险。此时Cache Line没有对应的Address信息,直接写入会导致Cache Line和下级存储器信息不一致,可能会间接导致此Cache Line替换时下级存储器正确数据被覆盖。

Cache替换

处理器中Cache替换算法一般都是Hardware Module实现,尽量避免复杂逻辑影响处理器周期时间过长。
LRU Least Recently Used
选择最近使用次数最少的Cache Line。
在N-Way相联的Cache中,一般采用log2(N)层级的伪LRU策略,即二分法分组判断哪一路Cache Line可以被替换。

随机替换
不记录各个way中Cache Line的年龄信息,随机选择某个way的Cache Line。
一般采用时钟算法作为随机策略,利用一个计数器周期增加1,在替换时根据时钟计数器确定way(计数器宽度与N-Way)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值