取指阶段可能从Cache中取
假设每个指令分三个阶段,每个阶段时间相同
时空图与指令执行过程图的区别在于纵坐标不同
时空图的纵坐标是不同阶段的指令过程
指令执行过程图的纵坐标是各个指令
k是一个指令的k个阶段
单位时间内完成的指令数量
装入时间:各个硬件全部开始接着工作的时间
排空时间:各个硬件开始接着退出工作的时间
空闲时间不会随着任务量的增加而增加
RISC下操作数直接来自通用寄存器
M:访存阶段
WB:写回通用寄存器组阶段
五段式指令流水线
大部分情况下都能从Cache中取到指令
大部分情况访问主存也能从Cache访问到
指令和数据可以用两个独立的Cache存储
ID:将操作数从通用寄存器取出
Imm:存指令的立即数
ALU计算的结果可能写回主存,也可能直接写回通用寄存器
资源重复配置就是将本来访问的资源在一个地方的,现在将其分成两个地方,这样就不冲突了
这是由于后面的指令依赖前面的指令产生的结果来进行运算,如果按理想化顺序执行,此时后面的指令用到的r1的数据是没经过第一条指令修改的
bubble就理解啥都没做,相当于过了一段时间,才开始执行第二条指令
用nop来等待
数据旁路技术即将ALU的结果的数据线连到ALU的某个输入端,就不用等待写回操作了
编译优化
即调整指令顺序,把不需要依赖前面指令执行的结果的指令移到前面去执行
就本来按流水线执行的话,修改完PC后此时后面的指令已经开始了部分了,但此时下一条应该运行的指令并不是这样已经运行部分的指令,所以此时会冲突
简单预测就是直接把某种情况对应的某些指令紧接跳转指令流水线执行
预取的话就是把两种结果的指令流水线都有了,但怎么执行会还会有选择
就是提前判断好,从而好安排后面的指令流水线
提高猜对概率呗
部件功能流水线就是一个微小的操作可为几个部分,多个操作又可以进行流水线
套娃吧
处理机间 就是各个处理机作为流水线上,(第一行一个一个处理机排列,同时第二行一个一个处理机排列,下同)
处理机 就是处理机内部的功能部件作为流水线上
部件功能级 就是部件内部的子功能部件作为流水线上
单功能流水线即流水线上的部分都是为完成一个功能而做的
多功能流水线即通过流水线上的部分之间的连接多种组合实现一条流水线完成多种功能
静态流水线即连接方式固定
动态流水线即连接方式可变,从而实现复杂功能
线性流水线即流水线没有回路
非线性流水线相反喽
不能调整的指令的执行顺序是考虑的相互间的依赖关系
此时多个CPU多个指令寄存器从而并发运行多条指令
即充分利用机器周期内的内部时间,再细分化到一个机器周期内何时能开始后面的指令,或者某些部件何时开始不用了,这样就能开始运行指令的某些部分了,类似部件功能级流水线
此时由于一个CPU只能执行一个操作码的对应功能,此时合并需要多个CPU执行各个操作码