CPU 的功能和基本结构
- CPU 的功能
- 指令控制:完成取指令,分析指令,执行指令的操作,即程序的顺序控制。
- 操作控制:一条指令的功能往往是由若干操作信号的组合实现的,CPU 管理并产生由内存中取出的每条指令的操作信号,将各种操作信号送入相应的部件,从而控制这些部件按照指令的要求进行动作。
- 时间控制:对各种操作加以时间上的控制,时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工:进行数据算数和逻辑运算。
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。
- 运算器的基本结构
- 算数逻辑单元:主要功能是进行算术/逻辑运算
- 通用寄存器组:如AX,BX,CX,DX,SP等,用于存放操作数(包含操作数,目的操作数及中间结果)和各种地址信息等。SP 是堆栈指针,用于指示栈顶的地址。
- 暂存寄存器:用于存储从主存中读取的数据,这个数据不能存放在通用寄存器中,否则会破坏原有数据。
- 累加寄存器:是一个通用寄存器,用于存放 ALU 运算的结果,用于实现加法操作。
- 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种信息状态,如OF,SF,CF,ZF 等,PSW 中的这些位参与并决定微操作的形成。
- 移位器:对运算结果进行移位操作。
- 计算器:控制乘除运算的操作步数。
- 专用数据通路方式:根据指令的执行过程中的数据和地址的流动方向安排连接线路。
但是同时我们应该想到,如果直接使用导线连接,相当于多个寄存器同时并且一直向 ALU 传输数据。
解决方法:
- 使用多路选择器,根据控制信号选择一路进行输出。
- 使用三态门可以控制每一路是否输出
三态门具有上面的三个接口,1 控制输入,2 控制输出,3 为控制端,可以根据R0out(R0是否可以输出的意思)是否为高电平进行判断。
性能较高,基本不存在数据冲突,但是结构复杂,硬件量大,不容易实现。
- CPU 内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。
结构简单,容易实现,但是数据在传输中存在较多的冲突现象,性能较低。
- 控制器的基本结构
- 程序计数器(PC):用于指出下一条指令在主存中的存放位置。CPU 就是根据 PC 的内容去主存中读取指令的,因程序中指令是顺序执行的,因此 PC 具有自增的功能。
- 指令寄存器(IR):用于保存当前正在执行的指令。
- 指令译码器(ID):仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 微操作信号发生器:根据 IR 的内容(指令),PSW 的内容(状态信息)及时序信号,产生控制整个计算机系统所需要的各种控制信号,其机构具有组合逻辑型和存储逻辑型。
- 时序系统:用于产生各种时序信号,由统一时钟(CLOCK)分频得到。
- 存储器地址寄存器(MAR):存放需要访问的主存单元。
- 存储器数据寄存器(MDR):存放向主存中写入的信息或则从主存中读取的信息。
其中 MDRoutE 和 MARoutE 代表向数据总线中输出的通路是否有效,MDRout 和 MARout 代表向 CPU 内部总线的通路是否有效。
如上图所示,其中显色表示的 PC,PSW,ACC,R0等通用寄存对用户可见,其余对于用户透明。
如上图所示,关于 CPU 可以分为 ALU,寄存器,CU,中断系统这四大部分。
指令周期的数据流
- 指令周期
定义:CPU 从主存中每取出并执行一条指令所需要的全部时间。
指令周期 = 取址周期(取指令 + 译码) + 执行周期。由于译码时间相对于取指令的时间可以忽略不计,因此可将其统称为取址周期。
指令周期常常使用若干机器周期进行表示,机器周期也称为 CPU 周期。
一个机器周期又同时包含如干个时钟周期(也称为节拍,T 周期,时钟周期,是 CPU 操作的基本单位)。
一个机器周期也就是完成一个子工作的时间,由于完成子工作的时间不一定相同,可以分为定长和不定长的机器周期。
每个指令周期的机器周期数可以不相等,每个机器周期的节拍数也可以不相等。
- 不同的指令的机器周期
- 空指令 NOP
- 加法指令 ADD
- 乘法指令 MUL
- 具有间接寻址的指令
- 带有中断周期的指令
- 指令周期流程
为了判断当前处于上述的那个周期中,我们需要借助触发器进行判断。
四个工作周期都有 CPU 访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。
- 取指周期
- 当前指令地址送到存储器地址寄存器,记为:(PC)-> MAR
- CU 发出控制信号,经过控制总线送到主存中,这里是读信号,记为:1 -> R
- 将 MAR 所指的主存中的内容经过数据总线送到 MDR 中,记为:M(MAR)-> MDR
- 将 MDR 中的内容送入 IR,记为(MDR)-> IR
- CU 发出控制信号,形成下一条指令地址,记为:(PC)+ 1 -> PC
- 间址周期
- 将指令的地址送入 MAR,记为:Ad(IR)-> MAR 或 Ad(MDR)-> MAR
- CU 发出控制信号,经过控制总线送到主存中,这里是读信号,记为:1 -> R
- 将 MAR 所指的主存中的内容经过数据总线送到 MDR 中,记为:M(MAR)-> MDR
- 可以将 MDR 中的有效地址送入MAR 或者将有效地址送入指令的地址码字段,记为:(MDR)-> Ad(IR)
- 执行周期
不同指令的执行操作不同,因此没有统一数据流向。
- 中断周期
暂定当前任务去完成其他任务,为了可以恢复当前任务,需要保存断点。
一般使用堆栈保存断点,这里使用 SP 表示栈顶地址,假设 SP 指向栈顶元素,进栈操作是先修改指针,后存入数据。
由于在主存中的栈是从栈顶到栈底是从低位到高位的,因此存放到栈顶是需要 - 1.
- CU 将 SP - 1,修改的地址送入 MAR 中,也就是接下来存放 PC 的地址。(SP) - 1 -> SP,(SP)-> MAR
- CU 发出控制信号,启动主存进行写操作。记为 :1 -> W
- 将断点 PC 的值送入MDR,记为(PC)-> MDR,之后将 PC 送入主存中。
- CU 将中断服务程序的入口地址(由向量地址形成部件产生)送入 PC,记为:向量地址 -> PC
- 指令执行方案
一个指令周期通常需要几个时间段(指令步骤),每个步骤完成指令的一部分几个依次执行的步骤完成这个指令的全部功能。
- 方案一:单指令周期
对于所有指令都使用相同的执行时间来完成。
指令之间串行执行,指令周期取决于执行时间最长的指令的执行时间。
对于本来可以短时间完成的指令,要消耗更多的时间。
- 方案二:多指令周期
对于不同类型的指令使用不同的执行步骤来完成。
指令之间串行执行,选用不同个数的时钟周期来完成不同指令的执行过程。需要的硬件设计比单指令方式更加复杂。
- 方案三:流水线方案
在每个时钟周期启动一条指令,尽量让多条指令同时运行,但是处于不同的执行步骤,指令之间并行执行。
数据通路
定义:数据在功能部件之间传输的路径
- CPU 内部的单总线方式
内部总线:CPU 内部连接个寄存器和运算部件之间的总线。
系统总线:同一台计算机系统之间各部件,CPU,内存,通道和各类I/O接口之间连接的总线。
- 寄存器之间数据传送
例如将 PC 中的内容送入 MAR ,实现传送操作的流程和控制信号为:
(PC)-> BUS PCout 有效,PC 内容送到总线
BUS -> MAR MARin 有效,总线内容送到 MAR
- 主存和 CPU 之间的数据传送
例如 CPU 从主存中读取指令,实现传送操作的流程和控制信号为:
(PC)-> BUS -> MAR PCout 和 MARin 有效,现行指令地址 -> MAR
1 -> R CU 发出读命令(通过控制总线发出)
M(MAR) -> 数据线 ->MDR MDRin有效
(MDR)-> BUS -> IR MDRout 和 IRin 有效,现行指令 -> IR
- 执行算数或逻辑与运算
例如加法指令,微操作序列和控制信号为:
Ad(IR) -> BUS -> MAR MDRout 和 MARin 有效
1 -> R CU 发出读命令
M(MAR)-> 数据线 -> MDR MDRin有效
(MDR) -> BUS -> Y MDRout 和 Yin 有效,操作数 -> Y
(ACC) +(Y) -> Z ACCout 和 ALUin有效,CU 向 ALU 发送加信号
(Z) -> ACC Zout 和 ACCin 有效,结果 -> ACC
注意:ALU需要通过两个输入信号有效,但是因为一个 CPU 的内部总线同一时刻只能传输一个信号,因此需要一个暂存寄存器来存储数据,Y 和 ALU 之间的传输数据不需要占用总线。
- 专用数据通路
- 取值周期
(PC)-> MAR C0有效
(MAR)->主存 C1有效
1 -> R 控制单元向主存发送读信号
M(MAR)-> MDR C2有效
(MDR)-> IR C3有效
(PC)+ 1 -> PC
Op(IR)-> CU C4有效
硬布线控制器
在一个节拍内,CU可以发出一个微命令,完成对应的微操作。例如,微命令 1 可以使PCout,MARin有效,完成对应的微操作1(PC)-> MAR。
- 为了节省效率,一个节拍内可以并行的完成多个不干扰的微操作。
- 同一个微操作可能在不同的指令的不同阶段被使用。
- 不同指令的执行周期所需要的节拍数不同,为了简化设计,通常使用定长的机器周期,使用可能出现的最大的节拍数为基准(通常使用访存需要的节拍数为参考)
- 如果实际用到的节拍数较少,可以将为微操作安排在机器周期末尾的几个节拍上进行。
根据指令操作码,目前的机器周期,节拍信号,机器状态条件,即可以确定这个节拍下应该发出的”微命令“
(1)控制单元 CU 通过操作码判断哪个输入信号有效,判断当前执行的是哪个指令
(2)控制单元通过触发器的值判断当前处于哪个机器周期
(3)控制单元通过节拍发生器的高低电平判断当前处于哪个节拍信号
(4)控制单元通过执行单元的反馈信息判断机器状态条件
输出信号对应一个微命令,也就是对应一个微操作。例如:要让C1对应微操作(PC)-> MAR,使其接到PCout,MARin即可,C1=FE·T0
- 硬布线控制器的设计
- 分析每个阶段的微操作序列
- 取值周期(所有指令都相同)
PC -> MAR
1 -> R
M(MAR) -> MDR
MDR -> IR
OP(IR) -> ID
(PC) + 1 -> PC
- 间址周期(所有指令都相同)
Ad(IR) -> MAR
1 -> R
M(MAR) -> MDR
MDR -> Ad(IR)
- 执行周期(每个指令各不相同)
CLA(将 ACC 中的内容清零) 0 -> AC
LDA X(取数指令,将 X 所指的内容取到 ACC) Ad(IR) -> MAR
1 -> R
M(MAR) -> MDR
MDR -> AC
JMP X(无条件转移指令) Ad(IR) -> PC
BAN X(条件转移指令 ,当 ACC 为负时转移)
- 安排微操作时序
(1)微操作的先后顺序不可随意更改
(2)被控对象不同的微操作尽量安排在同一个节拍
(3)占用时间较短的微操作尽量安排在同一个节拍,可以有先后顺序
- 取值周期
4 和 5 虽然有先后顺序,但是由于MDR,IR,ID 都是CPU内部,时间很快,因此我们可以按照原则3安排在同一个节拍
- 间址周期
- 执行周期
(1)非访存指令
(2)访存指令
(3)转移指令
注意:当需要完成的指令很少,可以安排在最后一个节拍执行。
- 组合逻辑设计
- 列出操作时间表
(1)取址周期
(2)间址周期
其中的 IND 可以判断是否完成了全部的间址周期,可以进入到执行周期之中。
(3)执行周期
- 微操作命令的最简表达式
- 画出逻辑图
硬布线控制器的特点:
指令越多,设计和实现就越复杂,因此一般使用RISC(精简指令集系统),如果扩充一条新的指令,控制器的设计就需要进行改动,因此很难扩充指令。由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号需要根据组合逻辑电路即时产生。
微程序控制器
采用“存储程序”的思想,CPU在出厂之前就将所有指令的“微程序”存入“控制器存储器”中
对应关系:微命令与微操作一一对应,微指令中包含多个微命令,指令是对于微指令功能的封装
微指令中分为操作控制部分和顺序控制部分,其中操作控制部分代表执行的哪个微操作,顺序控制部分代表执行下一条微指令的地址。
- 微程序控制器的基本结构
(1)控制存储器 CM:用于存放各种指令对应的微程序,控制存储器可用只读存储器ROM构成。
(2)微地址寄存器 CMAR:别名uPC,接收微地址形成部件送来的微地址,为在 CM 中读取微指令作准备
(3)地址译码器:将地址码转换为存储单元控制信号
(4)微指令寄存器:别名uIR,用于存放从 CM 中取出的微指令,它的位数同微指令字长相等。
(5)微地址形成部件:根据外部传入的机器指令的操作码,产生对应的微指令序列的初始微地址和后继微地址,以保证微指令的连续执行。
(6)顺序逻辑:根据是否有中断发生,进行调整需要执行微指令的地址。
- 微程序控制器的工作原理
取数指令 LDA X
取指周期:#0,#1,#2
为了判断是否需要进行间址周期,可以通过指令地址的寻码特征进行判断
间址周期:#3,#4 . . . #7
执行周期:#13,#14,#15
根据中断信号判断是否进入中断周期
中断周期:#8,#9 . . . #12
补充:由于取指周期,间址周期,中断周期每条指令都是相同的,因此取指周期通常都是公用的,如果某指令系统中有 n 条机器指令,则 CM 中的微程序的个数至少是 n+1 个(早期的 CPU 和物联网设备的 CPU 并不提供间接寻址和中断的功能)
Tips:物理上取指周期,执行周期看起来是两个微程序,但是在逻辑上应该将它们看作一个整体,因此,”一条指令对应一个微程序“也是正确的。
微指令的设计
相容性微命令:可以并行完成的微命令
互斥性微命令:不允许并行完成的微命令
- 微指令的格式
- 水平型微指令
一条微指令能定义多个并行的微命令
优点:微程序短,执行速度快
缺点:微指令长,编写微程序较麻烦
- 垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能
优点:微指令短,简单,规整,便于编写微程序
缺点:微程序长,执行速度慢,工作效率低
- 混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作,微指令较短,仍便于编写,微程序也不长,执行速度更快。
- 微指令的编码方式
- 水平型微指令
微指令的编码方式也称为微指令的控制方式,是指如何对微指令的控制字段进行编码,形成控制信号。编码的目标是在保证速度的情况下,尽量的缩短微指令字长。
(1)直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令,某位为“1”表示控制信号有效。
优点:简单,直观,执行速度快,操作并行性好
缺点:微指令字长过长,n 个微命令就要求微指令的操作字段有 n 位,造成控存容量极大。
(2)字段直接编码方式
将微指令的控制字段分成若干个段,每段经过译码之后发出控制信号。
分段原则:
[1] 互斥性的微操作命令分到同一段中,相容性的微操作分到不同的段中。
[2] 每个分段包含的信息位不能太多,否则会增加译码线路的复杂性和译码时间。
[3] 一段每个译码分段要留出一个状态表示本字段不会发出任何微命令。因此若一个字段的长度为 3 ,最多仅可表示 7 个互斥的微命令,通常用 000 表示。
优点:缩短微命令指令字长
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
(3)字段间接编码方式
一个字段中的某些微命令可能需要别的字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令。
优点:进一步缩短微指令字长。
缺点:削弱微指令的并行控制能力,通常作为字段直接编码的一种辅助方式。
- 微指令的地址形成方式
(1)微指令的下地址字段指出,微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式也被称为断定方式。
(2)根据机器指令的操作码形成,当机器指令取到指令寄存器中,微指令的地址是由操作码经过微地址形成部件形成。
(3)增量计数法,(CMAR)+1 -->CMAR
(4)分支转移 转移条件:指明判定条件:转移地址:指明转移成功后的去向。
(5)通过测试网络
(6)通过硬件产生微程序入口指令
第一条微指令地址 由专门的硬件产生(通过专门的硬件记录)
中断周期 由硬件产生的中断周期微程序首地址(通过专门的硬件记录)
微程序控制单元的设计
- 微程序设计步骤
- 分析每个阶段的微操作序列
取指周期
- 写出对应机器指令的微操作命令和节拍安排
- 确定微指令格式
根据微操作个数决定采用何种编码方式,用来确定微指令的操作控制字段的位数,根据 CM 中存储的微指令总数,确定微指令的顺序控制字段的位数。最后按照操作控制字段位数和顺序控制字段位数确定微指令字长。
- 编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
- 微程序设计分类
- 静态微程序设计和动态微程序设计
静态:微程序无需改变,采用ROM
动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM
- 毫微程序设计
微程序设计 用微程序解释机器指令
毫微程序设计 用毫微程序解释微程序
- 比较
指令流水线的基本概念
- 指令流水的定义
- 顺序执行方式
总耗时:T = n*3t = 3nt
传统冯诺依曼机采用顺序执行方式,也被称为串行执行方式。
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。
- 一次重叠执行方式
总耗时:T = 3t + (n-1)*2t = (1+2n) t
优点:程序的执行时间缩短了 1/3 ,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大的开销的代价,控制过程会更加复杂。
- 二次重叠执行方式
总耗时:T = 3t +(n-1)*t = (2+n)t
时间缩短了2 / 3,属于理想情况下执行情况。
- 流水线表示方法
- 指令执行过程图
用于分析指令执行过程以及影响流水线的因素
- 时空图
主要用于分析流水线的性能
- 流水线的性能指标
- 吞吐率
单位时间内流水线完成的任务数量或是输出的数量
设任务数为n,处理完成 n 个任务所用的时间为Tk,则计算流水线吞吐率(TP)的最基本公式为TP =n / Tk
T
k
=
(
k
+
n
−
1
)
∗
t
T_k = (k+n-1)*t
Tk=(k+n−1)∗t
T
P
=
n
(
k
+
n
−
1
)
t
TP = \frac{n}{(k+n-1)t}
TP=(k+n−1)tn
当任务最大为 n 为无穷时,最大吞吐率为 1/t
- 加速比
完成同样的任务,不使用流水线的时间和使用流水线的时间之比
设T0表示不使用流水线的执行时间,Tk为使用流水线的执行时间,基本公式为
S
=
T
0
T
k
S = \frac{T_0}{T_k}
S=TkT0
单独完成一个任务的耗时为kt,顺序完成 n 个任务为nkt
T
k
=
(
k
+
n
−
1
)
∗
t
T_k = (k+n-1)*t
Tk=(k+n−1)∗t
T
P
=
k
n
(
k
+
n
−
1
)
t
∗
t
=
k
n
k
+
n
−
1
TP = \frac{kn}{(k+n-1)t}*t = \frac{kn}{k+n-1}
TP=(k+n−1)tkn∗t=k+n−1kn
当任务最大为 n 为无穷时,最大加速比为 k
- 效率
流水线设备的利用率
在时空图也就是完成 n 个任务占用的时空区有效时间面积与 n 个任务所用的时间与 k 个流水段所围成时空区总面积之比
T
0
k
T
k
\frac{T_0}{kT_k}
kTkT0
当任务最大为 n 为无穷时,最高效率为 1
指令流水线影响因素和分类
- 机器周期的设置
上图为经典的五段式指令流水线,虽然有的指令会缺少第四个访存阶段,但是仍会保留该阶段的执行时间。同时为了方便设计,会将各阶段的耗时取为相同,以最长的耗时为准。
为了保存本流水段的执行结果提供给下个流水段使用,需要在每个功能部件后面都有一个缓冲寄存器,也称为锁存器。
- 影响流水线的因素
- 结构相关(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突
解决方法:
(1)后一相关指令暂停一周期
(2)资源存储器 + 指令存储器
将取指阶段和访存阶段的 cache 分为两个,分别是指令和数据。
- 数据相关(数据冲突)
数据相关指在一个程序中,存在必须等前面一条指令执行完成之后才执行后一条指令的情况,则这两条指令为数据相关。
解决方法:
(1)将遇到数据相关的指令和后续指令都暂停一到几个时钟周期,直到数据相关问题消失之后再执行,可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
(2)数据旁路技术(转发机制)
指令二需要用到的 r1 ,在指令一的执行周期阶段就已经得到了,可以添加一条线路提前将结果给指令二。
(3)通过编译器调整指令顺序解决数据相关,例如将后续不需要依赖前面的指令调整位置。
- 控制相关(控制冲突)
当流水线遇到转移指令和其他改变 PC 值的指令而造成断流,会引起控制相关。
解决方法:
(1)转移指令分支预测。简单预测(永远猜 true 或 false),动态预测(根据历史情况调整)
(2)预取转移成功和不成功两个控制流方向上的目标指令
(3)加快和提前形成条件码
(4)提高转移方向的猜准率
- 流水线分类
- 部件功能级流水线,处理机级流水线和处理机间流水线
根据流水线使用级别的不同,流水线可以分为部件功能级流水线,处理机级流水线和处理机间流水线。
(1)部件功能级流水
将复杂的算术逻辑运算组成流水线工作方式。例如,将浮点加法操作分为求阶差,对阶,尾数相加,结果规格化等四个子过程。
(2)处理机级流水线
将一条指令解释过程分为多个子过程,如前面提到的取指,译码,执行,访存以及写回 5 个子过程。
(3)处理机间流水
是一种宏流水,其中每个处理机完成一个专门的任务,各个处理机得到的内容存放在和下一个处理机共享的存储器。
- 单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
(1)单功能流水线
只能实现一种固定的专门功能的流水线
(2)多功能流水线
通过各段间的不同连接方式分为同时和不同时地实现多种功能的流水线。
- 动态流水线和静态流水线
按照同一时间各段之间的连接方式,流水线可分为静态流水线和动态流水线。
(1)静态流水线
同一时间,流水线的各段只能按照同一种功能的连接方式工作。
(2)动态流水线
在同一时间,某些段正在实现某种运算,另一段却正在执行另一种运算,可以提高流水线的效率,但会使流水线控制更加复杂。
- 线性流水线
按照流水线的各个功能之间是否有反馈信号,流水线分为线性流水线和非线性流水线。
(1)线性流水线
从输入到输出,每个功能仅仅允许经过一次,不存在反馈回路。
(2)非线性流水线
从输入到输出的过程中,存在反馈线路,适合进行线性递归的运算。
- 流水线的多发技术
- 超标量技术
每个时钟周期可并发多条独立指令,需要配置多个功能部件,不能调整指令的执行顺序。
通过编译的优化技术,将可并行执行的执行搭配起来。
- 超流水技术
在一个时钟周期内再分段,一个功能部件使用多次,不能调整指令的执行顺序。可以通过编译程序解决优化问题。
- 超长指令字
由编译程序发现指令间潜在的并行性,将多条可以并行操作的指令组合为一条,具有多个操作码字段的超长指令字。需要采用多个处理部件。
五段式指令流水线
- 运算器指令的执行过程
IF:根据 PC 从指令 Cache 取指令到 IF 段的锁存器
ID:取出操作数到 ID 段锁存器
EX:运算,将结果存到 EX 段锁存器
M:空段
WB:将运算结果写回指定寄存器
- LOAD 指令的执行过程
IF:根据 PC 从指令 Cache 取指令到 IF 段的锁存器
ID:将基址寄存器的值放到锁存器 A ,将偏移量的值放到 Imm
EX:运算,得到有效地址
M:从数据 Cache 中取数并放入锁存器
WB:将取出的数写回寄存器
注意:RISC处理器中只有“取数LOAD”和“存数STORE”可以直接访问主存。
- STORE 指令的执行过程
IF:根据 PC 从指令 Cache 取指令到 IF 段的锁存器
ID:将基址寄存器的值放到锁存器 A ,将偏移量的值放到 Imm,将要存的数放到B
EX:运算,得到有效地址,将锁存器 B 的内容放到锁存器 store
M:写入数据Cache
WB:空段
- 条件转移指令的执行过程
IF:根据 PC 从指令 Cache 取指令到 IF 段的锁存器
ID:将进行比较的两个数放到锁存器A,B,偏移量放到 Imm
EX:运算,比较两个数
M:将目标 PC 值写回 PC
WB:空段
- 无条件转移指令
IF:根据 PC 从指令 Cache 取指令到 IF 段的锁存器
ID:偏移量放到 Imm
EX:将目标 PC 值写回 PC
M:空段
WB:空段
PC 的值越要进行修改,越会避免控制冲突,当然,也会有的地方将 PC 的修改放在 WB 段
多处理器的基本概念
- SISD(单指令流单数据流)
特征:各指令序列仅仅可以并发执行,无法并行执行,每条指令处理一两个数据,不是数据级并行技术
硬件组成:一个处理器 + 一个存储器,若采用指令流水线,需要设置多个功能部件,采用多模块交叉存储器。
eg:计组课程中学习的就是SISD,每一条指令仅仅处理一两个数据。
- SIMD(单指令多数据流)
特征:各指令序列仅仅可以并发执行,无法并行执行,每条指令可同时处理多个具有相同特征的数据,是数据级并行技术
硬件组成:由一个指令控制单元(CU) + 多个处理单元(例如ALU)+ 多个局部存储器 + 一个主存储器,每个执行单元有各自的寄存器组,局部存储器,地址寄存器,不同的执行单元执行同一条指令,处理不同的数据
对结构类似的大量数据进行相同处理,一条指令处理多个数据
eg:某些显卡常采用SMID,图像处理时,对每个像素点进行完全相同的渲染。
- MISD(多指令单数据流)
多条指令并行执行,现实中并不存在。
- MIMD(多指令多数据流)
特征:各个指令系列可以并行执行,分别处理多个不同的数据,是一种线程级并行,甚至是线程级以上的并行技术。
eg:Intel i5,i7 处理器
进一步分类
- 向量处理器(SIMD 的进阶应用)
特征:一条指令的处理对象是“向量”,擅长对于向量型数据进行并行计算,浮点数计算,常常被用到超级计算机中。
硬件组成
- 共享内存多处理器
概念:多个处理器共享一个主存储器,多个处理器共享单一的地址空间,都可以通过LOAD,STORE 指令访问共享的主存储器。和多核处理器属于相同的东西,命名角度不同。
硬件多线程
以上为一个不太严谨的示意图
三种线程的示例: