1. 流水线实现多周期指令简图
2. MIPS流水线基本流程
1. 取指令;
2. 读寄存器和译码;
3. 执行ALU和地址计算;
4. 存储器访问;
5. 写结果到寄存器。
3. 非流水与流水的对比:
非流水的执行时间
– 3条指令共需3×800=2400ps。
2. 流水线的执行时间
– 3条指令共需1000+200×2=1400ps。
3. 当有数百万条指令时:
– 对每一条指令来说,非流水线仍然是800ps,流水线则是200ps ;
– 流水线/非流水线=(800*n)/(1000+200*(n-1))=4 倍。
4. 理想的情况下,流水线的级数就是比非流水线的性能提高的倍数。
5. 事实上,流水线总是存在一些额外的开销,因此流水线执行时间比流水各段的执行时间要大。
6. 流水线通过提高吞吐率改善性能,并没有减少单条指令的执行时间。
4. 适合于流水线的MIPS指令特点
MIPS的指令都是等长的(32位);
访存指令不存在两次访问存储器的可能。
5. 流水线冒险
流水线冒险(pipeline hazards): 下一条指令不能在流水线中的下一个周期执行。称为流水线冒险。主要有以下三种流水线冒险:
– 结构冒险(structural hazards)
由于硬件资源的局限,不能在同一个周期执行一些指令的组合。
例如:
若在指令流水线中,硬件资源中仅有一个独立的存储器,而不是两个分离的独立存储器,就会造成因资源不够而使流水线发生停顿。
– 数据冒险(data hazards)
流水线中指令的执行在适当的周期内的得不到可用的数据,而引起流水线停顿,称之为数据冒险。
数据冒险是由数据的相关性造成的。
硬件的解决方案是:
旁路(bypass)或称向前传递(Forwarding)
– 控制冒险(control hazards)
流水线中的下一条指令要不要执行,需要等待转移指令的结果后,才能确定。
• 解决的方法
加入停顿,等待决策的指令执行完。这种方法效率低,但可用。
6. 流水线的数据通路
流水线的5个阶段:
1. 取指令;
2. 译码和读寄存器;
3. 执⾏ALU和地址计算;
4. 存储器访问;
5. 写回结果。
五级流水线数据通路如图所示:
7. 流水线控制通路的设计
需要注意以下五个阶段的控制信号的产生。
取指令阶段:
– 读寄存器;
– 总是写PC;
– 无特殊的控制信号;
译码阶段的控制信号:
– 所有的都读,无附加的控制信号;
EX阶段:ALU计算的控制信号;
存储器访问的控制信号;
写回的控制信号。