组原5_指令流水线影响因素和流水线分类

目录

1. 机器周期的设置

2. 影响流水线的因素

3. 零碎概念


 

1. 机器周期的设置

组原5_指令流水线影响因素和流水线分类

对于这些硬件,取指阶段和访存阶段能够拆分为两段原因在于将指令和数据分开存储,否则取指的时候和存回数据的时候访问的都是存储器,就有可能产生硬件资源的冲突。

 

锁存器出现的原因在于机器周期取的是最长耗时,当某阶段不需要这么久,那么当这阶段完成产生的数据要提供给下一阶段时,如果直接流向下一阶段,那么可能破坏下一阶段的数据,因此需要先存储在锁存器中。

 

 

 

 

2. 影响流水线的因素

组原5_指令流水线影响因素和流水线分类

 

[1/3]资源冲突:

 组原5_指令流水线影响因素和流水线分类

这里 Mem 冲突是因为 上面是存运算结果到存储器,而下面是刚进入取指周期进入存储器取指令。故有第二种解决方案。

 

 

 

[2/3]数据冲突:

组原5_指令流水线影响因素和流水线分类

 

硬件阻塞效果图:                                                                        软件插入 nop 效果图:

组原5_指令流水线影响因素和流水线分类   组原5_指令流水线影响因素和流水线分类

 硬件模式是在中间插入硬件上的暂停。
软件的模式是在编写程序的时候,直接在后面编写一些空指令。(这些空指令是一些完整的指令,有完整的5个周期)

硬件模式是由硬件自动完成的,软件模式是要手动加入空指令来完成的。

 

 

解决方法2:数据旁路技术

组原5_指令流水线影响因素和流水线分类

 

 

解决方法3:编译优化

通过编译器调整指令顺序来解决数据相关。
比如后面的指令不需要用到 r1,那么就可以将那指令插到前面的来执行。

 

 

例题:

组原5_指令流水线影响因素和流水线分类

对I3所需要的 R1 和 R2 分别是在 5 6 单元准备好的。

一方面我们要回根据这些指令序列分析出他有什么样的冲突,另一方面对于数据相关来说要能写出表格中的执行流程图。

 

 

 

对于数据来说,对它的基本操作有读和写。冲突是因为后一条指令和前一条指令涉及到 同一存储单元的同一存储对象的操作。
数据相关的类型:

RAW  ==> A是 after ;所以是倒过来读的。  这里是 写后读。

组原5_指令流水线影响因素和流水线分类


对顺序发射、顺序完成的情况下,只可能出现第一种情况(前一条在写,后一条想读)。

对 RAW(写后读):前面指令是写,后面指令是读上一条指令写的内容。
对 WAR(读后写):在顺序发出并顺序完成的情况下将不存在问题;所以要是出现该问题一般是出现在乱序发射的情况。(乱序发射主要涉及到流水线优化的一些特殊技术)   【乱序发射】

对 WAW(写后写):前后两个操作都是对同一对象进行写。经常出现的一种情况是:前面是一种复杂的运算,后面是一种简单的运算。为了优化整个机器的效率,会布置一些重复的运算单元,比如说布置多个 ALU,这样前面指令使用其中一个 ALU 的时候,后面这条指令是可以使用其它的 ALU 进行运算的。但是乘法肯定比减法花的时间多,就有可能导致后面指令的结果优先提交,但在写这些指令的时候是希望前面先执行后面再执行的。所以这也是优化出现的问题。  【乱序完成】

 

 

 

[3/3] 控制冲突(控制相关)

前面两个相关,一个是由于资源不够用,一个是由前后的指令有逻辑联系。而控制相关则是由于出现了转移指令。

组原5_指令流水线影响因素和流水线分类

当前面这条是条件转移指令的时候,存在条件不满足时顺序执行,条件满足是需要跳到下一条指定的指令。有可能刚开始不停地往下取指令,取了半天发现这条指令要转移了,要取的实际是转移指令的下一条指令,前面取的这些就废了。

 

 

小结:

组原5_指令流水线影响因素和流水线分类

 

 

 

 

3. 零碎概念

 

流水线的分类:

组原5_指令流水线影响因素和流水线分类

 

组原5_指令流水线影响因素和流水线分类

地位:读一读,了解这些概念即可。

 

 

流水线的多发技术:

地位:要认真理解一下这些操作。

 

 

纵坐标既有空间概念,又有指令序列概念。黑色的块代表执行部件。
25:35 min 处