存储层次的基本概念
CPU与RAM的速度剪刀差
(1)摩尔定律:
• CPU的频率和RAM的容量每18个月翻一番
• 但RAM的速度增加缓慢
(2)通过存储层次来弥补差距:
• 寄存器、Cache、存储器、IO
处理器和内存速度剪刀差
- 早期Alpha处理器Cache失效延迟:
• 1st Alpha (7000): 340 ns/5.0 ns = 68 clks x 2 or 136
• 2nd Alpha (8400): 266 ns/3.3 ns = 80 clks x 4 or 320
• 3rd Alpha (t.b.d.): 180 ns/1.7 ns =108 clks x 6 or 648 - 当前主流处理器主频2GHz以上:
• IBM Power 6主频6GHz以上
• 内存延迟50ns左右
• 访存延迟>100拍 - 多发射加剧了访存瓶颈
摩尔定律使CPU的内容发生了变化
(1)冯诺依曼结构的核心思想:
• 存储程序:指令和数据都存放在存储器中
(2)计算机的五个组成部分:
• 运算器、控制器、存储器、输入、输出
• 运算器和控制器合称中央处理器(CPU)
(3)为了缓解存储瓶颈,把部分存储器做在片内:
• 现在的CPU芯片:控制器+运算器+部分存储器
• 片内Cache占了整个芯片的很大一部分面积
计算机硬件系统的组成
CPU中RAM的面积和晶体管比例
RAM所占的面积比例小于晶体管:因为RAM很规则,可以做到很密,而普通逻辑不行;
存储层次基本原理
- 程序访问的局部性:时间局部性和空间局部性
• 新型的应用(如媒体)对传统的局部性提出了挑战
Cache结构
cache的结构
(1)cache特征:
- Cache的内容是主存储器内容的一个子集
- Cache没有程序上的意义,只是为了降低访存延迟
- 处理器访问Cache和访问存储器使用相同的地址
(2)cache结构特点:
- 同时存储数据和地址以及在cache中的转态;
- 通过地址的比较判断相应数据是否在Cache中 ;
- 需要考虑所需要的数据不在Cache中的情况:替换机制,写策略等;
(3)cache分类:
1)cache块的位置:同一单元在不同结构Cache中的位置
- 全相联:
命中率高;硬件复杂、延迟大;
- 直接相联:
命中率低;硬件简单、延迟最小;
- 组相联:
介于全相联和直接相联之间;
- 例题:
2)Cache替换算法:
- 常见的替换算法:随机替换、LRU最近最少使用、FIFO先进先出
- 对直接相联Cache不存在替换算法问题;
- 每1000条指令失效次数统计:
- SPEC CPU2000中的gap, gcc, gzip, mcf, perl, applu, art, equake, lucas, swim 10个程序
- Aplha结构,块大小64B
3)写命中时采取的策略:
- 写穿透(Write Through):
• 写Cache的同时写内存
• 内存里的数据永远是最新的,Cache替换时直接扔掉
• Cache块管理简单,只需有效位 - 写回(Write-back):
• 只写Cache不写内存
• 替换时要把Cache块写回内存
• Cache块状态复杂一些,需要有效位和脏位 - 写回/写穿透的使用:(CPU<—>L1(常在CPU内)<—>L2<—>内存)
• L1到L2用写穿透的多,L2较快
• L2到内存用写回的多,内存太慢了
• 龙芯2号两级都采用写回策略
4)写失效时采取的策略:
- 写分配( Write Allocate ):
• 先把失效块读到Cache,再在Cache中写
• 一般用在写命中时采用写回策略的Cache中 - 写不分配(Write Non-allocate):
• 写Cache失效时直接写进内存
• 一般用在写命中时采用写穿透的Cache中
Cache性能优化
Cache性能分析
- CPU执行时间与访存延迟的关系
- 平均访存时间AMAT = Average Memory Access Time
- CPIALUOps 不包括访存指令
Cache性能优化
- 降低失效率(MissRate)
- 降低失效延迟(MissPenalty)
- 降低命中延迟(HitTime)
- 提高Cache访问并行性
降低失效率
(1)引起Cache失效的因素(3C/4C):
- 冷失效(Cold Miss或Compulsory Miss) :
• CPU第一次访问Cache块时Cache中还没有该Cache块引起的失效;
• 冷失效是不可避免的,即使Cache容量再大也会有; - 容量失效(Capacity Miss) :
• 程序执行过程中,有限的Cache容量导致Cache放不下时替换出部分Cache块,被替换的Cache块再被访问时引起失效;
• 一定容量下全相联Cache中的失效; - 冲突失效(Conflict Miss) :
• 直接相联或组相联Cache中,不同Cache块由于index相同引起冲突;
• 在全相联Cache不存在; - 一致性失效(Coherence Miss):
• 由于维护Cache一致