什么是流水线
的(强制式),也可以是非同步传输(柔性式),根据配置的选择,可以实现装配和输送的要求。输送线在企业的批量生产中不可或缺。
与真数据相关不同,名相关的两条指令之间并没有数据的传送,只是使用了相同的名而已。如果把其中一条指令所使用的名换成别的,并不影响另外一条指令的正确执行。
指令j用到指令i的计算结果,而且在i将结果写入寄存器之前就去读该寄存器,因而得到的是旧值。这是最常见的一种数据冲突,它对应于真数据相关。图3.23中的数据冲突都是写后读冲突。
分支指令如果分支“成功”,就把在前一个周期中计算好的转移目标地址送入PC。分支指令执行完成;否则,就不进行任何操作。
这里的名是指指令所访问的寄存器或存储器单元的名称。如果两条指令使用了相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。指令j与指令i之间的名相关有以下两种:(1)==反相关(Anti-Dependence)==。如果指令;所写的名与指令所读的名相同,则称指令i和;发生了反相关。反相关指令之间的执行顺序是必须严格遵守的,以保证i读的值是正确的。(2)
流水线生产线
相关(dependence)是指两条指令之间存在某种依赖关系。如果指令之间没有任何关系,那么当流水线有足够的硬件资源时,它们就能在流水线中顺利地重叠执行,不会引起任何停顿。但如果两条指令相关,它们也许就不能在流水线中重叠执行或者只能部分重叠研究程序中指令之间存在什么样的相关,对于充分发挥流水线的效率有重要的意义。相关有三种类型:数据相关(也称真数据相关)、名相关、控制相关。1)
可以看出,为消除结构冲突而引入的停顿将影响流水线的性能。由于这种冲突出现的频度不低,因此一般是采用分别设置*的指令存储器和数据存储器方法,或者仍只设置个存储器,但采用两个分离的Cache:指令Cache,数据Cache。
当ID段检测到分支指令时,让流水线空等是一种“不作为”的策略,是一种“懒惰”的处理方法,显然不可取。可以让流水线通过预测选择两条分支路径中的一条,继续处理后续指令。预测有两种选择:猜测分支成功,或者猜测分支失败。不管哪一种,都可以通过编译器来优化性能,让代码中最常执行的路径与所选的预测方向一致。
在后面的讨论中,我们约定:当一条指令被暂停时,在该暂停指令之后流出的所有指令都要被暂停,而在该暂停指令之前流出的指令则继续进行。显然,在整个暂停期间,流水线不会启动新的指令。
需要说明的是,这里给出的方案并不是性能最好或者成本最低的,它只是用来帮助我们更好地理解指令流水线的原理和实现。
车间流水线
这就是换名(renaming)技术。对于寄存器操作数进行换名称为寄存器换名(RegisterRenaming)。
注意:这里默认使用了bypassing旁路技术,上一条指令的MEM出来的数据直接旁路到下一条指令的ALU输入
综上所述,预测分支失败时,如果分支真失败了,不会发生停顿(stall),但是如果预测分支失败,分支成功了,就会发生一个停顿(stall)。
添加新评论