戴球森集团
飞书用户9772
添加快捷方式
分享
简单流水线冒险的处理-王京-2023.9.28
输入“/”快速插入内容
简单流水线冒险的处理-王京-2023.9.28
此次讲义主要处理的单周期顺序的情况
1.
流水线冒险的几种类型
结构冒险
•
结构冒险
◦
结构冒险的现象和对策
▪
结构冒险的现象
•
同一个部件同时被不同
指令
所使用
▪
结构冒险的对策
•
一个部件每条
指令
只能使用1次,且只能在特定周期使用
•
设置多个部件,以避免冲突。如
指令
存储器
IM
和数据存储器
DM
分开、寄存器堆的写口和读口独立设置
数据冒险
•
数据冒险
◦
数据冒险的现象和对策
▪
数据冒险的现象
•
基本流水线仅考虑
RAW
冒险
(详情见2.1.1)
: 后面
指令
用到前面指令结果时,前面指令结果还没产生
48%
52%
▪
数据冒险的种类 :
▪
数据冒险的解决方法
•
方法1:硬件阻塞(stall) 即“气泡Bubble”
•
方法2:软件(即编译器) 插入“NOP”指令
•
方法3:编译优化:调整
指令
顺序,
能解决所有数据冒险吗?
•
方法4:合理实现寄存器堆的读 :合理实现寄存器堆的读/写操作,能解决所有数据冒险吗 ,能解决所有数据冒险吗? • 前半
时钟周期
写,后半时钟周期读 ,后半时钟周期读,若同一个时钟内前面
指令
写入的数据正 ,若同一个时钟内前面指令写入的数据正 好是后面指令所读数据,则不会发生数据冒险 ,则不会发生数据冒险 °
•
方法5:转发(
Forwarding
或Bypassing 旁路)技术,
能解决所有数据冒险吗 ?
◦
若相关数据是ALU结果,则如何?
46%
54%
▪
可通过转发解决
◦
若相关数据是上条
指令
DM
读出内容,则如何?
▪
Lw
指令
与随后第一条运算类的数据相关问题 不能通过转发解决,随后指令需被阻塞一个时钟 ,随后指令需被阻塞一个时钟 或 加
NOP
指令
▪
但
Lw
指令
与随后第二条及以后的都能用转发技术解决
52%
48%