一、CPU的功能
1、CPU由【运算器】和【控制器】构成
这些指令还有执行的先后顺序
CPU必须具有控制程序的顺序执行(称指令控制)、产生完成每条指令的控制命令(称操作控制)、对各种操作加以时间上的控制(称时间控制)、对数据进行算术运算和逻辑运算(称数据加工)、处理中断等功能。
指令控制: 把指令从内存单元中取出,需要的硬件有PC程序计数器、IR指令寄存器
PC: 指出我们要取的指令的地址
IR: 从内存单元中取出的指令会被放入IR中
操作控制+时间控制: 需要的硬件有CU控制单元和时序电路
CU:由它对指令进行译码,译码后在给定的时刻给出操作的命令
数据加工: 需要的硬件有ALU和寄存器
ALU:由它来完成算术运算和逻辑运算
寄存器:保存操作数和输出的结果
处理中断:中断系统
2、CPU结构框图
CPU与系统总线
只有地址线是单向的
二、CPU的寄存器
1、用户可见寄存器
2、控制和状态寄存器
(1) 控制寄存器
MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。
MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据。
PC:程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC的值可被修改。
IR:指令寄存器,存放当前欲执行的指令。
PSW:程序状态字寄存器,存放条件码和其他状态信息。
比如从内存中取出一条指令:
先从PC开始,PC再将指令送给MAR主存地址寄存器,MAR再将这条指令的地址送给主存储器M,并且控制单元发出读命令,然后放入MDR主存数据寄存器中,最后送入IR指令寄存器中
这些寄存器都用于控制CPU操作
(2)状态寄存器:计算机指令执行结果的状态
PSW寄存器:P程序,S状态,W字
程序状态字:在中断或子程序调用过程中,为了让程序有正确的返回断点,且返回断点后还可以继续执行程序,那么在中断之前我们就需要保存程序运行现场和断点,这些信息就保存在寄存器中,
3、控制单元CU与中断系统
(1)CU产生全部指令的微操作命令序列
(2)中断系统
三、指令周期
1、概念:取出并执行一条指令所需的全部时间
不同的CPU有不同的周期分法,这里只是其中一种:
2、每条指令的指令周期也不同
具有间接寻址的指令周期 ,包括 取指周期、 间址周期、 执行周期3个阶段,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间。
带有中断周期的指令周期:如果有请求,CPU则要进入中断响应阶段,又称中断周期。在此阶段,CPU必须将程序断点保存到存储器中。一个完整的指令周期应包括取值、间址、执行、中断4个子周期。
3、 指令周期的流程
4、CPU 工作周期的标志
CPU工作的4个周期:
总之,上述4个周期都有CPU访存操作,只是访存的目的不同。取指周期是为了取指令,间
址周期是为了取有效地址执行周期是为了取操作数(当指令为访存指令时),中断周期是为了
保存程序断点。
为了区别它们在CPU内可设置4个标志触发器。
FE、IND、EX、INT分别对应取值、间址、执行、中断4个周期,并以“1”状态表示有效,它们分别由1→FE、1→IND、1→EX、1→INT这4个信号控制。
5、指令周期的数据流
(1)取指周期数据流
具体流程:
PC中存放现行指令的地址,该地址送到MAR并送至地址总线,再由地址总线送给存储器
然后由控制部件CU—>控制总线—>存储器发出读命令,
对应MAR所对应单元的内容经数据总线送至MDR,再送至IR,并且CU控制PC内容加1,形成下一条指令的地址。
IR: 保存该指令
CU:所有操作由CU来控制
(2)间址周期数据流
起始操作可以从IR开始也可以从MDR开始,这里假设从MDR开始
MDR中的地址码部分送到MAR中,MAR取出这条指令所要用到的操作数的地址,然后MAR将地址送入地址总线,地址总线再送给存储器,CU—>控制总线—>存储器发出读命令,存储器完成读操作将数据送到数据总线上,此时送的是个地址(所需要的操作数所在的内存单元的地址),将这个地址送入MDR中
一旦取指周期结束,CU便检查IR中的内容,以确定其是否由间址操作。
如果需要间址操作,则MDR中指示形式地址的右N位(记作Ad(MDR))将被送到MAR,又送至地址总线。 此后CU向存储器发出读命令,以获取有效地址并存至MDR。
(3)执行周期的数据流
不同指令的执行周期数据流不同
(4)中断周期的数据流
1、保存断点
2、形成中断服务程序的入口地址(由CU给出,CU将这个值直接送入PC中)
3、硬件中断
CU把用于保存程序断点的存储器特殊地址(如栈指针的内容)送往MAR,并送到地址总线上。
然后由CU向存储器发写命令,并将PC的内容送到MDR,最终使程序断点经数据总线存入存储器。
CU还需将中断服务程序的入口地址送至PC,为下一个指令周期的取指周期做好准备。
例题
四、指令流水
提高指令解释速度的方法
指令流水作用
- 提高器件的性能
- 改进系统的结构,开发系统的并行性
一、如何提高机器速度
要想提高机器速度,就要提高机器中的各个零件的速度
1、提高访存速度:
使用高性能芯片
使用cache
多体并行(对多个存储体交叉访问)
2、提高I/O和主机之间的数据传送速度
I/O和主机之间进行传送的方式是程序控制方式,这种方式下cpu和外部设备不能并行工作,只能串行,总线和cpu的利用率也很低,所以我们引出了中断的方式
中断:可以并行工作且cpu的利用率大大提高
DMA方式:利用DMA控制器直接在内存和外部设备间进行数据传送,减少cpu的占用率进而提高 使用率
通道:
I/O处理机:内存和I/O设备间进行数据传送,整个传输工程都是由处理机完成
多总线
3、提高运算器的速度:
高速芯片
改进算法
快速进位链
系统的并行性
在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性。
过程级: 作业级或程序级、任务级或进程级
指令级: 指令之间级和指令内部级
粗粒度并行性是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序【算法实现】
细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术
指令流水的原理
把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地出现,各条指令按顺序串行执行的。
这样,没经过T/2的周期,就会有一条指令执行完进行下一条指令的操作,所以速度提高了1倍
但是,由于各种各样的原因,流水线不会一直处于满负荷的状态,所以不会达到理想流水线状态
影响指令流水效率加倍的原因
1、指令执行时间 > 取指时间
- 因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,就把指令放在缓冲区等,缓冲区不能空出。
2、条件转移指令
- 当遇到条件转移指令时,下一条指令是不可知的。因为必须等到上条指令执行阶段结束后,才能获知条件是否成立,从而决定下条指令的地址,造成时间损失。
通常为了减少时间损失,采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。
指令的六级流水
指令的处理过程还可以分解为更细的几个阶段:
取指(FI):从存储器取出一条指令并暂时存入指令部件的缓冲区。
指令译码(DI):确定操作性质和操作数地址的形成方式。
计算操作数地址(CO):计算操作数的有效地址。
取操作数(FO):从存储器中取操作数。(若操作数在寄存器中则无须此阶段)
执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
写操作数(WO):将结果存入存储器
如图:这里假设了采用串行,且不存在存储器冲突的问题,所有阶段并行进行,但事实往往不是这样
影响流水线性能的因素
三种,结构相关、数据相关、控制相关
结构相关:是当指令在重叠执行过程中,两条或两条以上指令争用同一个功能部件产生资源冲突
如下图每个时期的蓝色部分为冲突部分
解决办法:
1、停顿:让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作,比如第4时期FO与FI冲突,那么将FI停顿,把它安排到第5周期或者更后
2、指令存储器【存取指令】和数据存储器【存取操作数】分开
3、指令预取技术:它的实现基于访存周期很短的情况,例如,在执行指令阶段,取数时间很短,因此在执行指令时,主存会有空闲,此时,只要指令队列空出,就可取下一条指令,并放至空出的指令队列中,从而保证在执行第K条指令的同时对第K+1条指令进行译码,实现“执行K”与“分析K+l”的重叠。
数据相关:
解决办法:
后推法:即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成
定向技术:又称为旁路技术或相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方
补充:在按序流动的流水线中,只可能出现RAW相关。
在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出 流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。
控制相关
BNE指令如果比较结果不相等,就跳转到M指令去,所以它必须要等CPX的结果才能决定,这种等待就会造成流水线的浪费
假设3是转移指令,那么只有在最后一条指令EI结束时才知道下一步该干什么,比如下图指令3中,DI译码阶段时,它自己并不知道是否会转移,所以指令4就会在DI所在的第4时期进入流水线完成取址操作,同样的,指令5也会在第5时期进入流水线,指令6在第6时期也是以此类推...
但是如果它知道了自己会进行转移,那么就会在指令3结束时EI阶段直接转移到指令15,可是此时中间的那些指令已经进入了流水线,开始了指令解释过程,但是这些指令本不该开始,所以他们的结果会作废,我们称中间这些指令为由控制相关造成的损失
解决办法:
- 可以采用尽早判别转移是否发生,尽早生成转移目标地址;
- 预取转移成功或不成功两个控制流方向上的目标指令;
- 加快和提前形成条件码;
- 提高转移方向的猜准率等方法。
五、流水线性能
流水线性能通常用吞吐率、加速比、效率3项指标来衡量
1、吞吐率:是指单位时间内流水线所完成指令或输出结果的数量
又分为最大吞吐率和实际吞吐率
最大吞吐率:流水线满负荷运转,没有发生资源冲突也没有转移指令等的情况下达到的吞吐率
实际吞吐率:实际完成的指令/所花费的时间
【实际吞吐率总是<最大吞吐率】
2、加速比Sp:指m段流水线的速度与等功能的非流水线的速度之比
3、流水线效率:流水线中各功能段(硬件)的使用率
由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态
比如下图,第1时期只有s1工作,s2s3s4空闲,第2时期s1s2工作,s3s4空闲
六、流水线的多发技术
由于一条流水线可以提高指令的解释速度,那么我们想办法使用多条流水线,就可以更快提高速度
1、超标量技术
下图我们在每个时钟周期都安排3条流水线一起工作(黑色部分),这样加速比就可以提高3倍
2、超流水线技术
不同的指令处在同一个流水段中相互之间的信号不能叠加
下图,我们把每一个时钟周期均分成三份,在每一个时间点开始的时候都可以有一条新的指令进入到流水线中
3、超长指令字技术(应用广泛)
超长指令字技术(VLIW)和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。
当超标量的指令来自同标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令,由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。
VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大。
下图黑色部分是它的执行部件
七、流水线结构
1、指令流水线结构
指令的解释过程由流水线来实现
锁存器用于保存前一个指令的操作结果,并为下一条指令提供操作数据
2、运算流水线
当某个运算过程过于复杂时,也可以用流水线的方式来实现
流水线相邻两段在执行不同的操作,因此在相邻两段之间必须设置锁存器或寄存器,以保证在一个时钟周期内流水线的输入信号不变。这一指导思想也适用于指令流水。
如果每段操作时间不一样的话,那么时钟周期就要按照最长的那个时间段来设置,就会降低整个流水线的速度,所以要一致