手机上的算法优化 —— cache miss

【前言】

cache是利用局部性原理(时间、空间),更好的解决硬件间速率不匹配的问。

现代CPU的Cache一般分为三级:

L1,Cache生产成本最高,容量最小,但是速度最快,处理器访问一级Cache中的数据一般只需要3~5个指令周期,一级Cache又分为数据Cache和指令Cache,分别缓存数据和指令;

L2,Cache不区分数据和指令,容量较大,速度较慢;

L3,Cache也称LLC(Last Level Cache),容量最大,而速度更慢。.

在多核时代,一般一颗CPU中,每核都有独立的一级和二级Cache,而多核之间共享三级Cache。

【Cache overview】

【 Multi-Cache】

CPU try load data from addrinclusive cache 大范围cache):

  1. Find data in L1if hitthen read data.
  2. If miss,Find in L2if hitreturn data to L1 and cpu.
  3. If miss,Find in L3if hit return data to L2 L1 and cpu.
  4. If miss,Find in DRAM, if hitreturn data to L3 L2 L1 and cpu.

【 Cache策略—— 读写】

1. 读分配(read allocation):CPU读取数据时,cache发生miss,系统分配一个cache line从主存中读取数据,并将数据返回CPU。

2.写分配(write allocation):CPU写入数据时:a.直接更新主存数据。b.将数据先读入cache line,然后更新cache line中数据。

【 Cache策略—— 更新】

1. Write through数据同时写入cache DRAM(主存)

2. Write Back数据只写入cache,仅当数据块被替换才写回主存(多CPU都在操作一块地址,其他CPU要操作地址了,就把数据写回主存)

【Cache Coherence Protocol  —— MESI】

【Cache miss】

  1. Conflict miss:多个存储器映射到同一cache位置,首先加载A数据,然后加载B数据时,就会出现B cache miss,因为现在cache里面存着A。
  2. Capacity miss:cache容量不足,只能保存1234,但是程序循环12345,就会导致cache miss,最好方法:修改程序,因为cache是一定量的。
  3. Compulsory Miss:第一次访问失效,cold start miss(冷启动失效)。
  4. Communication Miss:同一片memory地址被多个CPU缓存,就会出现miss。

【Cache 结构】

哈希表:类似哈希表 + 链表形式。

【Cache 查找方式】

         cache控制器在查找cache的时候,通常我们有3种方法,分别是:直接映射缓存、两路组相连缓存、全相连缓存。

        cache line大小是16字节(bytes)。CPU即使读取1byte,在cache缺失后,cache会从主存中load 16字节填充整个cache line。

从0x0654读取数据,0x0654成方式c:

010:index  100: offset

tag(0000011001):每一个cache line都对应唯一tag,tag中保存的是整个地址位宽去除index和offset使用的bit剩余部分。

valid bit:这个bit用来表示cache line中数据是否有效(例如:1代表有效;0代表效)。

过程:我们根据index --> 找到cache line,取出tag然后与tag相比较,相等:hit,if not miss

 

【Cache 替换算法】

  1. Random:硬件随机选择一个cache块替换。
  2. RR(Round-Robin):按照预先设定顺序依次选择cache块替换
  3. LRU:最少使用,替换历史最少使用cache替换

【Cache False Sharing例子: 优化】

slab 着色技术

global param A/B or class:
volatile int A;
volatile int B;

【Cache 应用】 

前提:CPU频繁访问某一段内存,访问率占90%。

1.时间局限性:循环程序中的循环体。

2.空间局限性:顺序程序的执行。

此外,我们可以利用编译器做到分支结构的预读取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值