流水线的整体效率取决于最耽误事的那个结点,即流水线级数中最长延迟那个。(因为流水线是前后顺序传递的)
之所以会有超级流水线,就是因为有多级流水线中最耽误事的结点存在,所以将这个结点细分。因为这是这是影响全局的关键因素,但并不是说越细分就越越好,细分是有成本的,增加流水线寄存器也是要有延迟的。所以当增加的流水线延迟大于细分分开的延迟,那就得不偿失了。
一共三种冒险,分别是数据冒险、结构冒险、控制冒险,可以直接从其名字加以区分,但是理解不到位,容易混淆。
数据冒险:与数据有关,数据的产生与ALU有关,所以,这里的冒险是指,ALU计算出数据还没有回写时就要被用到,那正常情况一定是用不到的。(不过有解决方法:数据前递,但也不是完全解决,比如正在进行ALU计算时就要这个数据,那也是得不到的)
结构冒险:与结构有关,比如指令和数据放在了同一个存储器,因为一次允许一个指令读,所以要冒险;还有读寄存器和写寄存器同时发生,又是发生争抢,要冒险。
控制冒险:控制去哪呗,比如一个分支指令,还不清楚下一步要去哪的时候,执行紧随它之后的指令是很悬的,所以又要冒险了。
原文:https://www.cnblogs.com/ZealYoung/p/10895900.html