我到现在也没弄清楚到底怎么通过转发解决数据冒险
程序执行过程大多数都在第一章学过了,值得注意的是通过程序计数器来决定执行顺序
这一章主要是前者
也就是说,指令地址计算,指令操作的译码,操作数地址的计算,数据的操作
而具体的取指令、取操作数、存操作数,是属于IO的内容
指令执行过程执行过程
取指令、译码
计算源操作数地址取操作数
运算(数据操作)
目的操作数计算并存结果
(指令地址计算并将其送往PC)
需要注意的是其中一句话——若是存储器数据,需要进行访存,若是寄存器数据,在进行数据操作时直接存结果到寄存器(看起来是第三阶段和第五阶段的区别)
流水线1.0
流水线2.0
到底用哪个……我真的是受不了
到底怎么算……取倒数就行了
安排
脑死亡图
1.load指令是要到mem生效
2.add指令在exe生效
3.使用数据是在exe
4.所有的冒险肯定是数据不在同一个位置(好比说,如果都是取数据作为加数中的一个是不会冒险的,只有一个为结果一个是因子的时候才可能)
5.相邻不可解
6.隔两个的loaduse不可解
冒险的情况
总而言之一句话,就是通过阻塞和调整程序执行顺序,把无关的语句调到中间,实在不行的,用阻塞的方法,进行说明
例子
栗子
小结
其实一般的过程按照,取址、译码/取数、运算、访问、存结果来进行。
那么问题来了,人类的本质是?
略略略
网友评论