存储器、cache、cache line解析

存储器

理想的存储器:速度与CPU的速度一样,这样CPU执行命名就不会受到存储器速度的限制. 但现代存储器无法同时满足三个条件(速度极快、充分大、非常便宜)。

存储器类型:

寄存器

与CPU相同的材料制成,速度与CPU相同;典型容量32位CPU是32 * 32;64位是64 * 64

高速缓存cache:

多由硬件控制,主要作用是减少CPU访问内存的次数:

cache分成多个组,每个组分成多个cache line,linesize是cache的基本单位,从主存向cache迁移数据都是按照linesize为单位替换的。比如linesize为32Byte,那么迁移必须一次迁移32Byte到cache。但是同个cache的linesize总是相同的

内存地址和cache之间的映射关系

取内存地址中间几位来映射。
例如cache的规格如下:

data cache: 32-KB, 8-way set associative, 64-byte line size:
Cache总大小为32KB,8路组相连(每组有8个line),每个line的大小linesize为64Byte,一共有32K/8/64=64 个组

对于32位的内存地址,每个cache的line有2^6 = 64Byte。

地址[0~5]共6位(2^6=64)可以确定取line中哪个字节
地址[6~11]共6位(2^6=64)可以确定64组中哪个组
地址[12~31]8个一组中8个line中的哪个line??
如果找到的了line且line有效,即高速缓存命中(如此CPU就直接从高速缓存取数据)

内存地址的三个区间(小端模式):

中间的s位决定了该单元被映射到cache的哪一组,
最低的b位决定了该单元在cacheline中的偏移量(即取哪个字节)
tag是高t位,用于检测该cacheline是否是CPU要访问的内存单元

Cache的逻辑结构:

一个cache被分为S个组; 每个组有E个cacheline;
一个cacheline中,有B个存储单元(字节为单位);
valid通常是一位,代表该cacheline是否是有效的

结论:当tag和valid校验成功,即高速缓存命中
当tag和valid校验失败,即cache miss。即要访问的内存单元不在cache中,需要去内存中取一个cacheline大小的内存区域
放到cache相应的cacheline

cache line(高速缓存行)

高速缓存被分割为cache line,每个cache line完全是在一个突发读操作周期中进行填充或者下载的。
当从内存中取单元到cache中时,会一次取一个cacheline大小的内存区域到cache中,然后存进相应的cacheline中

cache分成三类

1 直接映射高速缓存,这个简单,即每个组只有一个line,选中组之后不需要和组中的每个line比对,因为只有一个line。
2 组相联高速缓存,这个就是我们前面介绍的cache。 S个组,每个组E个line。
3 全相联高速缓存,这个简单,只有一个组,就是全相联。不用hash来确定组,直接挨个比对高位地址,来确定是否命中。可以想见这种方式不适合大的缓存。想想看,如果4M 的大缓存 linesize为32Byte,采用全相联的话,就意味着410241024/32 = 128K 个line挨个比较,来确定是否命中,这是多要命的事情。高速缓存立马成了低速缓存了。

cache分级

一般将cache分为2~3级,L1, L2, L3。L1一般为CPU核芯专有,不在CPU的多核芯中共享。L2 cache一般是CPU的所有核心共享。

内存

cache line(高速缓存行):

内存被分割成高速缓存行(cache line),32位的内存每个line的典型大小为2^6=64bytes,地址0~63对应高速缓存行0(cache line 0),地址64~127对应高速缓存行1,依次类推, 最常用的cache line常放置在高速缓存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值