指令流水啊

指令流水
一,如何提高机器速度
1.指令流水技术是当前计算机当中最常用的也是最有效的提高指令解释速度的方法。从结构功能比较简单的嵌入式处理器到结构复杂规模比较庞大的处理器当中都使用了流水线技术。
先回想一下计算机是如何提高速度的。计算机是由多个部件构成的,要提高计算机的速度,那么各个部件它的速度都要提高。
(1)提高访存速度,我们可以使用高速芯片。另外还有Cache,把最常用的指令和数据放入到从内存中取出放入到Cache当中,CPU通过访问Cache来访问到这些数据,进而提高存储系统的速度。还有多体并行,对多个存储体进行交叉访问,在一个主存周期当中,有多个存储体可以向CPU提供数据。或者在一个主存周期当中CPU可以访问多个存储体。
(2)提高了IO个主机之间的传送速度
刚开始数据传送的方式是使用程序控制方式,在这种方式当中,CPU和外部设备之间不能并行进行工作,实际上是以穿行的方式进行工作的,CPU和总线的利用率都比较低,为了解决这个问题,人们提出了中断方式。在这种方式下,CPU和外部设备之间可以部分进行工作。提高了CPU它的使用率,进而又提出了DMA方式,DMA方式减少CPU在传输数据的占用率,进而提高CPU的使用率。另外DMA控制器的功能被逐渐加强,又出现了通道方式和IO处理机方式。IO处理机方式直接进行数据校验,将CPU完全从IO中解放出来。
(3)提高运算器速度
同样我们可以采用告诉芯片,可以改进算法,采用快速进位连

还有一种方法提高整机处理能力
运用高速器件,改进系统结构,开发系统的并发性

二,系统的并行性
1.并行是有两个概念:
并发:两个或两个以上事件在同一时间段发生,我们在操作系统中学过的分时系统,有多道程序可以在计算机系统当中并发执行,把系统时间分成多个小的时间片,每一个进程占一个时间片,在一段时间当中有多个进程在计算机系统中运行,对用户来说感觉每一个进程都在执行,这种方式就是并发方式。
还有一种方式是同时性:两个或者两个以上的事件在同一时刻发生,两个事件在同一时间刻并行的发生。也就是所两个或两个以上的事件在时间上是相互重叠的。
2.并行性的等级
可以是过程级的并行,也就是说程序,进程。也可以是指令级的并行,指令之间或者指令内部,或者说多条指令在同一时刻都在被解释或者执行。也可以是指令内部的微操作。过程级的并行是粗粒度的,而指令级是细粒度的。通常情况下,粗粒度的并行我们用软件来实现,比如说用操作系统来实现。细粒度的并行我们用硬件来实现。

三,指令流水的原理
1.为了了解原理,我们先看看指令的串行是怎么做的。为了讲解的方便我们假设指令只有取址和执行2个阶段。首先取第一条指令,然后执行。接着取第二条指令,然后执行。在接着取第三条指令然后执行,以此类推。
如果我们把取址阶段和执行阶段分开设计的话。那么在取址阶段只会用到取指令部件,那么在执行阶段只会用到执行指令部件。这样会造成在当第2条指令在取址的时候,执行部件是空闲,当第二条指令处于执行状态的时候,取指令部件是空闲的。也就是说如果我们采用这种方式,这种结构去解释一条指令的话,总有一个部件是空闲的,控制器的利用率非常低。如果我们采用流水方式,把指令的执行阶段就分成取址和执行两个阶段,我们就可以采用二级流水。
2.我们看看二级流水是怎么做的。在第一条指令执行的时候,取址部件是空闲的,我们就让取址部件去取第二条指令,那么在这同一时刻,执行部件在执行第一条指令,同时取指令部件在取第2条指令,当执行阶段在执行第二条指令的时候,取址阶段就让他取第3条指令,以此类推。这种方式对不是同一个指令来说,取址和执行在时间上是完全重叠的。这种方式在流水线满负荷运转的时候,指令执行在时间比指令串行快一倍。但是并不是所有的流水线都是理想流水线,指令之间也存在一定的相关性。所以流水线要一直处于满负荷的状态是很难的。
3.影响指令流水效率加倍的因素
首先我们要知道指令流水绝不仅仅是二级流水,流水的指令段更多。
有些指令比较复杂,执行指令的时间比较长。那么取址的时候,我们假定指令格式是统一的,指令长度是一样的,那么取址时间都是相同的。那么对复杂指令来说,执行时间会比取址时间更长,怎么解决这个问题呢?可以在取址部件和执行部件之间加上一个缓冲区,这个缓冲区用来缓存取址部件取回来的指令,执行部件一旦空闲了就可以到缓冲区当中取指令。那么这是第一个因素。第二个因素是条件转移指令,这里指的是条件转移。对于无条件转移,它对指令流水的影响比较小,因为在译码阶段,就能够知道转移指令的地址。但是对条件转移指令来说就大不一样了,因为只有当这条指令执行阶段结束以后有了执行的结果才能知道转移条件能否成立它的真正地址是多少,造成的时间损失比较大,在现在程序当中,用机器语言写出的指令,条件转移指令还是比较多的,一般来说3-5条指令当中就会包含一条转移指令。这类指令对流水影响比较大。怎么解决这类问题?用分支预测的方法。
四,影响指令流水线性能的因素
1.结构相关
是指流水线当中,两条以及两条以上的指令挣用同一个功能部件,比如说一条指令利用运算器来计算下一条指令的地址,另外一条指令在同一个时钟周期想利用计算器来完成指令指定的运算,那么这两个指令就会发生资源冲突,这种方法会影响流水线的性能。
解决方法:停顿,指令存储器和数据存储器分开,现代处理器当中,指令存储器和数据存储器分开实际上就是为了解决冲突的问题。还有一个方法是采用指令预取技术,这个适合访存周期短的情况。在取指部件空闲的时候,将指令预取到指令缓存队列当中,减少内存资源的争夺。
2.数据相关
不同的指令对数据进行操作,流水线分成多个段,可能有多个读段,或者是多个写段,通常情况下前段是操作,后段是写操作。那么就可能会改变操作数的读写次序。就会产生数据相关。
写后读相关(RAW)
SUB R1,R2,R3; (R2)-(R3)=R1
ADD R4,R5,R1; (R5)+(R1)=R4
在指令流水当中以上指令要保证,在ADD对R1进行操作前,必须是SUB已经将结果写回到了R1当中。

读后写相关(WAR)
STA M,R2 ;(R2)=M存储单元
ADD R2,R4,R5 ;(R4)+(R5)=R2
在指令流水当中以上指令要保证STA 指令已经将R2的内容保存到了M存储单元当中,然后ADD才能将R4+R5的和保存在R2当中。

写后写相关(WAW)
MUL R3,R2,R1 ;(R2)X(R1)=R3
SUB R3,R4,R5 ;(R4)-(R5)=R3
在指令流水中以上指令必须保证先保证MUL指令对R3已经完成写操作后SUB指令才能对R3去写操作。
那么有什么解决办法呢?
第一种方法采用后推法,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值