体系结构复习-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 their time 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
读不命中优先级高于写不命中(Read over 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段
经典的乱序执行算法有两个:记分牌动态调度算法与算法
记分牌动态调度算法
视频介绍(科学上网)
上述视频讲得很清楚了。记分牌算法的核心在于三张表:
记分牌算法保证每个周期只要某指令没有结构冲突以及不存在WAW冲突(即其他正在执行的指令的目的寄存器与当前指令的目的寄存器不同)就能够发射该指令
有一点不一样,教材上对Rj, Rk的修改是若源操作数被读走后也应表述为no
算法
基本思想为寄存器换名
2.4 动态分支预测技术
分支预测器由两个操作构成,它们分别是分支预测()与状态更新()
2.4.1 分支历史表( Table)
适用范围:
判定分支是否成功所需时间大于确定分支目标地址所需的时间
由于前面的流水线判定分支成功与计算分支目标地址都是在ID段完成的,因此BHT方法不会给其带来明显的好处
2-bit BHT状态转换图如下:
2.4.2 高级分支预测技术 2.4.3 分支目标缓冲器( )
BTB的目标是将分支开销降为0
结构如下:
分析BTB带来的额外延迟:
指令在BTB中?预测实际情况额外开销
是
成功
成功
是
成功
失败
否
失败
成功
否
失败
失败
注:BTB的修改将带来额外一个周期的开销,而当预测与实际不符时,我们需要对BTB进行修改,因此预测结果不正确时需要引入额外2个周期开销
2.4.4 多发射
每个周期发射多条指令,CPI < 1
MIPS处理机每个时钟周期发射两条指令:1条整数型指令 + 1条浮点操作指令,需要增设浮点寄存器读写端口