Cache的理解

1.为什么要学习cache?

对于程序员来说,cache的知识点是非常的重要的,
理解cache的工作原理,可以有效的提高我们的代码思路,提升代码的执行效率。

2.cache的类型有那些?

一般说cache有两种类型,
一种是老的两级缓存(L1,L2),
另外一种是新的三级缓存(L1,L2,L3)。

3.对于L1,L2,L3有什么区别呢?

1)速度上,L1最快,L3最慢。
(2)大小上,L1最小,L3最大。
(3)距离CPU的距离,L1最近,L3最远。
(4)缓存方式:L1有两种,分别是指令缓存和数据缓存,L2,L3不分缓存方式。

在这里插入图片描述
4.那么为什么说要用三级缓存?

1)物理限制:更多的缓存级数会导致传输路径变成,从而影响通信的速度。
(2)多核技术:那么为什么不用一级呢,cache和RAM的速度差距很大,多级缓存
有利于在多个CPU进行中进行同步。

5.什么是cache line?

对于CPU来说是一个字节一个字节加载的,但是这样非常的没有效率,在cache中,
是一块一块的加载的,这个一块就是cache line,一个块的大小是64bytes,
64Bytes也就是1632位的整型,一个整型是4个bytes。

5.为什么需要映射?

Cache的数据放置的策略决定了内存中的数据块会拷贝到
CPU Cache中的哪个位置上,因为Cache的大小远远小于内存,所以,
需要有一种地址关联的算法,能够让内存中的数据可以被映射到Cache中来。

6.有哪些映射方法,它们的实质是什么?

1)全相联映射:任何一个地址都可以缓存在任何一个cache line里面,
这种方法非常的灵活,但是如果要知道一个一个内存是否在一个cache中,
就需要遍历所有的cache line,这非常的没有效率。
(2)直接映射:为了降低搜索算法,我们要使用像hash table这个的结构,
最简单的hash 结构就是做求模运算,比如我们L1的cache有512个cache line,
那么公式(内存地址mod 512*64,就可以直接找到所在的地址偏移了,
但是,这样的方式需要我们对于内存的访问非常的平均,不然容易产生hash冲突。
(3)组相联映射:为了缓解hash冲突,可以把N个cache line绑在一组,可以
先找到一个组,然后在组内找到这个cache line。

在这里插入图片描述
7.有人会问什么是哈希?

哈希表,也称为散列表,也就是说,它通过关键字 key和一个
映射函数 Hash(key)计算出对应的值 value,
然后把键值对映射到表中一个位置来访问记录,以加快查找的速度。
哈希表呢,有一个比较严重的问题,
不同的关键字通过同一个哈希函数可能得到同一哈希地址,
即 key1 ≠ key2,而 Hash(key1) = Hash(key2),这种现象称为哈希冲突。

详细解释:哈希表(HashTable)
8.多核缓存存在的问题?
(1)缓存的命中

这里给一个组相联的例子来模拟如何缓存命中,
Intel处理器大多数,L1的cache都是32k,8-way的组相联,
一个cache是64byte,所以32KB可以分为512条cache line,
每条way是64个cache line,相当于一条way的容量为64*64byte。
Tag:每条cache line前都会有一个独立分配的24bites来存在tag,其就是内存地址
的前24bits。
index:内存地址后续的6个bits则是在这一way的是cache line索引,2^6=64刚好
可以索引64条cache line。
offset:再往后的6bits用于表示再cache line里的偏移量。

在这里插入图片描述

处理过程,这个32bit的地址可以映射64GB的内存,因为2^32=64GB;1)首先根据index的6个bit确定是哪一个组,
(2)再根据24bit tag来确定是哪一个cache line,

(2)缓存一致性

对于主流CPU来说,写操作主要有两种策略
(1)write back,写操作只写在cache上,然后在flush在内存上
(2)write through,写操作的同时写到cache内存上
为了提高性能,主流的cpu都是采用write back策略,
关于一致性的问题,还是看原文吧,我还没怎么看明白。

内容摘抄自:与程序员相关的CPU缓存知识

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马志高

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值