文章目录
前景
提高流水线效率的技术
(1)指令流水线:
• 多发射:多车道
• 动态调度:允许超车
(2)喂饱“饥饿”的运算器:
• 转移猜测:提供足够的指令
• 存储管理:提供足够的数据
• 冯诺依曼结构:存储程序和顺序执行
龙芯2号处理器核结构图
转移指令
控制相关
- 如果转移指令计算下一条指令地址在EX阶段计算,下一条指令等2拍 ;
- 解决方法:
①使用专门的地址运算部件把地址计算提前到译码阶段可以少等一拍:
②使用一个delay slot可以不用等待,但是多发射情况下延迟槽成为需要专门照顾的负担:
转移指令对性能的影响
(1)分支指令的影响是开发指令级并行性的重要障碍:
• 一条指令流中,平均每5-7条指令中就有一条是分支指令,也即基本块大小为5-7条指令
(2)增大发射宽度:
• 在发射宽度为n的处理器中,遇到分支指令的速度也快了n倍
(3)增加流水线深度:
• 流水线越深,处理分支指令所需要的时钟周期数就越多
(4)例子:
假设平均每8条指令中有一条转移指令,某处理器采用4发射结构,第10级流水解决转移地址相关(即第10级流水算出转移方向和目标):
(每次转移出问题,流水线停顿9拍,这9拍可发射36条指令,即浪费的指令带宽)
①在A系统中不进行转移预测,遇到转移指令就等待:
-指令带宽浪费36/(36+8)=82%; //相当于没发射8条指令,浪费一次
②在B系统中进行简单的转移预测,转移猜错率为50%,那么平均每16条指令预测错误一次:
-指令带宽浪费36/(36+16)=75%
③在C系统中,转移指令猜错率为10%,那么平均每80条指令预测错误一次:
-指令带宽浪费36/(36+80)=31%;
④在D系统中,转移指令猜错率为4%,平均每200条指令预测错误一次:
-取指令带宽浪费36/(36+200)=15%。
转移指令的属性
(1)条件转移与无条件转移:
• 条件转移:需等待条件确定后才能取指,程序中多数转移指令是条件转移指令
• 无条件转移:不用判断条件就转移,如call/return
(2)直接转移与间接转移:
• 直接转移:转移目标根据指令内容直接得出
• 间接转移:转移目标在寄存器中
(3)相对转移与绝对转移:
• 相对转移:转移目标为当前PC值加上偏移量
• 绝对转移:转移目标由指令或寄存器内容直接给出
由上可知:理论上有8种组合:实际上不实现所有组合
MIPS指令系统的转移指令
程序的转移行为
各统计结果
(1)SPEC CPU2000转移指令统计—龙芯2号统计结果
(2)转移指令间距离统计:
发射宽度增加,分支间的动态距离就会越小,分支预测的延迟对性能的影响就越大,当要求更高的发射宽度时,需要每个周期做不止一个预测;
例:Inter-branch distance(cycles) ,模拟环境:4发射乱序机器 @SPECint2000
(3)不同类型转移指令分布:
龙芯2号上部分SPEC CPU2000程序中转移指令分布:
• 1%是间接分支指令,采用BTB预测
• 5%是返回指令,返回地址栈RAS预测
• 29%是无条件立即跳转指令,跳转地址在指令中
• 65%是条件分支,大量的工作是进行条件分支预测
(4)转移指令的执行频率分布:
龙芯2号上部分SPEC CPU2000程序转移指令执行频率分布:
• 所有转移指令的44%仅仅执行99次或者更少,这44%的转移指令占所有转移指令总执行次数的0.03%;
• 只有4.2%的转移指令执行了超过100000次或者更多,占所有转移指令总执行次数的87%(或者说,只有14.7%的转移指令超过了10000次,占所有转移指令总执行次数的97%)。
(5)转移成功率分布:
龙芯2号上部分SPEC CPU2000程序转移指令的跳转成功率:
• 45%的指令总是跳转,15%的指令总是不跳转;
• 20%的指令跳转的几率小于5%或者大于95%;(80%的转移指令具有强烈的一个跳转方向,具有挑战性的工作是预测其余20%转移指令的跳转方向)
分支的可预测性
(1)利用单个转移指令的重复性:
基于模式的预测方法
- 循环型分支:
• for型循环:TT…TN(成功n次后跟一次不成功 )
• while型循环:NN…NT(不成功n次后跟一次成功) - 周期重复模式型分支:
• 定长重复模式类分支:{pat}^q , |pat|=k (每隔k个分支模式就重复一次)
• 块模式类分支:{T^n Nm}q, 成功n次,不成功m次,如此循环
(2)利用不同转移指令之间的关系:
基于相关的预测方法
- 利用指令间的方向相关