体系结构复习-Part 2-Cache + 指令级并行

体系结构复习-Part 2-Cache + 指令级并行1.3 Cache性能(Cache ) 1.4 并行访问存储器2. 指令级并行及其开发
体系结构复习-Part 2-Cache + 指令级并行
注:本文中图片截自清华大学汪东升教授体系结构Cache基础部分
1. Cache与存储 1.1 CPU &Gap
’s Law
N = λ × T N = \ \times T N=λ×T
假设:每次访存将带来100个时钟延迟、平均每条指令将访存1.2次
分析:
顾客到达速率 => 指令平均访存次数 => λ = 1.2
每个顾客停留时间 => 访存带来的时延 => T = 100
所以,在稳定状态下,系统中正在执行的访存指令有
N = λ × T = 1.2 × 100 = 120 N = \ \times T = 1.2 \times 100 = 120 N=λ×T=1.2×100=120
1.2 Cache结构
Cache设计的核心思想是局部性,依据拇指法则:
spend 90% of theirtime in only 10% of code
1.2.1 局部性()
空间局部性( )
1.2.2 Cache需要解决的4个关键问题
通常来讲,Write Back与Write 结合使用;Write Thru与No-Write 结合使用
1.2.3 Cache缺失类型
针对3C问题提出的三种策略:
增大组相联度
组相联度越高,缺失率越低黄金准则:CPU时间是检验Cache性能的唯一准则
增大Cache Block
1.3 Cache性能(Cache )
核心:
Time (AMAT) = + *
本节主要对、以及进行讨论,从而优化Cache性能
1.3.1 AMAT
推导过程如下:
A M A T = H i t R a t e × H i t T i m e + M i s s R a t e ? ( H i t T i m e + M i s s P e n a l t y ) = H i t T i m e + M i s s R a t e ? M i s s P e n a l t y AMAT =\times+* ( + ) =+*AMAT=×+?(+)=+?
1.3.2 降低Miss Rate
数据级
1.3.3 降低Miss
快重启与关键字优先(Early&Word First)
这种方法加快了未命中时CPU的重启速度,降低了CPU等待时间,从而降低了Miss
读不命中优先级高于写不命中(Readover Write on Miss)
这种做法降低了未命中时读带来的延时,从而降低了Miss
写缓冲合并( Write )
将对相同地址的小小的写入合并为一个大大的写入,如下图所示
这种做法增加了Write 的利用率,减少了因Write 满而等待的时间,从而降低了Miss
1.3.4 降低
最左:物理Cache,通过TLB将VA转化为PA,未命中则访存
中间:虚拟Cache,直接通过VA寻址,若未命中则访存
最右:虚拟Cache,把VA同时送给Cache和TLB,如果Cache未命中,那么找下层存储器,而地址翻译可并行,因此相对物理Cache快许多
总而言之,虚拟Cache避免了地址的转化,能够获得更高的性能,但是多个进程的虚拟地址可能相同,这导致了歧义问题(),可以通过添加PID标识符、清空Cache来解决该问题
另外,不同的进程的虚拟地址可能映射到相同的物理地址,这导致了别名问题(Alias,修改同一份数据),我们需要在虚拟Cache中维护更多的数据拷贝
1.3.5 歧义问题、别名问题详解
这两个问题产生的基础都是引入了虚拟Cache
1.4 并行访问存储器 1.4.1 交叉访问存储器1.4.2 无冲突访问存储器
2. 指令级并行及其开发 2.1 基本概念2.2 相关与指令级并行
数据冲突
控制相关
由分支指令引起的相关
举一例:
if(condition1){statement1;}statement3;if(condition2){statement2;}
两个限制:
正确执行程序需要保证的两个关键属性
2.3 指令的动态调度
静态调度:编译器调度
动态调度:硬件调度代码
注意:在基本流水线中,我们将结构冲突与数据冲突的检测放到了ID段
经典的乱序执行算法有两个:记分牌动态调度算法与算法
记分牌动态调度算法