(1)提高器件的性能
(2)改进系统的结构,开发系统的并行性
并行:包含同时性和并发性两方面。同时性指两个或多个事件在同一时刻发生,并发性指两个或多个事件在同一时间段发生。在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性。
并行性体现在不同等级上。通常分为4个级别:作业级或程序级、任务级或进程级、指令之间级和指令内部级。前两级为粗粒度,又称为过程级;后两级为细粒度,又称为指令级。粗粒度并行性一般用算法实现,细粒度并行性一般用硬件实现。粗粒度并行性是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序;细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术。
把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地出现,各条指令按顺序串行执行的。
存在两个原因使得执行效率加倍是不可能的:
- 指令的执行时间一般大于取指时间,因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。
- 当遇到条件转移指令时,下一条指令是不可知的。因为必须等到执行阶段结束后,才能获知条件是否成立,从而决定下条指令的地址,造成时间损失。
通常为了减少时间损失,采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。
可将指令的处理过程分解为更细的几个阶段:
- 取指(FI):从存储器取出一条指令并暂时存入指令部件的缓冲区。
- 指令译码(DI):确定操作性质和操作数地址的形成方式。
- 计算操作数地址(CO):计算操作数的有效地址。
- 取操作数(FO):从存储器中取操作数。(若操作数在寄存器中则无须此阶段)
- 执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
- 写操作数(WO):将结果存入存储器。
在流水过程中会出现三种相关,使流水线不断流实现起来很困难,即结构相关、数据相关、控制相关。
结构相关:当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。
数据相关:指令在流水线中重叠执行时,当后继指令需要用到前面的执行结果时发生的。
控制相关:当流水线遇到分支指令和其他改变PC值的指令时引起的。
假设流水线由5段组成,它们分别是取指令(IF)、指令译码/读寄存器(ID)、执行/访存有效地址计算(EX)、存储器访问(MEM)、结果写回寄存器(WB)。
结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。
解决冲突的方法可以让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作。
另一种方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和去另一条指令的操作数实现时间上的重叠。
数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。
解决这种数据相关的方法可以采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
另一种解决方法是采用定向技术,又称为旁路技术或相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方。
根据指令间对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为写后读相关(RAW)、读后写相关(WAR)、写后写相关(WAW)。
上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。
控制相关主要是由转移指令引起的。当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上一个增量,指向下一条指令地址。
为了解决控制相关,可以采用尽早判别转移是否发生,尽早生成转移目标地址;预取转移成功或不成功两个控制流方向上的目标指令;加快和提前形成条件码;提高转移方向的猜准率等方法。
流水线性能通常用**吞吐率、加速比、效率**3项指标来衡量。
在指令级流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。吞吐率又有最大吞吐率和实际吞吐率之分。
最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为 Δt Δ t ,则最大吞吐率为
流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比。加速比 Sp S p 为
效率是指流水线中各功能段的利用率。通常用流水线各段处于工作时间的时空区与流水线中各段总的时空区之比来衡量流水线的效率。
除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带来的干扰以及优化编译外,还可开发流水线中的多发技术,设法在一个时钟周期内,产生更多的结果。常见的多发技术有超标量技术、超流水线技术、超长指令字技术。
超标量技术是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上指令编译并执行。
要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口,以便能实现同事执行多个操作。
超流水线技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分段。
超长指令字技术(VLIW)和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。当超标量的指令来自同标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令,由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。
VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大。
指令流水线是将指令的整个执行过程用流水线进行分段处理,典型的指令执行过程分为“取指令——指令译码——形成地址——取操作数——执行指令——回写结果——修改指令指针”这几个阶段。
指令流水线对机器性能的改善程度取决于把处理过程分解为多少个相等的时间段数。
流水线相邻两段在执行不同的操作,因此在相邻两段之间必须设置锁存器或寄存器,以保证在一个时钟周期内流水线的输入信号不变。这一指导思想也适用于指令流水。
(1)人为设置的中断
这种中断一般称为自愿中断,因为它是程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理。
(2)程序性事故
如定点溢出、浮点溢出、操作码不能识别、除法中出现“非法”等,这些都属于由程序设计不周而引起的中断。
(3)硬件故障
(4)I/O设备
I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。
(5)外部事件
用户通过键盘来中断现行程序属于外部事件中断。
通常将能引起中断的各个因素称为中断源。中断源可分为两大类:一类为不可屏蔽中断,这类中断CPU不能禁止,如电源掉电;另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给予响应。若未屏蔽则能响应;若已被屏蔽,则CPU不能响应。
为了判断是那个中断源提出的请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器。
中断请求触发器越多,说明计算机处理中断的能力越强。这些触发器既可以集中在CPU的中断系统内, 也可以分散到各个中断源中。
任何一个中断系统,在任一时刻,只能响应一个中断源的请求。当某一时刻多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优。各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器工作出错的严重程度而定的。
中断判优可用硬件实现,也可用软件实现。
(1)硬件排队
硬件排队又可分为两种。一种为链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。另一种排队器设在CPU内,当最高优先级的中断源有请求时 INTR1=1 I N T R 1 = 1 ,就可封住比它第的中断源的请求。
(2)软件排队
软件排队是通过编写查询程序实现的。程序按中断源的优先等级,从高至低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求。
通常有两种方法寻找入口地址:硬件向量法和软件查询法。
硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。
由向量地址寻找中断服务程序的入口地址通常采用两种办法。一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。另一种是设置向量地址表,该表设在存储器内,存储单元的地址为向量地址,存储单元的地址为入口地址。只要访问向量地址所指示的存储单元,便可获得入口地址。
硬件向量法寻找入口地址速度快。
用软件寻找中断服务程序入口地址的方法称为软件查询法。当查到某一中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。
这种方法不涉及硬件设备,但查询时间较长。
当EINT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。
之所以CPU在指令的执行周期后进入中断周期,是因为CPU在执行周期的结束时刻同一向所有中断源发中断查询信号,只有此时CPU才能获知哪个中断源有请求。
可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”时刻均发中断查询信号,以便发现有中断请求便可及时响应。
(1)保护程序断点
保护程序断点就是要将当前程序程序计数器PC的内容保存到存储器中。它可以存在存储器的特定单元内,也可以存入堆栈。
(2)寻找中断服务程序的入口地址
由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址。
有两种方法寻找入口地址:
1. 在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移执行,转至中断服务程序入口地址。
2. 在中断周期内,将软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。
(3)关中断
CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应中断请求。当进入中断周期时,INT为“1”状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置“0”,即关中断。
保护断点、寻找入口地址和关中断这些操作都是在中断周期内由一条中断隐指令完成的。
中断隐指令:即在机器指令系统中没有的指令,它是CPU 在中断周期内由硬件自动完成的一条指令。
保护现场:应该包括保护程序断点和保护CPU内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户(或系统)用机器指令编程实现。
恢复现场:是指在中断返回前,必须将寄存器的内容回复到中断处理前的状态,这部分工作也由中断服务程序完成。
当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个系难道请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称为中断嵌套。如果的CPU对新请求不予响应,待执行完当前的服务程序后再响应,即为单重中断。
1. 提前设置“开中断”指令。
多重中断“开中断”指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套。
2. 优先级别高的中断源有权中断优先级别低的中断源。
为了保证级别低的中断源不干扰级别高的中断源的中断处理过程,保证上述2的试试,可采用屏蔽技术。
(1)屏蔽触发器与屏蔽字
对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级别是一一对应的。
在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用。
(2)屏蔽技术可改变优先等级
优先级包含响应优先级和处理优先级。响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。
在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。
(3)屏蔽技术的其他作用
屏蔽技术还能给程序控制带来更大的灵活性。
中断系统对断点的保存都是在中断周期内由于中断隐指令实现的,对用户是透明的。
断点可以保存在堆栈中,由于堆栈先进后出的特点,出栈时按相反顺序便可准确返回到程序的间断处。
断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内。在中断服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。