指令流水线执行方式
计算机的流水线把一个重复的过程分解为若干子过程,每个子过程与其他子过程并行执行。由于采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,因此成为计算机中普遍使用的一种并行处理技术。
顺序执行方式
取指1 | 析指1 | 执行1 | 中断1 | 取指2 | 析指2 | 执行2 | 中断2 | ... | ... | ... | ... |
---|
假设机器周期为$\triangle t$,那么顺序执行n条指令的执行时间为$4n \triangle t$
流水线执行方案
执行5条指令的时间为: $5\triangle t+4\triangle t$
执行n条指令的时间为: $T+(n-1)\triangle t$
在指令级流水线中,吞吐率是指在单位时间内流水线所完成的任务数量,或输出结果的数量。计算流水线吞吐率(TP) 的最基本的公式如下: n是任务数,Tk是处理完n个任务所用的时间。
$TP=\frac{n}{T_k}$
$TP=\frac{n}{(k+n-1)\triangle t}$
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比,称为流水线的加速比。设T,表示不使用流水线时的执行时间,即顺序执行所用的时间:K表示使用流水线时的执行时间,则计算流水线加速比(S)的基本公式为
$TP=\frac{T_0}{T_k}$
$TP=\frac{kn\triangle t}{(k+n-1)\triangle t}= \frac{kn}{k+n-1} $
流水线的设备利用率称为流水线的效率。在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间及k个流水段所围成的时空区总面积之比。因此,流水线的效率包含了时间和空间两个因素:
n个任务占用的时空区有效面积T。
n个任务所用的时间与k个流水段所围成的时空区总面积
$TP=\frac{T_0}{kT_k}$
流水线的问题
每个阶段的时间不一样,所以我们取得阶段周期都是最大的那个!
每个阶段都有缓冲区,这种缓冲区用于保存本阶段的结果,用于下一阶段使用
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关
解决办法:
数据的基本操作: 读 (R) 、写(W)
冲突的基本类型 : RAW、WAR、WAW、
RAW:("按序发射,按序完成”时,只可能出现RAW相关)
I1: ADD R3,R2.R1: (R1)+(R1)->R3
I2: ADD R5,R3.R4: (R3)+(R4)->R5
WAR:
I1:STA M,R1: (R1)->M,M为主存单元 乱序发射,编写程序的时候希望1在2前完成但优化手段导致I2在I1前发射
I2:ADD R1,R2,R3; (R3)+(R2)->R1
WAW:(存在多个功能部件时,后一条指令可能比前一条指令先完成)
I1:ADD R3,R2, R1: (R1)+(R2)->R3
I2:SUB R3,R4, R5: (R4)-(R5)->R3
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关
解决办法
超流水线技术
在一个时钟周期内再分段 (4段)
在一个时钟周期内一个功能部件使用多次 (4次)
但是不能调整指令的执行顺序靠编译程序解决优化问题
超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。