15中央处理器
5.1 CPU功能与结构
CPU右CU控制器、ALU运算器、寄存器以及中断系统组成
CPU功能主要包括:
- 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:
- 一条指令的功能往往是由若干操作信号的组合来实现的
- CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作
- 时间控制:对各种操作加以时间上的控制,为每条指令按时间顺序提供应有的控制信号
- 数据加工:对数据进行算术和逻辑运算
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理
CPU读写控制信号的作用:
- 控制存储器操作的读/写类型
- 决定数据总线上的数据流方向
- 控制流入、流出存储器信息的方向
CPU内寄存器分类:
- 对用户不透明/用户可见的寄存器:
- 通用寄存器组、程序状态字寄存器PSW、程序计数器PC
- 对用户透明/用户不可见的寄存器:
- 存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器
5.1.1 运算器
运算器用于完成对数据进行加工功能,一般包括以下部分:
- 算术逻辑单元ALU:主要功能是进行算术/逻辑运算
- 通用寄存器组:
- 可编程指令多种功能的寄存器,可用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等
- 如AX、BX、CX、DX、SP等,其中SP是堆栈指针,用于指示栈顶的地址,有些通用寄存器甚至具备计数逻辑和移位逻辑
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
- 两个操作数分别来自主存和R0,最后结果存回R0,那么从主存中取来的操作数直接放入暂存器,就不会破坏运算前R0的内容
- 累加寄存器:它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算
- 程序状态字寄存器PSW:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志
(CF)等。PSW中的这些位参与并决定微操作的形成 - 移位器:对运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
寄存器与ALU的数据通信
寄存器会与算数逻辑单元ALU进行数据交换,包括作为输入值以及运算结果的输出,对于数据通信方式的实现有如下方式
每个寄存器与ALU使用专用的数据通路方式进行数据交换:
- 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接
- 由于多个寄存器与ALU构成了专用数据通路,相当于多个寄存器同时向ALU传输数据,会产出冲突,有如下的解决方法:
- 使用多路选择器根据控制信号选择一路输出
- 使用三态门可以控制每一路是否输出R0out
如:R0\(_{out}\)为1时R0中的数据输出到A端,R0\(_{out}为0时R\)中的数据无法输出到A端
- 专用数据通路方式性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现
每个寄存器共用一条通路与ALU进行数据交换:
- CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。每个寄存器可以增加一个控制信号控制其与总线进行数据传送,避免总线与多个寄存器数据传输发生冲突
- 多个寄存器共用一条总线进行数据传输,ALU的输入、输出信号也接在总线上
- 在ALU前使用暂存寄存器,专用于与ALU进行输入信号的数据交换。总线与暂存寄存器相连,每次来自通用寄存器的数据都通过总线传输给暂存寄存器,避免了总线同时对ALU多个输入信号传输数据造成的冲突
- 在ALU输出给总线前,也使用同样暂存寄存器,防止运算结果不稳定的电信号直接向总线传输信号
- CPU内部单总线方式结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低
5.1.2 控制器
协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令
- 取指令:自动形成指令地址;自动发出取指令的命令
- 分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址
- 执行指令:根据分析指令得到的"操作命令"和"操作数地址",形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作
- 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
计算机表面上是按照指令执行顺序依次执行的,实际上每次执行完指令后,就需要检测是否存在中断信号需要处理
控制器的基本结构
- 程序计数器PC:
- 用于指出下一条指令在主存中的存放地址,CPU总是根据PC的内容去主存中取指令的,因程序中指令(通常)是顺序执行的,所以PC有自增功能
- PC可以使用字节地址或者字地址,其位数取决于存储器的容量和指令字长
- 假设主存包含2\(^n\)个存储单元,每个存储单元包含2\(^m\)个指令字,则PC的位数至少为n-m位,至多为n位
- 当取值操作还未开始前,PC中存放的是当前指令的地址;当取指操作完成后,PC中存放的值为下一条指令的值
有些计算机PC的功能是通过ALU完成的
- 指令寄存器IR:
- 用于保存当前正在执行的那条指令,包括操作码OP和地址码Ad
- 指令译码器ID:
- 仅对操作码字段进行译码,向控制器提供特定的操作信号
- 微操作信号发生器/操作控制器/控制信号产生电路:
- 根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种
- 时序系统:
- 用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到
时序系统可以控制执行微操作的频率
- 存储器地址寄存器MAR:
- 用于存放所要访问的主存单元的地址
- 存储器数据寄存器MDR:
- 用于存放向主存写入的信息或从主存中读出的信息
取指令是控制器固有的功能,不需要再操作码的控制下进行
5.1.2 CPU工作过程

其中,
- CPU内部总线用于CPU内部部件之间的数据传输通道
- 数据总线、地址总线指的是CPU与外部组件如主存、I/O等设备的数据传输通道
- 用户可见的寄存器表示程序开发人员可以直接操作的寄存器,包括程序状态寄存器PSW、累加器ACC、程序计数器PC、通用寄存器组\(R_0\)、\(R_1\)、\(R_2\)、\(R_3\)
- 而用户不可见的寄存器包括指令寄存器IR、存储器地址寄存器MAR、存储器数据寄存器MDR、移位寄存器、暂存寄存器
补充:
- 指令和数据在内存中的存在形式都是一串01二进制代码
- 对于存储器自己而言,不区分里面存放的是指令还是数据
- 数据通路是各个功能部件间传输数据的路径,他也是不区分里面到底存放的是指令还是数据,纯粹地传输内部的01二进制字节流
- 存储单元中存放的是指令还是数据,由CPU去决定
- CPU的控制器CU根据在不同阶段对内存的访问,确定访问的存储单元内的内容到底是指令还是数据
- CPU的运算器ALU,默认输入到该部件内的二进制均为数据,不会将其视为指令
5.2 指令执行过程
5.2.1 指令周期
CPU从主存中每取出并执行一条指令所需的全部时间
- 指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。一个机器周期又包含若干时钟周期CLK(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)
- 机器周期指完成一个操作所需要的时间,如取指令、取有效地址、执行指令
- 如果一个机器周期内所花费的时钟周期相等,则说明该CPU具有定长的机器周期,否则就具有不定长的机器周期
- 因此每个指令周期内的机器周期数可以不相等,每个机器周期内的节拍数也可以不相等
- 不同的指令周期所包含的机器周期数可能不同,如指令使用的操作数为立即寻址,则不需要进行间址过程
- 指令周期中每个机器周期基本都涉及访存操作,通常内存的访问时间比CPU内部操作时间要长,因此机器周期的长度通常由存取周期决定,通常也把一次总线十五访问主存或I/O的时间定位一个机器周期
- 取指周期需要到主存内取出指令字
- 间址周期需要到主存中得到操作数的有效地址
- 执行周期需要到主存中得到操作数
- 中断周期需要将断点保存到内存中
- 每个指令周期内不一定包含中断响应机器周期
- 如果执行过程中发生了中断请求,指令周期才会包含中断周期

- 一般将取指令、译码时间统一归在取指周期中。取指令时间主要消耗在访存上,译码执行速度很快,因此整个过程主要时间开销在取指令上
常见指令的指令周期
- 空指令NOP:CPU执行空指令需要进行取指,但不需要进行其他操作,因此空指令的指令周期就是取指周期
- 加法指令ADD:CPU执行加法指令需要进行取值、执行指令,加法指令的指令周期为取值周期 + 执行周期
- 乘法指令MUL:类似于加法指令,指令周期也为取值周期 + 执行周期,由于计算机中乘法由加法实现,因此比加法指令执行周期更长
- 具有间接寻址的指令:CPU执行这类指令在执行指令前还需要进行间址,因指令周期为取值周期 + 间址周期 + 执行周期
- 带有中断周期的指令:该类指令在执行指令之后还需要进行中断检测/处理,因此指令周期为取值周期 + 间址周期 + 执行周期 + 中断周期
- 中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。
- 一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据
5.2.2 指令周期流程
按照最完整的带中断周期的指令执行过程,可将指令周期分为四个阶段:取值周期 - 间址周期 - 执行周期 - 中断周期
- CPU可以使用4个触发器FE、IND、EX、INT,分别对应四个阶段。每个触发器可以存放一个二进制位,通过四个触发器表示CPU目前在执行该指令处于什么阶段
如1000表示取值周期,0100表示间址周期,0010表示执行周期,0001表示中断周期
- 四个工作周期都有CPU访存操作,只是访存的目的不同:
- 取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点
取指周期FE:
- 一般为指令周期的第一个机器周期,包括取指令的过程,该过程从主存中取出指令字
间址周期IND:
- 不同指令的间址寻址,其操作步骤往往是不一样的
- 存储器间接寻址的指令与寄存器间接寻址的操作也显然不同
- 对于存储器间接寻址的指令,由于其寻址方式的不同,不同指令的操作也会存在不同
执行周期EX:
- 根据当前执行的指令进行操作
中断周期INT:
- 在执行周期结束后,CPU会统一向所有外部中断源发送中断查询信号
CPU指令均存放在主存中,CPU进行执行的指令也都存放在指令寄存器IR中
- 计算机的指令字长与机器字长没有任何关系,机器字长反应的是计算机并行处理数据的最大位数
- 指令寄存器IR的位数和计算机的指令字长的位数相同,指令字长与存储器容量、存储字长相关
指令字长通常为存储字长的整数倍
- 若指令字长等于存储字长,且采用边界对齐存储,则取指周期等于机器周期(存取周期)
- 若指令字长等于存储字长,但未采用边界对齐存储,若该指令恰好未对齐,则取值周期等于两倍机器周期
- 一般情况下,指令字长大于等于存储字长。存储字长如果过大,会导致每次存取数据所需要的数据位线过多,影响硬件设计
指令周期内数据流过程

取指周期:
- 当前指令地址送至存储器地址寄存器MAR,记做:(PC) -> MAR
- CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1 -> R
- 存储器读/写控制线信号WR输入高电平电信号,进行读操作
- 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) -> MDR
也记作MEM(MAR),意为读取主存中MAR地址的内容
- 将MDR中的内容(此时是指令)送入IR,记做:(MDR) -> IR
- CU发出控制信号,形成下一条指令地址,记做:(PC) + 1 -> PC

间址周期:
- 将指令的地址码送入MAR,记做:Ad(IR) -> MAR 或Ad(MDR) -> MAR
- AD()表示取地址码,由于间址周期经过了取指阶段,将指令就是从主存中读取后存入MDR,下一步准备传给指令寄存器IR,因此可以调用这个步骤,直接从MDR中读取指令地址
- CU发出控制信号,启动主存做读操作,记做:1 -> R
- 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) -> MDR
- 将有效地址EA送至指令的地址码字段,覆盖IR中的形式地址A为有效地址EA进行直接寻址,记做:(MDR) -> Ad(IR)
- 该过程也可以稍微绕一些获取立即数,此时MDR存放着有效地址EA,可以将EA传给MAR,读主存将操作数存入MDR,和IR结合执行
执行周期:
- 执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向

中断周期:
- CU控制将SP减1,修改后的地址送入MAR,记做:(SP)-1 -> SP,(SP) -> MAR
- 由于中断需要调用中断程序,需要将当前PC压入堆栈,本质上是将断点存入某个存储单元,假设其地址为a,故可记做:a -> MAR
- 此处将SP指针中的地址是之后需要写入数据的地址,因此将该地址传给MAR
- 该过程也可直接简化为CU将栈顶地址传给MAR
- CU发出控制信号,启动主存做写操作,记做:1 -> W
- 将断点(PC内容) 送入MDR,准备好压入堆栈的内容,记做:(PC) -> MDR
- CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址 -> PC
指令执行方案
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能,有如下执行方案:
- 方案1.单指令周期
- 对所有指令都选用相同的执行时间来完成
- 指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间
- 对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度
- 方案2.多指令周期
- 对不同类型的指令选用不同的执行步骤来完成
- 指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。需要更复杂的硬件设计
- 方案3.流水线方案
- 在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中
- 指令之间并行执行
5.3 数据通路与基本结构
数据通路:数据在功能部件之间传送的路径
- 数据通路影响信息从哪里开始中间经过哪些部件最后传到哪里
- 数据通路由控制部件产生的控制信号建立,控制信号就是控制每个元件是否工作的的输入、输出信号
构成数据通路的元件:
- 组合逻辑元件/操作元件:
- 包括多路选择题、加法器、算数逻辑部件
- 存储元件/状态元件:各种寄存器
- 暂存器:通常用来实现指令寄存器IR、通用寄存器组
- 输出端带一个三态门的寄存器:通常用于与总线相连的寄存器,可通过三态门来控制信息是否输出到总线上
- 带复位(即清零)功能的寄存器
- 带计数(自增)功能的寄存器
- 带位移功能的寄存器
数据通路的基本结构:
- CPU内部单总线方式
- CPU内部多总线方式
一般是三总线
- 专用数据通路方式
单周期数据通路:
- 单周期方式下,所有指令都在单个时钟周期内完成执行,因而下一个时钟会在足够长的时间(最长的指令周期)后到达
- 由于单周期CPU的时钟周期取决于最长的指令周期,因而单周期CPU的时钟周期通常比多周期的CPU的时钟周期长
- 单周期CPU的CPI=1
- 在一条执行指令过程中,单周期CPU通过一组(多个)控制信号来控制多个部件工作
- 单周期CPU执行过程中每个控制信号取值一直不变,因而单周期数据通路对于每个内部部件至多使用一次
多周期数据通路:
- 多周期处理器中,每条指令分多个阶段执行,每个阶段占一个时钟周期,称为一个状态
- 多周期CPU的CPI>1
- 在一条执行指令过程中,多周期CPU允许在不同时钟周期使用多组控制信号控制多个部件工作
- 因而,多周期CPU在指令执行过程中,控制信号允许改变,多周期数据通路也可以多次使用同一个部件
数据通路相关考题:
- 涉及的主要操作类型:寄存器之间的数据传送;主存与CPU之间的数据传送;使用ALU进行算术逻辑运算
- 考察基本思路基本思路:利用题目提供的数据通路进行数据传送;由CU发出的控制信号实现通路的建立
5.3.1 单总线结构数据通路
内部总线指同一部件,如CPU内部连接各寄存器以及运算部件之间的总线
系统总线指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口之间的相互连接的总线

寄存器之间的数据传送:
- 比如把PC内容送至MAR,实现传送操作的流程及控制信号为:
- (PC) -> Bus:PC\(_{out}\)有效,PC内容送总线
- Bus -> MAR:MAR\(_{in}\)有效,总线内容送MAR
也可写为:(PC) -> Bus -> MAR;也有的教材写为:PC -> Bus -> MAR

主存与CPU之间的数据传送:
- 比如CPU从主存读取指令,实现传送操作的流程及控制信号为:
- (PC) -> Bus -> MAR:PC\(_{out}\)和MAR\(_{in}\)有效,现行指令地址 -> MAR
- 1 -> R:CU发读命令,通过控制总线发出(图中未画出)
- MEM(MAR) -> MDR:主存与MDR的数据通路控制信号有效
- 实际上,MAR、MDR与主存的输入、输出数据通路由专门的控制信号分别进行控制,并非与图中MDR\(_{in}\)处控制与主存数据的交换
- MDR -> Bus -> IR:MDR\(_{out}\)和IR\(_{in}\)有效,现行指令 -> IR
![]() |
![]() |
|---|
执行算术或逻辑运算:
- 比如一条加法指令,微操作序列及控制信号为:
- Ad(IR) -> Bus -> MAR:MDR\(_{out}\)和MAR\(_{in}\)有效或AdIR\(_{out}\)和MAR\(_{in}\)有效
- 除了从IR中取指令外,IR的值本身就是由MDR中传输过来的,MDR也具备完整的指令信息
- 因此可以直接将MDR中的内容通过总线传给MAR,即Ad(MDR) -> Bus -> MAR
- 1 -> R:CU发读命令
- MEM(MAR) -> 数据线 -> MDR:MDR\(_{in}\)有效
- MDR -> Bus -> Y:MDR\(_{out}\)和Y\(_{in}\)有效,操作数 -> Y
- (ACC)+(Y) -> Z:ACC\(_{out}\)和ALU\(_{in}\)有效,CU向ALU发送加命令
- 由于ALU进行运算时,输入的信号要同时有效才能进行,且运算过程也通过e额外的控制信号进行控制
- Y由Y\(_{out}\)控制输入,ACC通过总线并将ALU\(_{in}\)有效保持输入,接收到控制信号开始运算,结果输出到Z
因此在运算过程中,总线是处于占用状态,运算结束后总线才恢复空闲
- Z -> Bus -> ACC:Z\(_{out}\)和ACC\(_{in}\)有效,结果 -> ACC
总结:
- 单总线结构,成本略低,但是ALU运算需要暂存器Y、Z去实现,效率会下降;同一时间只能允许两个部件进行数据通信
- 多总线结构和单总线结构类似,但是可以不需要使用暂存器,可使用多条总线完成多个信号的同步输出,成本较高,但数据传输效率更高
例题,设有如图所示的单总线结构,分析指令ADD (R0),R1 的指令流程和控制信号
- 指令功能为((R0)) + (R1) -> (R0),表示取R0间接寻址找到的操作数与R1内容相加,存入R0内容所在地址的位置
- 指令周期分为取指周期、间址周期、执行周期,各阶段的指令流程:
-
取指周期:公共操作

1) (PC) -> MAR:
控制信号PC\(_{out}\),MAR\(_{in}\)有效
2) M(MAR) -> MDR, (PC) + 1 -> PC:
控制信号MemR,MAR\(_{out}\),MDR\(_{in}\)E有效
3) (MDR) -> IR:
控制信号MDR\(_{out}\),IR\(_{in}\)有效
4)指令译码:无需控制信号其中,(PC) + 1 -> PC也可以在取值周期最后进行,并不影响其他指令的执行,也不需要任何控制信号
-
间址周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中

1) (R0) -> MAR:
控制信号R0\(_{out}\),MAR\(_{in}\)有效
2) M(MAR) -> MDR:
控制信号MemR,MAR\(_{out}\),MDR\(_{in}\)E有效
3) (MDR) -> Y :
控制信号MDR\(_{out}\),Yin\(_{in}\)有效对于简址寻址的实现,可以获得EA以后直接覆盖IR中的地址内容,由IR传递操作数
同时也可以直接到主存中读取EA地址的操作数,直接进行后续运算
-
执行周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中

1) (R1) + (Y) -> Z:
控制信号R1\(_{out}\),ALU\(_{in}\)有效;CU向ALU发ADD控制信号
2) (Z) -> MDR:
控制信号Z\(_{out}\),MDR\(_{in}\)有效
3) (MDR) -> M(MAR) :
控制信号MemW,MDR\(_{out}\)E,MAR\(_{out}\)有效
-
5.3.2 专用数据通路

取值周期:
- (PC) -> MAR:控制信号C\(_0\)有效
- (MAR) -> 主存:控制信号C\(_1\)有效
- 1 -> R:控制单元向主存发送读命令
- M(MAR) -> MDR:控制信号C\(_2\)有效
- (MDR) -> IR:控制信号C\(_3\)有效
- (PC) + 1 -> PC:无需控制信号
- Op(IR) -> CU:控制信号C\(_4\)有效
IR与CU数据通路的控制信号不一定会给出,因此该指令可省略

例题,上图是一个简化了的CPU与主存连接结构示意图(图中省略了所有的多路选择器)
- 其中有一个累加寄存器(ACC)、一个状态数据寄存器和其他4个寄存器:主存地址寄存器(MAR)、主存数据寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR),各部件及其之间的连线表示数据通路,箭头表示信息传递方向
- a、b、c、d 4个寄存器的名称:
- d能自动"+1",是PC
- PC内容是地址,送MAR,故c是MAR
- b与微操作信号发生器相连,是IR
- 与主存相连的寄存器是MAR和MDR,c是MAR,则a是MDR
- 简述图中取指令的数据通路
- (PC) -> MAR
- M(MAR) -> MDR
- (MDR) -> IR
- 简述数据在运算器和主存之间进行存/取访问的数据通路
- 存/取的数据放到ACC中,设数据地址已放入MAR
- 取:
- M(MAR) -> MDR
- (MDR) -> ALU -> ACC
- 存:
- (ACC) -> MDR
- (MDR) -> M(MAR)
- 简述完成指令LDA X的数据通路(X为主存地址,LDA的功能为(X) -> ACC)
- X -> MAR
- M(MAR) -> MDR
- (MDR) -> ALU -> ACC
- 简述完成指令ADD Y的数据通路(Y为主存地址,ADD的功能为(ACC)+(Y) -> ACC)
- Y -> MAR
- M(MAR) -> MDR
- (MDR) -> ALU, (ACC) -> ALU
- ALU -> ACC
- 简述完成指令STA Z的数据通路(Z为主存地址,STA的功能为(ACC) -> Z)
- Z -> MAR
- (ACC) -> MDR
- (MDR) -> M(MAR)
5.4 控制器功能与工作原理
CU发出一个微命令,可完成对应的微操作,即1个微命令对应1个微操作
- 微命令1 使得PC\(_{out}\)、MAR\(_{in}\)有效。完成对应的微操作1 (PC) -> MAR
- 一个节拍/机器周期内可以并行完成多个"相容的"微操作
- 同一个微操作可能在不同指令的不同阶段被使用
- 不同指令的执行周期所需节拍数各不相同。为了简化设计,选择定长的机器周期,以可能出现的最大节拍数为准(通常以访存所需节拍数作为参考)
- 若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行
根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些"微命令"
5.4.1 每个阶段的微命令序列
1.取指周期,所有指令都一样
- PC -> MAR
- 1 -> R
- M(MAR) -> MDR
- MDR -> IR
- OP(IR) -> ID
- (PC) + 1 -> PC
ID为指令译码器,Instruction Decoder
2.间址周期,所有指令都一样
- Ad(IR) -> MAR
- 1 -> R
- M(MAR) -> MDR
- MDR -> Ad(IR)
3.执行周期,各个指令各不相同
- CLA:clear ACC指令,将ACC中得内容清零
- 0 -> AC
很多地方把ACC简写为AC
- LDA X:取数指令,把X所指内容取到ACC
- Ad(IR) -> MAR
- 1 -> R
- M(MAR) -> MDR
- MDR -> X
- JMP X:无条件转移
- Ad(IR) -> PC
- BAN X:Branch ACC Negative条件转移,当ACC为负时转移
- A\(_0\) • Ad ( IR ) + A\(_0\) • (PC) -> PC
A\(_0\)为符号位,当为负数时为1
中断周期内的微命令序列原理类似
注:
- 正是由于取指令阶段、指令译码阶段的微命令序列都是固定相同的,因此这两个阶段不需要控制信号的控制
- 只有当指令译码阶段结束后,控制器才会生成指令相应的控制信号传送到各个功能部件
5.5 硬步线控制器

其中,
-
标志可能来自运算器的PSW、ACC的符号位等,也可能来自I/O设备、主存
-
硬布线控制的微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生
早期硬布线控制的CPU,微操作控制信号的形成主要与指令译码信号和时钟信号相关
随着现代计算机的发展,状态信息也作为扩展信息影响着控制信号的形成
- 指令码:指令操作码经过指令译码器译码产生的指令信息
- 时序:时许系统产生的机器周期信息和节拍信号,时序信息包含机器周期、节拍,一般由节拍发生器元件产生
- 状态信息/条件码/标志:来自执行单元的反馈信息,如PSW状态信息。有些微操作的执行不依赖于该信号就可以直接执行
硬布线控制的计算机,关于微操作命令的使用:
- 如要让C\(_1\)对应微操作(PC) -> MAR,则将其接到PC\(_{out}\)、MAR\(_{in}\)即可
- 所有指令的取指周期、T\(_0\)节拍下一定要完成(PC) -> MAR。则可知C\(_1\)= FE · T\(_0\)
硬步线控制器特点:
- 指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)
- 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难
- 由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生
5.5.1 硬布线控制器设计
硬布线控制器设计包括如下几个方面:
- 分析每个阶段的微操作序列(取值、间址、执行、中断四个阶段),确定哪些指令在什么阶段、在什么条件下会使用到的微操作
- 选择CPU的控制方式,确定采用定长机器周期还是不定长机器周期以及每个机器周期安排节拍数量
- 安排微操作时序,设计如何用3个节拍完成整个机器周期内的所有微操作
- 电路设计,确定每个微操作命令的逻辑表达式并用电路实现
- 列出操作时间表
- 写出微操作命令的最简表达式
- 画出逻辑图

逻辑表达式是电路的数学化描述,但硬布线控制器一般不考察电路设计与实现
考研中一般不会考察完整的硬布线控制器设计过程,下面为完整的设计过程
硬布线控制器设计——微操作序列
罗列出所有指令在各个阶段的微操作序列,就可以知道在什么情况下需要使用这个微操作
硬布线控制器设计——CPU的控制方式
假设采用同步控制方式(定长机器周期),一个机器周期内安排3个节拍
硬布线控制器设计——微操作时序安排
遵循原则:
- 微操作的先后顺序不得随意更改
- 被控对象不同的微操作,尽量安排在一个节拍内完成
- 占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序
取指周期:
| 节拍 | 指令 | 补充 |
|---|---|---|
| T0 | (1) PC -> MAR | |
| T0 | (2) 1 -> R | 存储器空闲即可 |
| T1 | (3) M(MAR) -> MDR | 在(1)之后执行 |
| T1 | (6) (PC) + 1 -> PC | 在(1)之后执行,PC自增过程只要执行完(1)可以放在任意节拍中 |
| T2 | (4) MDR -> IR | 在(3)之后执行 |
| T2 | (5) OP(IR) -> ID | 在(4)之后执行 |
- (4)(5)两个微操作占用时间较短,根据原则三安排在一个节拍
- MDR -> IR 是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成OP(IR) -> ID,也就是可以一次同时发出两个微命令
- 但(3)(4)不同安排在同一个节拍中,
- M(MAR) -> MDR 从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成
间址周期:
| 节拍 | 指令 |
|---|---|
| T0 | (1) Ad(IR) -> MAR |
| T0 | (2) 1 -> R |
| T1 | (3) M(MAR) -> MDR |
| T2 | (4) MDR -> Ad(IR) |
执行周期:
假设每个指令需要3个节拍,
| 阶段 | 汇编语句 | 节拍 | 指令 | 补充 |
|---|---|---|---|---|
| 非访存指令 | 1) CLA | T0 | clear,ACC清零 | |
| T1 | ||||
| T2 | Ad(IR) -> MAR | |||
| 2) COM | T0 | complement,ACC取反 | ||
| T1 | ||||
| T2 | \(\overline{\text{AC}}\) -> AC | |||
| 3) SHR | T0 | shift,算数右移 | ||
| T1 | ||||
| T2 | L(AC) -> r(AC) | |||
| T2 | AC\(_0\) -> AC\(_0\) | |||
| 4) CSL | T0 | cyclic shift,循环左移 | ||
| T1 | ||||
| T2 | R(AC) -> L(AC),AC\(_0\) -> AC\(_n\) | |||
| 5) STP | T0 | stop,停机 | ||
| T1 | ||||
| T2 | 0 -> G | |||
| 访存指令 | 6) ADD X | T0 | Ad(IR) -> MAR,1 -> R | 加法指令,隐含ACC指令 |
| T1 | M(MAR) -> MDR | |||
| T2 | (AC) + (MDR) -> AC | |||
| 7) STA X | T0 | Ad(IR) -> MAR,1 -> W | 存数指令,隐含ACC指令 | |
| T1 | AC -> MDR | |||
| T2 | MDR -> M(MAR) | |||
| 8) LDA X | T0 | Ad(IR) -> MAR,1 -> R | 存数指令,隐含ACC指令 | |
| T1 | M(MAR) -> MDR | |||
| T2 | MDR -> AC | |||
| 转移指令 | 9) JMP X | T0 | jump,无条件转移 | |
| T1 | ||||
| T2 | Ad(IR) -> PC | |||
| 10) BAN X | T0 | Branch ACC Negative,条件转移 | ||
| T1 | ||||
| T2 | A\(_0\) · Ad(IR) + \(\overline{\text{A}_0}\) · (PC) -> PC |
- 一条指令如果只需要一个微操作,则可以在最后一个节拍执行
- 访存指令可能需要间接寻址,那么可能存在间址周期;而非访存指令则一定不存在间址周期
中断周期:
| 节拍 | 指令 | 补充 |
|---|---|---|
| T0 | (1) a -> MAR | |
| T0 | (2) 1 -> W | 存储器空闲即可 |
| T0 | (3) 0 -> EINT | 硬件关中断 |
| T1 | (4) (PC) -> MDR | 内部数据通路空闲即可 |
| T2 | (5) MDR -> M(MAR) | 在(3)之后执行 |
| T2 | (6) 向量地址 -> PC | 在(3)之后执行 |
- 这些操作由中断隐指令完成,中断隐指令不是一条指令,而是指一条指令的
中断周期由硬件完成的一系列操作 - 中断周期的三个任务:
- 保存断点
- 形成中断服务程序的入口地址
- 关中断
硬布线控制器设计——组合逻辑设计
设计步骤:
- 列出操作时间表
- 列出在取指、间址、执行、中断周期,T0、T1、T2 节拍内有可能用到的所有微操作
- 写出微操作命令的最简表达式
- 画出逻辑图
如M(MAR)-> MDR微操作命令
-
操作时间表
- 取指FE
节拍 状态条件 微操作命令信号 CLA COM SHR CSL STP ADD STA LDA JMP BAN T0 PC -> MAR 1 1 1 1 1 1 1 1 1 1 T0 1 -> R 1 1 1 1 1 1 1 1 1 1 T1 M(MAR) -> MDR 1 1 1 1 1 1 1 1 1 1 T1 (PC) + 1 -> PC 1 1 1 1 1 1 1 1 1 1 T2 MDR -> IR 1 1 1 1 1 1 1 1 1 1 T2 OP(IR) -> ID 1 1 1 1 1 1 1 1 1 1 T2 I 1 -> IND 1 1 1 1 1 T2 \(\overline{\text{I}}\) 1 -> EX 1 1 1 1 1 1 1 1 1 1 - 时间表中CLA、COM等得值为1表示该节拍内,这些非访存指令需要进行执行
- 状态条件为I是间址特征,表示发生了间接寻址,即将开始进入间接寻址阶段;状态条件为\(\overline{\text{I}}\)则表示不需要使用间址,则直接进入执行周期
- 间址IND
节拍 状态条件 微操作命令信号 CLA COM SHR CSL STP ADD STA LDA JMP BAN T0 Ad(IR) -> MAR 1 1 1 1 1 T1 1 -> R 1 1 1 1 1 T2 M(MDR) -> MDR 1 1 1 1 1 T2 \(\overline{\text{IND}}\) 1 -> EX 1 1 1 1 1 -
状态条件\(\overline{\text{IND}}\)表示间接周期标志,因为可能存在多级间接寻址,只有当该标记为0时才会进入执行周期
-
执行EX
节拍 状态条件 微操作命令信号 CLA COM ADD STA LDA JMP BAN T0 Ad(IR) -> MAR 1 1 1 T0 1 -> R 1 1 T0 1 -> W 1 T1 M(MAR) -> MDR 1 1 T1 AC -> MDR 1 T2 (AC) + (MDR) -> AC 1 T2 MAR -> M(MAR) 1 T2 MDR -> AC 1 T2 0 -> AC 1 T2 \(\overline{\text{AC}}\) -> AC 1 T2 Ad(IR) -> PC 1 T2 A\(_0\) Ad(IR) -> PC 1 -
M(MAR) -> MDR微操作命令的最简逻辑表达式:
FE·T1 +
IND · T1 (ADD+STA+LDA+JMP+BAN) +
EX · T1 (ADD+LDA)
= T1- 整个逻辑表达式中表示了所有M(MAR) -> MDR执行的情况,只要满足任意一种状态,就需要执行这条微指令
-
所对应的电路图

5.6 微程序控制器
补充概念比较:
- 程序:
- 由机器指令序列组成
- 微程序:
- 由微指令序列组成,每一种机器指令唯一对应一个微程序
- 微命令:
- 控制部件向执行部件发出的控制信号
- 微操作:
- 微命令的执行过程
- 机器指令是对程序执行步骤的描述,微指令是对机器指令执行步骤的描述
- 微命令与微操作一一对应,一个微命令对应一根输出线。微指令可能包含多个微命令
- 机器指令是对微指令功能的封装
- 微指令和微程序一样,存储在控制器存储器中
- 微指令的执行时间被称为微周期,机器指令的执行时间被称为指令周期
- 相容性微命令:
- 同一CPU周期内,可以并行完成的微命令
- 互斥性微命令:
- 同一CPU周期内,不允许并行完成的微命令
- 执行过程中可能引起总线冲突只是互斥性微命令不能并行执行的唯一原因
微程序控制器基本结构:
- 微程序控制器类似于一个小型CPU
- 结构图:

其中,- 控制存储器CM按照地址寻址,每条微指令存放在CM的一个控制存储单元内
- 顺序逻辑用于控制微指令的执行顺序,它会根据指令地址码的寻址特征位判断是否跳过间址周期,根据中断信号判断是否进入中断周期
- 对于使用微指令计数器μPC进行顺序逻辑控制的计算机,μPC决定着下一条微指令的执行顺序
- 对于直接通过微指令下地址/后继地址引出下一条微指令的计算机,则由上一条微指令决定
| 存储器硬件 | 存放数据 | 位置 | 组成材料 |
|---|---|---|---|
| 主存M | 程序,数据 | CPU外部 | RAM |
| 控制存储器CM | 微指令 | CPU内部 | ROM |
微程序控制器设计思路:
- 采用"存储程序"的思想,CPU出厂前将所有机器指令的"微程序"存入"控制器存储器"中,同时方便修改和扩展
- 设计目的:一定程度上提高执行效率,方便修改和扩展,同时控制成本
- 硬布线控制,微程序执行速度更高效,但是对于复杂的指令系统,微操作命令越多,电路就越复杂,成本就越高
- 硬布线控制,一旦电路确定设计,就不允许任何修改,除非重新设计,灵活性极差
- 由于微程序采用了控制存储器,控制存储器容量越小,成本越低
- 区别于硬布线控制,微程序控制将机器指令对应的微程序,继续拆分成若干微指令
微程序控制器基本工作原理:
- 所有指令的取指周期、间址周期、中断周期所对应的微指令序列都一样,因此CM类似于主存按照不同周期分别存放微程序

- 取指周期微程序:通常是公用的,故如果某指令系统中有n条机器指令,加上取指微指令,则CM中微程序的个数至少是n+1个
- 物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把它们看作一个整体。因此,"一条指令对应一个微程序"的说法是正确的
- 如果准确描述起来,因是某指令系统有n条机器指令,则CM中微程序段的个数至少为n个
- 间址周期、中断周期微程序:一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段;如果存在间址周期、中断周期,其微程序段都是公用的
5.6.1 微指令格式
水平型微指令:
- 基本格式:操作控制 + 顺序控制
- 一条微指令能定义多个可并行的微命令,即操作控制部分
- 顺序控制指明下一条微指令的地址,包含判断测试字段与后继地址字段
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序较麻烦
垂直型微指令
- 基本格式:微操作码μOP + 目的地址Rd + 源地址Rs
- 一条微指令只能定义一个微命令,由微操作码字段规定具体功能,类似于机器指令
- 优点:微指令短、简单、规整,便于编写微程序
- 缺点:微程序长,执行速度慢,工作效率低
混合型微指令
- 在垂直型的基础上增加一些不太复杂的并行操作
- 特点:微指令较短,仍便于编写;微程序也不长,执行速度加快
5.6.2 微指令编码方式
微指令的编码方式:
- 又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号
- 编码的目标是在保证速度的情况下,尽量缩短微指令字长
水平微指令通常采用直接编码、字段直接编码、字段间编码三种编码方式;而垂直微指令通常采用类似机器指令的编码方式,即OP + AD1 + AD2
直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令;某位为"1"表示该控制信号有效
- 优点:简单、直观,不需要译码操作,执行速度快,操作并行性好
- 缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大
控存容量越大,由于CM是ROM实现的,会直接导致CU、CPu的体积变大
字段直接编码方式
将微指令的控制字段分成若干"段",每段经译码后发出控制信号
- 微命令字段分段的原则:
- 互斥性微命令分在同一段内,相容性微命令分在不同段内
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令
当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作
- 优点:可以缩短微指令字长
- 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢
例题,某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有多少位?
- 第1个互斥类有7个微命令,要留出1个状态表示不操作,所以需要表示8种不同的状态,故需要3个二进制位
- 后面4个互斥类各需要表示4、13、6、7种不同的状态,分别对应2、4、3、3个二进制位
- 故操作控制字段的总位数为3+2+4+3+3 = 15 位
若采用直接编码方式,则控制字段需要33位
字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码
- 优点:可进一步缩短微指令字长
- 缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段
5.6.3 下地址形成部分
微指令的下地址可由以下方式形成:
- 接由微指令的下地址字段指出
- 微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式
- 根据机器指令的操作码形成
- 当机器指令取至指令寄存器后,微指令的地址(即微程序入口地址)由指令操作码经微地址形成部件形成
- 增量计数器法:(CMAR) + 1 -> CMAR 或 (μPC) + 1 -> μPC
- 分支转移
- 微指令格式:操作控制字段 + 转移方式 + 转移地址
- 转移方式:指明判别条件;
- 转移地址:指明转移成功后的去向
- 通过测试网络
- 由专门的电路对不同的标志、电信号进行判定得到测试地址

- 由专门的电路对不同的标志、电信号进行判定得到测试地址
- 由硬件产生微程序入口地址
- 第一条微指令地址由专门硬件产生,通过专门的硬件记录取指周期微程序首地址
- 中断周期由硬件产生中断周期微程序首地址,也通过用专门的硬件记录
例题,某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是多少位?
- 总共需要存储32×4+2 = 130条微指令
- 2\(^7\)= 128 < 130 < 2\(^8\)= 256,则标注出130个不同的位置至少需要8个二进制位
5.6.4 微程序控制单元设计
设计步骤:
- 分析每个阶段的微操作序列
- 写出对应机器指令的微操作命令及节拍安排
- 写出每个周期所需要的微操作(参照硬布线)
- 补充微程序控制器特有的微操作
- 取指周期:
- Ad(CMDR) -> CMAR:每条微指令结束之后都需要进行
- OP(IR) -> 微地址形成部件 -> CMAR:取指周期的最后一条微指令完成后,要根据指令操作码确定其执行周期的微程序首地址
- 执行周期:
- Ad(CMDR) -> CMAR:每条微指令结束之后都需要进行
- 取指周期:
- 确定微指令格式
- 根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数
- 根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数
- 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
- 编写微指令码点
- 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点
例如,取指周期的微操作序列、节拍安排
| 节拍 | 微操作命令信号 | 补充 |
|---|---|---|
| T0 | PC -> MAR | 微指令a |
| T0 | 1 -> R | 微指令a |
| T1 | Ad(CMDR) -> CMAR | 需要用T1节拍确定下一条微指令的地址 |
| T2 | M(MAR) -> MDR | 微指令b |
| T2 | (PC) + 1 -> PC | 微指令b |
| T3 | Ad(CMDR) -> CMAR | 需要用T3节拍确定下一条微指令的地址 |
| T4 | MDR -> IR | 微指令c |
| T4 | OP(IR) -> 微地址形成部件 | 微指令c |
| T5 | 微地址形成部件 -> CMAR | 根据指令操作码确定其执行周期微指令序列的首地址 |
- 取指周期的第一条微指令地址由硬件自动给出
- 微指令a的下地址用于表示b的地址
- Ad(CMDR) -> CMAR,用当前微指令的下地址表示找到下一条微指令
- 微指令部分和硬布线设计时差不多,但还需要增加读取微指令以及转入下一个机器周期指令的微命令
- 微程序控制器的速度比硬布线控制器更慢
关于T4、T5中的微命令,也可以调整为T4只执行MAR -> IR,T5执行 OP(IR) -> 微地址形成部件 -> CMAR,只要确保一个节拍内可以并行执行即可
微程序设计分类
静态微程序设计和动态微程序设计:
- 静态:微程序无需改变,采用 ROM
- 动态:通过 改变微指令 和 微程序 改变机器指令
- 因此可以额创建新的指令,有利于仿真,采用可电擦除EPROM
毫微程序设计:
- 毫微程序设计的基本概念
- 微程序设计 用 微程序解释机器指令;毫微程序设计 用 毫微程序解释微程序
- 毫微指令与微指令的关系好比微指令与机器指令的关系
5.6.5 硬布线与微程序的比较
| 项目 | 微程序控制 | 硬布线控制 |
|---|---|---|
| 工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
| 执行速度 | 慢 | 快 |
| 规整性 | 较规整 | 烦琐、不规整 |
| 应用场合 | CISC CPU | RISC CPU |
| 易扩充性 | 易扩充修改 | 困难,需要重新设计电路 |
5.7 并行CPU
串行方法执行指令的方式,同一时刻CPU中只有一条指令执行,各功能部件的利用率不高
现代计算机普遍采用指令流水线计数,同一时刻让多条指令在CPU的不同功能部件中并发执行,大大提高了各功能部件的并行性和程序的执行效率
提高CPU并行性有两种的优化方向:
- 时间上并行技术
- 流水线技术:将一个任务分解为几个不通的子阶段,每个子阶段在不同的功能部件上并行执行,以便在同一时刻能够同时执行多个任务,进而提高系统性能
- 空间上并行技术
- 超标量处理机:在一个处理机内设置多个执行相同任务的功能部件,并让这些功能部件并行工作
所有的精简指令集计算机RISC均采用流水线技术,有部分复杂指令集计算机CISC也采用了流水线技术
5.7.1 指令流水线基本概念
一条指令的执行过程可以分成多个阶段(或过程),该阶段也被称呼为功能段/流水段
- 根据计算机的不同,具体的分法也不同,假设分为取值-分析-执行,三个阶段
也可以把每条指令的执行过程分成4个或5个阶段,分成5个阶段是比较常见的做法:取值IF - 译码/读寄存器ID - 执行/计算地址EX - 访存MEM - 写回WB
- 取指阶段:
- 根据PC内容访问主存储器或Cache,取出一条指令送到IR中
- 分析阶段:
- 对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数
- 执行阶段:
- 根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
- 顺序执行方式
- 传统冯·诺依曼机采用顺序执行方式,又称串行执行方式
- 总耗时T = n×3t = 3nt
- 优点:控制简单,硬件代价小
- 缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低
- 一次重叠执行方式
- 前一条语句完成取指、分析阶段后,执行阶段和第二条指令的取指过程并行进行
- 总耗时T = 3t + (n-1)×2t = (1+2n)t
- 优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高
- 缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了
- 二次重叠执行方式
- 前一条语句完成取指后,分析阶段和下一条指令的取指过程并行进行
- 总耗时T = 3t + (n-1)×t = (2+n)t
- 与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行
补充:
- 每个流水段/功能段用到的硬件不一样,同一时间内,可能出现重复使用同一个硬件或使用相互冲突的硬件
- 执行执行过程种各个子功能都需要包含在某个流水段中,每条指令都会一次进入所有流水段进行处理
- 不同指令的复杂度不同,所需要的功能段也有所不同,未保证每条指令均能在整个指令流水线正常运行
- 流水段的段数k以最复杂指令所用的功能段个数为准,各个流水段长度(执行时间)必须相同且等于最长的功能段执行时间
- 其余指令可以通过增加"空操作"功能段的方式向最复杂的指令靠齐,各功能段内即使操作已完成也不提前结束该功能段,而是等待流水段完成
- 流水段与流水段之间存在流水段寄存器,每个流水段寄存器用来存放从当前流水段传到后面所有流水段的信息
- 由于每个流水段之间传递的信息不一样,因此各个流水段寄存器的长度也不一样
- 流水段寄存器对于用户透明,也不存在所谓的编号
流水线的表示方法:
- 指令周期流程图:一条指令的完整执行过程
- 取值IF -> 译码ID -> 执行EX -> 回写WB
- 指令执行过程图:主要用于分析指令执行过程以及影响流水线的因素

- 时空图:时空反应不同的阶段所对应的不同的硬件资源

5.7.1 流水线性能指标
吞吐率:吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量
- 设任务数为n;处理完成n个任务所用的时间为T\(_k\),则计算流水线吞吐率(TP)的最基本的公式为TP = n / T\({_k}\)
- 理想情况下,流水线的时空图如下:
- 一条指令的执行分为k个阶段,每个阶段耗时∆t,一般取∆t=一个时钟周期
- 当连续输入的任务n -> ∞时,得最大吞吐率为TP\(_{max}\) = 1 / ∆t
- T\(_k\) = (k+n-1) ∆t,流水线的实际吞吐率为TP = n / ∆t(k+n-1)
- 装入时间:从第一条指令开始取指到全部指令完成取指所需要的时间;排空时间:从第一条指令开始执行最后一个阶段到最后一条指令完成最后一个阶段所需要的时间
- 一个m段流水线稳定时的CPU吞吐能力和m个并行部件的CPU,具有相同水平的吞吐能力
- 具有k个并行部件的CPU,n个任务所用的时间为k∆t,吞吐率为1 / ∆t
- 对于流水线CPU,当n足够大时,即稳定运行时,每个任务的完成时间也为1 / ∆t
加速比:
- 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
- 设T\(_0\)表示不使用流水线时的执行时间,即顺序执行所用的时间;T\(_k\)表示使用流水线时的执行时间,则计算流水线加速比(S)的基本公式为S = T\(_0\) / T\(_k\)
- 理想情况下,流水线的时空图如下:
- 一条指令的执行分为k个阶段,每个阶段耗时∆t,一般取∆t=一个时钟周期
- 当连续输入的任务n -> ∞时,最大加速比为S\(_{max}\) = k
- 单独完成一个任务耗时为k∆t,则顺序完成n个任务耗时T\(_0\) = nk∆t;T\(_k\) = (k+n-1) ∆t,则实际加速比S = nk∆t / ∆t(k+n-1) = kn / (k+n-1)
效率:
- 流水线的设备利用率称为流水线的效率
- 在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比,则流水线效率(E)的一般公式为 E = 0个任务占用时空区有效面积 / n个任务所用的时间与k个流水段所围成的时空区总面积 = T\(_0\) / kT\(_k\)
- 理想情况下,流水线的时空图如下:
- 一条指令的执行分为k个阶段,每个阶段耗时∆t,一般取∆t=一个时钟周期
- 当连续输入的任务n -> ∞时,最高效率为E\({max}\) = 1
理想情况:各阶段花费时间相同;每个阶段结束后能立即进入下一阶段
5.7.2 指令流水线影响因素
MIPS经典架构,五段流水线架构:
- Microprocessor without interlocked piped stages architecture,也可称为Millions of Instructions Per Second,是一种精简指令集(RISC)的处理器架构

- 为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns
- 规定每条指令的机器周期数相同,且每个机器周期的长度也相同
- 流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器。其作用是保存本流水段的执行结果,提供给下一流水段使用
- 考虑到程序的局部性原理,Cache的命中率比较高且比主存的读入要更快,通常用Cache对缓冲寄存器进行数据输出
- Cache的指令的读取以及数据的读取使用不同的Cache分别完成,可以确保IF阶段、M阶段的执行可以并行完成
- ID阶段除了进行指令分析外,还会进行数据的读入,并且要求从寄存器中读入到锁存器中。其中图中Imm为立即数,读入立即数直接传给锁存器即可
流水线影响因素——结构相关
结构相关:资源冲突/互斥,也叫结构冒险,structural hazard,或者硬件资源冲突hardware resource conflict
- 由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关

- 其中,Load指令的以及Instr3指令在不同阶段时期同时需要访问主存、寄存器,发生了资源冲突
结构相关解决思路:
- 冲突避免:
- 后一相关指令暂停一周期
- 资源重复配置:
- 即增加硬件资源,如使用数据存储器 + 指令存储器
流水线影响因素——数据相关
数据相关:数据冲突/同步,也叫数据冒险
- 数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关

- 其中,add指令将r2与r3的数据相加结果存入r1,但需要在最后W写回阶段才会将结果存入,而sub指令要进行r1与r3的数据相减过程,由于r1的结果还未存入进去,发生了数据冲突
数据相关解决思路:
- 冲突避免:
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入"NOP"两种方法
- 硬件阻塞:当指令执行到数据相关问题后直接停止,剩余机器周期什么都不做
- 软件插入:NOP指令为空操作,对于存在数据相关问题的指令直接替换为NOP指令,直到数据相关问题结束才会执行后续的指令
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入"NOP"两种方法
- 数据旁路技术:
- 也称为转发机制,当两个语句发生数据相关问题时,可不需要存入寄存器中,可设计专门的电路,直接从ALU的输出端传给ALU的输入端,这样就避免了数据相关问题
- 编译优化:
- 通过编译器调整指令顺序来解决数据相关
注:
- 并非所有数据冒险都能通过转发技术解决
- 如load-use数据冒险,前一条指令采用间接寻址写入某寄存器,且后一条语需要读取该寄存器中的值,不能通过转发方式转发到ALU中
- 那么后一条指令就必须等上一条指令完成读出流水段,才能执行后一条语句的执行过程,这种情况只能采取阻塞解决,且至少阻塞一个时钟周期
- 前面的分支指令和后面的ALU运算指令也有可能发生数据冒险
- 有些处理器不采用PSW存放标志位,而是使用通用寄存器存放,这种处理器在先后执行分支指令和ALU运算指令时可能发生数据冒险
流水线影响因素——控制相关
控制相关:控制冲突,也叫控制冒险
- 当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关

控制相关解决思路:
- 冲突避免:
- 阻塞指令,类似于数据冒险的解决方案
- 增加转移指令分支预测:
- 通过尽早判别该转移指令是否发生跳转,今早生成转移目标指令,避免无效的流水线进行执行
- 简单预测:
- 每次的预测结果均一样,永远猜ture或false
- 动态预测:
- 根据历史情况动态调整,因此动态预测的预测成功率通常大于静态预测
- 若预测错误,已被错误放入流水线执行的指令必须被丢弃
- 简单预测:
- 取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码,类似于加法器各位进位位通过改造电路的方式并行执行
- 提高转移方向的猜准率
- 通过尽早判别该转移指令是否发生跳转,今早生成转移目标指令,避免无效的流水线进行执行
注:
- 条件转移指令、无条件转义指令都可能存在控制冒险问题
- 控制冒险引发的开销和流水段的段量相关
- 假设指令的最后一个流水段进行转移指令,按照度为1的m段流水线,且不存在空操作的话,受影响的指令数至多为m-1条
5.7.3 流水线的分类
根据流水线使用的级别的不同,可分为如下几种:
- 处理机级流水:
- 把一条指令解释过程分成多个子过程,即指令流水线
- 如前面提到的取指、译码、执行、访存及写回5个子过程
- 部件功能级流水:
- 将复杂的算术逻辑运算组成流水线工作方式
- 由于每个指令的阶段需要一个功能部件去完成,部件功能级流水就是将该功能部件完成该指令操作的过程进一步细化为多个子过程,级部件功能的内部
- 例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程
- 处理机间流水:
- 该种流水线是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中
- 如某系统有多个CPU,不同CPU同步完成不同的指令过程
按流水线可以完成的功能,可分为如下几种:
- 单功能流水线:
- 只能实现一种固定的专门功能的流水线
- 多功能流水线:
- 通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
按同一时间内各段之间的连接方式,可分为如下几种:
- 静态流水线:
- 在同一时间内,流水线的各段只能按同一种功能的连接方式工作
- 动态流水线:
- 在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂
按流水线的各个功能段之间是否有反馈信号,可分为如下几种:
- 线性流水线:
- 从输入到输出,每个功能段只允许经过一次,不存在反馈回路
- 非线性流水线:
- 存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算
- 如数据相关问题的解决方案,将ALU的输出与输入进行电路相连
- 对于没有乘法电路的CPU,对于乘法功能的实现可能需要使用多次加法过程,因此该功能段可能会数次通过流水线
5.7.4 五段式指令流水线

- 通常,RISC处理器只有"取数LOAD"和"存数STORE"指令才能访问主存
- 很多教材把写回PC的功能段称为”WrPC段“,Write PC,其耗时比M段更短,可安排在M段时间内完成;而一般WB阶段时进行通用寄存器写回操作
- 只有上一条指令进入ID段后,下一条指令才能开始IF段,否则会覆盖IF段锁存器的内容
运算类指令流水线执行过程
常见运算类指令:
| 运算类指令 | 指令汇编格式 | 功能 |
|---|---|---|
| 加法指令(两个寄存器相加) | ADD Rs,Rd | (Rs) + (Rd) -> Rd |
| 加法指令(寄存器与立即数相加) | ADD #996,Rd | 996 + (Rd) -> Rd |
| 算数左移指令 | SHL Rd | (Rd) <<< 2 -> Rd |
Rs指源操作数(source),Rd指目的操作数(destination)
运算类指令
- IF:根据PC从指令Cache取指令至IF段的锁存器
- ID:取出操作数至ID段锁存器
- EX:运算,将结果存入EX段锁存器
- M:空段
- WB:将运算结果写回指定寄存器
尽管M阶段为空段,但是依旧需要消耗一个机器周期
LOAD指令流水线执行过程
指令汇编格式:
- LOAD Rd,996(Rs)
- 可简写为 LOAD Rd,mem
指令功能:
- (996+(Rs)) -> Rd
- 可简写为(mem) -> Rd
LOAD指令:
- IF:根据PC从指令Cache取指令至IF段的锁存器
- ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm
- EX:运算,得到有效地址EA
- M:从数据Cache中取数并放入锁存器
- WB:将取出的数写回寄存器
STORE指令流水线执行过程
指令汇编格式:
- STORE Rs,996(Rd)
- 可简写为 STORE Rs,mem
指令功能:
- Rs -> (996+(Rd))
- 可简写为Rs -> (mem)
STORE指令
- IF:根据PC从指令Cache取指令至IF段的锁存器
- ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到B
- EX:运算,得到有效地址。并将锁存器B的内容放到锁存器Store。
- M:写入数据Cache
- WB:空段
条件转移指令流水线执行过程
| 指令的汇编格式 | 功能 |
|---|---|
| beq Rs, Rt, #偏移量 | 若(Rs)==(Rt),则(PC) + 指令字长 + (偏移量×指令字长) -> PC;否则(PC) + 指令字长 -> PC |
| bne Rs, Rt, #偏移量 | 若(Rs)!=(Rt),则(PC) + 指令字长 + (偏移量×指令字长) -> PC;否则(PC) + 指令字长 -> PC |
通常在IF段结束止之后PC就会自动+"1"
条件转移指令
- IF:根据PC从指令Cache取指令至IF段的锁存器
- ID:进行比较的两个数放入锁存器A、B;偏移量放入Imm
- EX:运算,比较两个数
- M:将目标PC值写回PC
- WB:空段
转移类指令常采用相对寻址
无条件转移指令流水线执行过程
指令的汇编格式:
- jmp #偏移量
指令功能:
- (PC) + 指令字长 + (偏移量×指令字长) -> PC
无条件转移指令
- IF:根据PC从指令Cache取指令至IF段的锁存器
- ID:偏移量放入Imm
- EX:将目标PC值写回PC
- M:空段
- WB:空段
"WrPC段"耗时比EX段更短,可安排在EX段时间内完成
- 因为转移指令会修改PC的值,可能存在控制冲突,WrPC段越早完成,就越能避免控制冲突。当然,也有的地方会在WB段时间内才修改PC的值
五段式流水线过程例题:
假设某指令流水线采用"按序发射,按序完成"方式,没有采用转发技术处理数据相关,并且同一寄存器的读和写操作不能在同一个时钟周期内进行。
-
若高级语言程序中某赋值语句x=a+b,x、a和b均为int型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流中的执行过程如下图所示

-
则下面4条指令执行过程中I3的ID段和I4的IF段被阻塞的原因各是什么?
指令 汇编代码 功能 I1 LOAD R1,[a] M[a] —> R1 I2 LOAD R2,[b] M[b] —> R2 I3 ADD R1,R2 ( R1 ) + ( R2 ) —> R2 I4 STORE R2,[x] ( R2 ) —> M[x] -
I3与I1和I2存在数据相关;I4的IF段必须在I3进入ID段后才能开始,否则会覆盖IF段锁存器的内容
5.7.5 高级流水线技术
不同于单流水线技术,超标量处理机强调指令级的并行,将两者相结合可以获得更高的执行效率
不论是单流水技术还是高级流水线技术,一条指令都分为多端指令,并由不同单元完成
增加指令级并行策略:
- 多发射技术:
- 通过采用多个内部功能部件,使流水线功能段能够同时处理多条指令,处理及一次可以发射多条指令进入流水线执行
- 超流水线技术:
- 通过增加流水线技术来时更多的指令同时在流水线中重叠执行
超标量流水线技术

也叫动态多发射技术,是一种以空间/资源换取时间的策略
- 每个时钟周期内可并发多条独立指令,并以并行操作方式将多条指令编译并执行
这里只强调了一个时钟周期能可以执行多条指令的流水段
- 特点:
- 超标量流水线需要配置多套功能部件,用于多条指令的并行执行
- 通过编译优化技术,把可并行执行的指令搭配起来
乱序执行:
- 为了更好提高并行性能,多数超标量CPU都结合动态流水线调度技术,通过动态分支预测手段,让指令不按顺序执行
- 而在简单的超标量CPU中,指令一般是按照顺序发射执行的
超长指令字技术

也称作静态多发射技术,由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条
- 一条指令字可达几百bit,需要采用多个处理部件处理单条指令
- 其中,多条指令的EX执行阶段使用不同的功能部件,可以在同一个时钟周期内并行执行
- 特点:
- 具有多个操作码字段的超长指令字(可达几百位)
- 采用多个独立的处理部件
超流水技术

- 在一个时钟周期内再分段(三段)
理论上流水线不同阶段的执行是以机器周期为单位的,每个阶段占用一个机器周期。考虑最理想状态一个机器周期只需要使用一个时钟周期,此处可以将时钟周期等价为机器周期
- 流水线功能段划分越多,时钟周期就越短,指令吞吐率就越高,因此超流水线技术通过提供流水线主频的方式提高流水线性能
- 但是流水线技术越多,用于流水寄存器的开销越大,反而不利于性能提升,制造成本也更大
- 特点:
- 在一个时钟周期内一个功能部件使用多次(三次)
- 不能调整指令的执行顺序
- 需要依靠编译程序解决优化问题
超流水线和超标量流水线对比:
- 超流水线CPU在流水线充满后,每个时钟周期还是执行一条指令,CPI=1,但主频更高
- 多发射流水线CPU每个时钟周期可以处理多条指令,CPI<1,但成本更高、控制更为复杂
5.8 多处理器
微处理器是微型处理器的简称,单纯代表了处理器的体积、大小比较小
按照Flynn提出的计算机分类方法,分为以下几类:
| 简称 | 含义 | 特点 |
|---|---|---|
| SISD | 单指令流单数据流结构 | 一个指令流对应一个数据流 |
| SIMD | 单指令流多数据流结构 | 一个指令流对应多个数据流 |
| MISD | 多指令流单数据流结构 | 多个指令流对应一个数据流(实际不存在该结构的计算机) |
| MIMD | 多指令流多数据流结构 | 多个指令流对应多个数据流 |
- 对于单处理器,只有一个指令流和数据流,故为单指令流单数据流SISD结构
- 对于多处理器,每个处理器都有一个指令流和数据流,因此是多指令流多数据流MIMD结构
- M:multiple,S:single,I:instruction,D:data
SISD:单指令流单数据流
- 特性:
- 各指令序列只能并发、不能并行,每条指令处理一两个数据
计组课程一直在学的就是SISD,每条指令可以处理一两个数据(移位指令、加法指令)
- 不是数据级并行技术
- 硬件组成:
- 只有一个处理器、一个存储器
- 若想提高效率,可采用指令流水线,需要设置多个功能部件,采用多模块交叉存储器
SIMD:单指令流多数据流
-
特性:
- 各指令序列只能并发、不能并行,但每条指令可同时处理很多个具有相同特征的数据
- 是一种数据级并行技术
-
硬件组成:

- 一个指令控制部件(CU)+ 多个处理单元/执行单元(如ALU)+ 多个局部存储器
早期某些显卡常采用SIMD,图像处理时,常对每个像素点进行完全一样的渲染(比如加个粉红色滤镜)
可用于优化for循环中对数组元素的重复处理,如循环中的a[i]++
- 每个执行单元有各自的寄存器组、局部存储器、地址寄存器。但整体只有一个程序计数器PC
- 不同执行单元执行同一条指令,处理不同的数据
-
常见例子:并行处理机、阵列处理机、向量处理机
MISD:多指令流单数据流
- 特性:多条指令并行执行,处理同一个数据。现实中不存在这种计算机
MIMD:多指令流多数据流
- 特性:
- 各指令序列并行执行,分别处理多个不同的数据
- 是一种线程级并行、甚至是线程级以上并行技术
- 进一步分类:
- 多处理器系统
- 特性:各处理器之间,可以通过LOAD/STORE指令,访问同一个主存储器,可通过主存相互传送数据
Intel i5、i7处理器就是多处理器系统
- 硬件组成:
- 一台计算机内,包含多个处理器+一个主存储器
- 多个处理器共享单一的物理地址空间
- 特性:各计算机之间,不能通过LOAD/STORE指令直接访问对方的存储器,只能通过"消息传递"相互传送数据
多台计算机组成的“分布式计算系统”
- 硬件组成:
- 由多台计算机组成,因此拥有多个处理器+多个主存储器
- 每台计算机拥有各自的私有存储器,物理地址空间相互独立
- 每个计算机执行的任务是并行的,由于操作的数据各不相同,数据流
也是并行的
- 多处理器系统
5.8.1 向量处理机
向量处理机是SIMD思想的进阶应用
- 特性:
- 一条指令的处理对象是"向量"
向量处理机的LOAD指令,可以将一个向量取到向量寄存器中;加法指令,可以实现两个向量相加
- 擅⻓对向量型数据并行计算、浮点数运算,常被用于超级计算机中,处理科学研究中巨大运算量
空气动力学、核物理学、巨型矩阵计算问题
- 硬件组成:
- 多个处理单元,多组"向量寄存器"
- 主存储器应采用"多个端口同时读取"的交叉多模块存储器
- 要有大容量的、集中式的主存储器,因为主存储器大小限定了机器的解题规模
5.8.2 多处理器
多处理器系统:
- 由于其主存、最低级Cache共享,因此也叫做共享内存多处理器,Shared Memory multiProcessor, SMP,简称为多处理器系统,本质上是MIMD
- 多个处理器共享一个主存储器
- 多个处理器共享单一的地址空间,都可以通过LOAD、STORE指令访问共享的主存储器
- 多处理器系统一般采用偶数路CPU,对称的设计更方便实现
多核处理器,multi-core
- 和SMP本质是一个东西,指示分类角度不同;但多核CPU相比多处理器,功耗和提及更小
- 一个CPU芯片中包含多个处理器,即多个核(core),因此通常也称为 片级多处理器(Chip-Level MultiProcessing,CMP)。意思是:一块芯片上集成了多个处理器
- 多核CPU的各核心可以有独自的Cache,也可以共享同一个Cache
- 所有核共享一个LLC(Last-Level Cache),并共享主存储器
- 每个等效处理器的规格一般相同,核心频率相同
扩展:
| 多处理器架构 | 特点 |
|---|---|
| UMA | 1.多处理器访问统一的内存空间 2.运算扩展性差 3.有Cache一致性问题 |
| NUMA | 1.优先给CPU分配最接近的内存 2.运算扩展性强 |
5.9 硬件多线程

对于不支持硬件多线程的处理器:
- 处理器由一个通用寄存器组、一个功能部件、一个IR以及一个PC寄存器
- 同一时间内只能执行一段程序代码,如果需要执行多个线程,需要进行线程切换
- 由于线程共用通用寄存器组与PC寄存器,当线程切换时,需要把原线程得运行环境进行保存,即将相关数据如寄存器、PC值暂存在主存中,即;恢复过程,将现有线程相关数据也暂存到主存中,并恢复原线程的数据
- 由于切换过程需要消耗时间,会造成效率降低
对于支持硬件多线程的处理器:
- 处理器具有多个通用寄存器组、功能部件、多个IR以及多个PC
- 处理器给不同线程分配不同的通用寄存器组以及PC,使得当多个线程需要切换时,不需要保存运行环境
| 项目 | 细粒度多线程 | 粗粒度多线程 | 同时多线程SMT |
|---|---|---|---|
| 指令发射 | 轮流发射各线程的指令,每个时钟周期发射一个线程 | 连续几个时钟周期,都发射同一个线程的指令序列,流水线阻塞时,切换另一个线程 | 一个时钟周期内,同时发射多个线程的指令 |
| 线程切换频率 | 每个时钟周期切换依次线程 | 只有流水线阻塞时才切换一次线程 | 无 |
| 线程切换代价 | 低 | 高,需要重载流水线 | 无 |
| 并行性 | 指令级并线,线程间不并行 | 指令级并行,线程间不并行 | 指令集并行,线程级并行 |
细粒度多线程示例:
- 每次发射多个线程的指令给IR,分配给不同的功能部件,使得可以并行执行
| 时钟 | CPU |
|---|---|
| i | 发射线程A的指令j、j+1 |
| i+1 | 发射线程B的指令k、k+1 |
| i+2 | 发射线程A的指令j+2、j+3 |
| i+3 | 发射线程B的指令k+2、k+3 |
粗粒度多线程示例:
| 时钟 | CPU |
|---|---|
| i | 发射线程A的指令j、j+1 |
| i+1 | 发射线程A的指令j+2、j+3,发现Cache miss |
| i+2 | 线程调度,从A切换到B |
| i+3 | 发射线程B的指令k、k+1 |
| i+4 | 发射线程B的指令k+2、k+3 |
同时多线程示例:
| 时钟 | CPU |
|---|---|
| i | 发射线程A的指令j、j+1,线程B的指令k、k+1 |
| i+1 | 发射线程A的指令j+2,线程B的指令k+2,线程C的指令m |
| i+2 | 发射线程A的指令j+3,线程C的指令m+1、m+2 |
5.9.1 超线程技术HT
超线程技术,Hyper-threading:
- 将一个物理处理器在软件层面编程两个逻辑处理器,可以是处理器在某一个时刻,同步并行处理更多指令和数据,提高资源的利用率,属于同时多线程SMT技术
- 同时多线程SMT:
- 在实现指令级并行的同时,实现线程级并行
- 在同一个时钟周期中,同时向多个不同线程发射多条指令
- 一个单处理器或单个核中设置了两套线程状态部件,共享高速缓存核功能部件
- 同时多线程SMT:
- 具备超线程技术的CPU需要芯片组的支持才能发挥其技术优势,且每个模拟出来的CPU虚拟核共用物理核的资源
本文来自博客园,作者:GK_Jerry,转载请注明原文链接:https://www.cnblogs.com/GKJerry/articles/18349734



浙公网安备 33010602011771号