CPU的内部结构主要有三部分:指令寄存器、指令译码器、指令执行单元(包括ALU和通用寄存器)
CPU在执行一条指令的时候,主要有三个步骤:取指(将指令从内存或者指令Cahe中取出,放到指令寄存器),译码(指令译码器对指令寄存器中的指令进行译码操作从而辨识出所具体什么指令,从而产生各种时序信号),执行(指令执行单元根据译码的结果进行计算和存储结果)
流水线技术-背景
根据电路的结构我们发现:取指阶段占用的CPU硬件是指令通路和指令寄存器;译码阶段占用的是CPU硬件是指令译码器;执行阶段占用的是CPU硬件的执行单元和数据通路。三者占用的CPU硬件完全不同,这就形成列三级的流水线,如下:在对第一条指令译码的时候,可以同时对第二条指令进行取指操作;在对第一条指令进行执行的时候,可以同时对第二条进行译码,对第三条进行取指。
流水线技术-概念
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,他们可同时为多条指令的不同部分进行工作,已提高各部件的利用率和指令的平均执行速度。
流水线技术-本质
流水线技术的本质是利用指令运行时间不同阶段使用不同的硬件相互不同,并发运行多条指令,从而提高了时间效率。
流水线周期 (△t)
流水线周期为执行时间最长的那一段,执行的时间段为取值,分析,执行。
流水线的计算公式为
完成一条指令所需的时间+(指令条数-1)*流水线周期,在这个公式中,又存在理论公式和实践公式。
①理论公式:(t1+t2+t3+..tk)+(n-1)* △t
②实践公式: (k+n-1)* △t
k为一条指令所包含多少段
例题:若指令流水线一条指令分为取指、分析、执行三个阶段,并且这三个阶段的时间分别为取指1ns,分析2ns,执行1ns,则流水线的周期为多少?100条指令全部执行完毕需要执行的时间是多少?
分析:上面已经说过,流水线的周期为花费时间最长的阶段所花费的时间,所以流水线的周期就是2ns。
根据理论公式,T=(1+2+1)+(100-1)*2=4+99*2=202ns
根据实践公式,T=(3+100-1)*2=204ns
在这里,需要注意的是,因为流水线的理论公式和实践公式的结果不一样,但是在考试过程中可能都会考到,所以,在应用时,先考虑理论公式,后考虑实践公式。
流水线-吞吐率
流水线的吞吐率(Though Put rate ,TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量;
上面例题的流水线吞吐率=100/203
上面例题拓展:1条指令/1条指令执行时间,上面例题的流水线吞吐率为 1/2; 即为最长流水段操作时间的倒数!
吞吐率公式拓展:n为指令条数,k1,k2,k..为指令各段执行时间,△t为最大执行时间,吞吐率 = n/((k1+k2+k..+△t)+(n-1)*△t) = n/(k1+k2+k..+n*△t); 当n无限大时,吞吐率就越接近最长流水段操作时间的倒数 !!! |
流水线-加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
S = 不使用流水线执行时间/使用流水线执行时间
上面例题的 S=500/203
拓展:n为指令条数,k1,k2,k…为指令各段执行时间,△t为最大执行时间
加速比 = (k1+k2+k…+△t)n/(k1+k2+k…+n△t),当n无穷大时,忽略k1+k2+k… ;
结果可以认为是
S=(k1+k2+k..+△t)/△t
上面例题的加速比S = 5/2
我们按照公式计算得到:
S=(6+7+8+9+6)n/[(6+7+8+9+6)+9(n-1)]=36n/[36+9(n-1)]=4n/(4+n-1)
我们用一个极限的思想来求一个加速比:
流水线-效率
流水线的效率是指流水线的设备利用率,在时空图上,流水线的效率定义为n个任务占用的时空区与k个流水段总的时空区之比
E= n个任务占用的时空区/k个流水段的总时区
流水线的设备利用率,公式是:
效率和吞吐率的关系:
和加速比的关系:
E=(△t+△t+△t+3△t)*4/15△t*4
举例2
(1) 求连续输入 10 条指令,该流水线的实际吞吐率和效率;
解:(1)
这个效率E的计算没太懂,按照定义算发现也可以
E
= 设备实际使用时间 / 整个运行时间
= ( 每条指令耗时 * 指令数量 ) / ( 流水线运行时间 * 流水线级数段数 )
= ( 50ns + 50ns + 100ns + 200ns ) * 10 / ( 2200ns * 4 )
= 5 / 11
≈ 45.45%