导图社区 计算机考研第五章中央处理器
计算机考研计算机组成原理第五章中央处理器思维导图,知识点系统且全面,希望对大家有用。
编辑于2024-05-04 21:24:21中央处理器
CPU的功能、基本结构
具体功能
指令控制
完成取指、分析指令、执行指令->顺序控制
操作控制
一条指令由若干操作(微指令)组合实现,CPU管理产生每条指令的操作信号
时间控制
对各种操作加以时间上的控制
数据加工
对数据提供算术和逻辑运算
中断处理
对计算机运行过程中的异常情况和特殊情况进行处理
CPU的基本结构
运算器
运算器是计算机的数据加工中心
组成部分
算术逻辑单元ALU
进行算术/逻辑运算
通用寄存器组
A
累加器EAX
B
基地址EBX
C
计数ECX
D
数据EDX
32位:E__X 低16位:__X __X的高8位:__H __X的低8位:__L
变址ESI、EDI
堆栈基EBP
堆栈顶ESP
这两个寄存器不能乱用
暂存寄存器
用于暂存从主存读来的数据 (这个数不存放在通用寄存器中 否则会破坏其原有内容)
例如ACC需要R0和R1的数据,就先把R0读入到暂存寄存器,然后把R1和暂存寄存器中的数同时写入到ACC中
累加寄存器ACC
一个通用寄存器,用于存放ALU运算的结果,也可以作为运算的输入端
多路选择器,三态门
程序状态字寄存器PSW
由OF、ZF、SF、CF组成 参与并决定微操作的形成
移位器
对操作数或运算结果进行移位的运算
计数器CT
控制乘除运算的操作步数
控制器
基本功能:执行指令,每条指令的执行由控制器发出的一组微操作实现
取指令:自动形成指令地址;自动发出取指令的命令
分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。
执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器,存储器以及I/O设备完成相应的操作
中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(打印机请求打印一行字符)
组成部分:
控制单元CU
PC程序计数器
指出下一条指令在主存中的地址
CPU根据PC的内容去主存取指令
PC具有自增功能
IR指令寄存器
保存当前执行的那个指令
指令译码器
对操作码字段进行译码,向控制器提供操作信号
微操作信号发生器
根据IR、PSW、时序信号产生的控制整个计算机系统所需的各种控制信号
分为:
组合逻辑型
存储逻辑型
时序系统
用于产生各种时序信号,由统一时钟(CLOCK)分频得到
MAR存储器地址寄存器
存放要访问的主存单元的地址
MDR存储器数据寄存器
存放向主存写/从主存读的数据
计算机可以划分为:
控制部件
控制器:
PC、IR、MAR、MDR、ID、时序、微操作信号发生器(CU的第一步)
执行部件
运算器:
ALU、ACC、Reg(寄存器组)、X(暂存寄存器)、PSW、CT、移位器
存储器
外围设备
内存寄存器
用户透明(不可编程)
MAR、MDR、IR、移位寄存器、暂存寄存器
用户不透明(可编程)
<Reg>、PSW、PC、ACC、通用寄存器组
考频:低
10、16
指令执行过程
考频:低
09、11
指令周期
指令周期:CPU从主存取出一条指令并执行的时间
处理流程
CPU访存的四种性质
4+2大联系不同:
【指令】
【指令周期】
【机器周期】 (CPU周期)
【时钟周期/节拍/T周期】 (CPU时钟周期)
【微操作】
【微周期】
一般是一个时钟周期
微操作与指令:
要完成一个机器周期,需要多个节拍/时钟周期,而一个节拍内完成的操作就是“微操作”
一个微操作需要一个节拍来完成执行,但是也可以多个微操作在同一个节拍里面共同执行
其中:
定长的机器周期
不定长的机器周期
两个注意点
1. 不定长:两个机器周期的时钟周期数也不一定相同(例如一个只需三个节拍,一个需要四个节拍)
2. 不同指令的指令周期中可能含有不同的机器周期(例如一个指令有间址周期,一个没有)
举例:
取指、执行、多执行、间址、中断
每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。
只有检测到了中断请求,才会有“中断周期”
中断请求是随时都可到来的
只会在执行周期末尾进行中断检测,并且没有检测到中断的话会跳过中断周期
取指周期
取值周期控制流
1. (PC) -> MAR --- ①
把PC寄存器中的值读入到MAR中
2. 1 -> R --- ④⑤
CU发出控制信号,经主线传到主存,这里是读信号
3. M(MAR) -> MDR --- ②③⑥⑦
主存中地址为(MAR)的数据送入到MDR中
4. (MDR) -> IR --- ⑧
把取得的指令放入到IR中
5. (PC) + 1 -> PC --- ⑨
CU发出控制指令,PC自增
在指令长度相同的情况下,所有指令的取指操作才相同,如果是多字指令则取指操作不同
间址周期
一次间址周期数据流
1. Ad(IR)/Ad(MDR) -> MAR --- ①
这里也可以是Ad(MDR) -> MAR?可以,在唐朔飞计算机组成原理中(第三版),有Ad(MDR)的原图和原描述
注意只在间址周期
2. 1 -> R --- ④⑤
3. M(MAR) -> MDR --- ②③⑥⑦
4. (MDR) -> IR
可以有,也可以无。修改IR的Add部分(IR的OP部分不变,只改地址)
执行周期
不同指令的周期不同,没有固定的
中断周期
1. (SP) - 1 -> SP,(SP) -> MAR --- ①②
此处是SP - 1的原因是计算机的堆栈都是从顶至下的
检测到中断信号后,首先CU先让堆栈顶部SP-1,然后CU把SP中存的当前的地址送入到MAR中 本质:将断点存入某个存储单元(即存PC的值)
2. 1 -> W --- ④⑤
CU告诉主存要进行写操作
3. 断点(PC) -> MDR --- ⑥⑦⑧
PC的数据写入到MDR中,随后主存通过MAR、MDR中的数据把PC的地址写入到SP指向的位置
MDR -> M(MAR)
个人感觉还差了一步
4. 向量地址 -> PC --- ⑨
CU获得中断向量的向量地址,送入PC
中断周期要做的事情只是硬件的操作(即中断隐指令的所有内容),引出中断向量对应的处理程序后,就交由软件执行
执行中断时保存的内容不只有一个PC
指令执行方案
单指令周期
所有指令都用相同的时间执行
指令间串行执行
指令周期取决于最长的指令的执行时间
降低整个系统的运行速度
多指令周期
对不同类型的指令选用不同的执行步骤
指令间串行
每个指令的执行时间可以不同,按【时钟周期】来进行分配
流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
指令间可以并行执行的方案
【数据通路】的功能、基本结构
数据通路的功能
数据通路:数据在功能部件之间传送的路径
数据通路部件:通路上的部件
如ALU、通用寄存器、状态寄存器等等
执行/功能部件:在数据通路中专门进行数据运算的部件
数据通路的基本结构
CPU内部单总线方式
各个部件对于总线的使用是独占的,同一时刻只能两个部件进行数据交换(一个in,一个out)
蓝色:补充;红色:更改
其中所有的寄存器的in out控制命令全是由CU发出的
寄存器之间的数据流动
例如:PC -> MAR 1. (PC) -> Bus -> MAR, [ PCout有效,MARin有效 ] 2. (PC) + 1 -> PC
主存和CPU之间的数据传送
例如:从主存读取指令 1. (PC) -> Bus -> MAR,[ PCout,MARin有效 ] 2. 1 -> R,(PC) + 1 -> PC 3. MEM(MAR) -> MDR,[ MARoutE MDRinE 有效 ] 4. (MDR) -> IR,[ MDRout,IRin ] 有效
MARoutE 和主存交互
MDR in/out E 和主存交互
执行运算
例如:执行加法运算 ACC + (ad(IR)),第一个加数在ACC或R0中,另一个加数的地址是IR的地址码 1. Ad(IR) -> Bus -> MAR,[ IRout ,MARin 有效] 2. 1 -> R 3. MEM(MAR) -> MDR,[ MARoutE MDRinE 有效 ] 4. (MDR) -> Bus -> Y,[ MDRout Yin 有效 ] 5. (ACC/R0) + (Y) -> Z,[ACCout/R0out Zin有效,CU发送加法指令] 6. Z -> ACC/R0,[Zout ACCin/R0in有效]
这里的Y是一个暂存寄存器,因为单总线同时只能有一个数据流向。如果设置多总线,则可以不用该暂存寄存器
例题:ACC (R0), R1的指令流程和控制信号
翻译一下就是((R0)) + (R1) -> (R0),把R0内的地址间接寻址一次,然后和R1中的内容进行相加,最后存回到R0对应的地址中(为什么这里最后是(R0)而不是((R0)),因为如果只是向R0中写数据,就只写->R0就可以了) 【故一共有三个阶段:取指阶段、间址阶段、执行阶段】 【 1. 取指阶段】 (PC) -> Bus -> MAR, PCout MARin 1 -> R, (PC) + 1 -> PC M(MAR) -> MDR, MARoutE MDRinE (MDR) -> IR, MDRout IRin 【 2. 间址阶段】 (R0) -> Bus -> MAR, MARin R0out 1 -> R M(MAR) -> MDR, MARoutE MDRinE (MDR) -> Y, MDRout Yin 【 3. 执行阶段】 (R1) + (Y) -> Z, R1out Yout ALU发出加法控制信号 (Z) -> MDR, Zout MDRin 1 -> W MDR -> M(MAR), MDRout MARinE
把R0内的地址间接寻址一次,然后和R1中的内容进行相加,最后存回到R0对应的地址中(为什么这里最后是(R0)而不是((R0)),因为如果只是向R0中写数据,就只写->R0就可以了)
取指周期
间址周期
执行周期
内部总线&系统总线
内部总线
CPU连接各寄存器和各运算部件之间的总线
系统总线
同一台计算机系统的各部件,例如CPU、内存、通道之间的总线
CPU内部多总线方式
多个总线可以一定程度提升效率
CPU专用数据通路方式
造价比较高,但是可以支持指令流水线
题目一定会告诉你的
基本结构 + 一个取指周期的例子
例题
确定蓝色是哪个?MAR、PC、IR、MDR
A:MDR
B:IR
C:MAR
D:PC
只有MAR和M是单向的
有自增的是PC
IR和MDR是可以和M双向的
MDR不会直接到PC,IR可以直接到PC
考频:中
16、21、09大、15大、22大
控制器各部件之间的连接
考频:低
17、19、21
CPU的三总线结构
数据总线DB、地址总线AB、控制总线CB
运算器部件
通过数据总线连接
主存、IO设备之间传输数据
IO设备
通过接口电路连接
总线
主存、IO设备
通过AB接受
地址信息
通过CB获得
控制信号
通过DB
与其他部件传送数据
控制器
通过DB
接受指令信息
从运算器部件
接受转移指令
通过AB
送出指令地址
向系统中的各部件提供运行所需的控制信号
硬布线、微程序
看后节
硬布线
只能适用于RISC架构,执行速度超级快,扩展起来很复杂 微操作控制信号由组合逻辑电路即时产生
四大机器周期
FE 取指周期、IND 间址周期、EX 执行周期、INT 中断周期
微指令的内容
特点一:每个周期中有多个微操作/微指令,很多微操作/微指令是可以并行的完成的(特别是多总线结构的时候)
微指令产生微操作信号
三个原则
原则一:微操作的先后顺序不得随意更改
原则二:被控对象不同的微操作尽量安排在一个节拍内完成
原则三:占用时间较短的微操作尽量安排在一个节拍内完成并【允许有先后顺序】
时间较短:不用访问主存
例如:取指周期
M(MAR) → MDR 从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成
MDR → IR是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成 OP(IR)。
多个不涉及主存的数据传输可以在一个时钟周期内完成
特点二:同一个微操作可能在不同指令、不同阶段被多次使用
特点三:使用定长的节拍来进行微操作的设计
一个机器周期三个节拍
确定一条微指令 四大要素:
微操作通过【指令的OP部分、当前处于哪个机器周期、当前机器周期的节拍号、PSW的状态】来确定现在这个节拍下发出哪些“微命令”
确定指令操作码:
把IR通过OP译码器连接到CU上,使得CU可以得知当前是哪一个操作指令
如何对应,可以参考(译码器):
确定机器周期:
通过在CU内部的四个触发器的值来确定
根据四个触发器哪个值为1来确定
确定节拍号:
通过连接的节拍发生器,来得知当前是哪一个节拍,且节拍不停的循环往复发出
确定标志信息:
来自PSW、ACC等,也可能来自IO、主存
最后CU输出微操作:
完整图
如何通过要素 确定微指令:
考虑所有可能的指令情况,写出对应的微操作所需要的四要素:
例如:取指周期T0时刻的(PC) -> MAR
此处C1就对应了PCout和MARin
然后把所有情况考虑充分后。举个例子:可能出现的所有M(MAR) -> MDR的情况:
例如:M(MAR) -> MDR
操作时间表:
了解即可
根据操作时间表,把所有重复的微操作命令信号给归纳总结出来,合成一个电路
设计步骤
考频:低
09
微程序
考频:低
09、12、14
引用了软件的思想
把程序运行的【指令划分为多个微指令】,然后在CPU中再套娃一层CPU
也可以称为【机器指令是多个微指令的封装】
微指令 = n * 微操作
微指令是微程序独有的概念
微程序、微程序组、微指令、(微操作、微命令)
微程序:实现一条机器指令的程序
耗费一个指令周期
微程序组:一条机器指令在不同机器周期执行一个微程序组
耗费一个机器周期
例如指令A的取值、间址阶段有不同的微程序组
微指令:
多个微操作的合集,是微程序的‘代码’
代码
微操作、微命令:
微命令是微操作的控制信号;微操作是微命令的执行过程。 [ 例如(PC)->MAR ]
对应关系
微指令的结构
控制信号 + 下地址
微程序控制器 (微CPU)部件
微程序的CU
微地址形成部件
根据IR中的指令的OP部分,来指出该指令的微程序的起始地址
顺序逻辑
连接有:众多标记
例如 LDA A和 LDA (A)
第一个就不用间接寻址,第二个就需要间接寻址
根据指令地址码的寻址特征来判断如何进行寻址
连接有:CLK
时钟信号
CM - 控制存储器
控存,由ROM组成,用来存各种指令的微程序段(就像存在内存中的程序的指令一样)
CMAR - 微地址寄存器
别名:μPC,是 MAR 和 PC 功能的结合体
地址译码
将地址码转为存储单元的控制信号
CMDR - 微指令寄存器
别名:μIR,是 MDR 和 IR 功能的结合体,CMDR的【位数】和【最长的微指令的字长】应该相同
微程序控制器 的处理流程:
1. 获得【IR中的OP部分】
2.【微地址形成部件和顺序逻辑配合】生成了微程序的起始地址,放入到CMAR中
3. CMAR中的地址通过地址译码指明到控制存储器CM
4. 把对应的微指令取到CMDR中,微指令分两个部分:
μOP 控制信号
用来发送控制信号到CPU内部和系统总线
+
下地址
指明下一条需要执行的微指令地址
CM中的微指令序列
特点
取指周期、间址周期、中断周期是所有指令共享的
取指周期的最后一条指令的下地址是3,但是在间址开始阶段,微指令形成部件会根据标记信息来控制要不要执行间址周期
例如:LDA X
考试的边边角角:如果系统中存在N条指令,那么我们应该至少设计N+1个微程序
古代、微型CPU可以不提供执行间址、中断
微指令的分类
了解
在硬布线中,一个微操作就对应一个微命令,所以线是一一对应的。而在微程序中,一个微指令对应多个微操作
微命令
相容性微命令:可以并行完成的微命令
互斥性微命令:不允许并行完成的微命令
水平型微指令
定义:一条微指令能定义多个可并行的微命令
优点:
微程序指令条数少、执行速度快
缺点:
微指令长,编写难度大
胖胖的
垂直型微指令
定义:一条微指令只能定义一个微命令。
优点:
微指令短,易于编写
缺点:
微程序指令条数多,性能比较低
瘦瘦的
混合型微指令
上面两种的折中
在垂直的基础上,增加上一些并不复杂的并行
微指令的编码方式
μOP部分
直接编码方式
一个bit的 0、1对应一个微操作的运行和不运行
优点:
简单直观、执行速度快、操作并行性好
缺点:
微指令过长,如果有n条微操作,就需要n个bit位
字段编码方式
如果一个类中的bit数为3,则说明该类一共可以对应 8 个微操作(其中一定包含一个空操作),故有7条有效微操作
每个小段信息位不要太多,不然译码难度大
互斥:微操作不可在同一节拍内进行
把互斥的微操作放在同一个类 --- 不可并行
不互斥(相容)的微操作放在不同的类 --- 可并行
优点:
可以缩短编码字长
缺点:
每个微指令都必须通过译码后才能产生微操作,速度比直接编码慢
例题
字段间接编码方式 (隐式编码)
字段编码方式中,译码后不会直接发出微命令,而是需要多个译码结果来决定
优点:
进一步缩短字长
缺点:
更慢了
下地址部分
断定方式
下地址写的哪条就运行哪条
根据OP形成
根据【机器指令】的OP部分来指明操作码
就是这个
增量计数法
(CMAR) + 1 -> CMAR
分支转移
比较像JCondition
根据各种标记决定是否转移
测试网络
顺序逻辑部件就是测试网络
测试网络可以决定是否有间址、中断操作
硬件产生
每个程序的【第一条微指令的入口地址】是专门由硬件产生的。每个程序的【中断程序】也是相同的,故也可以用硬件记录
例题
设计一个微程序控制单元
1. 分析每个阶段的微操作序列
2. 写出对应机器指令的微操作命令
和硬布线一样 (除了最后一步硬布线是直接生成了控制信息,而微程序是把OP字段传入到了微地址形成部件中)
3. 写出......对应的节拍
扩充节拍
第一条/中断是硬件自动产生的
扩充①:微指令运行结束后,把“下地址”存入到CMAR中,即每两个节拍之间会消耗一个节拍来执行Ad(CMDR) -> CMAR
扩充②:【取指周期的】微程序运行结束后,需要把OP(IR)存入到CMAR中即:OP(IR) -> 微地址形成部件 -> CMAR
重要!!!!
4. 确定微指令格式
μOP
确定有【多少个微操作】,然后选一种编码方式,最后确定位数
下地址
根据有【多少条微指令】来决定地址的位数
确定总位数
举例:有21种微操作,分成3类,类间指令互斥,类内指令不互斥,平均分是7、7、7,然后每类占3bit,μOP一共9bit。1024条微指令:10bit下地址。总共19bit。
5. 确定码点
根据【一条微指令】里面的【微操作】来编写码点
例如:直接编码可以确定哪一个bit为1 哪一个为0
拓展:
兼容性微指令:几个微指令可以同时出现
静态&动态
静态微程序:
微程序无需改变,采用 ROM
动态微程序:
通过改变微指令和微程序改变机器指令有利于仿真,采用EPROM
毫微程序设计
微程序设计
微程序解释机器指令
毫微程序设计
毫微程序解释微程序
再套娃
硬布线、微程序区别:
总结:
微程序模式
< --- >
硬布线模式
指令流水线
指令流水定义
一般指令是分为 【取指、分析(间址+其他)、执行】三个阶段
其中取指分析执行三个阶段使用的硬部件是可以不同的,故可以并行执行
传统方式:
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
优缺点:
优点:控制简单,硬件代价小
缺点:执行指令速度慢,CPU任何时刻只有一条指令在执行,部件利用率很低
流水线方式:
一次重叠:
优点:
程序的执行时间缩短了1/3, 各功能部件的利用率明显提高。
缺点:
需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
两次重叠:
与顺序执行方式相比,指令的执 行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下, 处理机中同时有3条指令在执行。
指令流水线 的表示方式
执行过程图、时空图
指令执行过程图
时空图(用来分析流水线的性能)
流水线的性能指标
装入时间 & 排空时间
例上图:前4个Δt是装入时间,后四个Δt是排空时间
吞吐率:
单位时间内完成的任务的数量:TP = n / Tk
TP吞吐率、n 完成任务数、Tk 时间
一般取Δt为一个时钟周期 ---> 即一个节拍能完成一个机器周期的所有微操作
加速比:
不使用流水线的时间 T ➗ 使用流水线的时间 T
流水线的效率:
1 - 红色区域面积 ➗ 蓝色区域面积
-------------------------------------------------分隔符----------------------------------------------------
指令流水线 的影响因素
机器周期分段:
FE 取指 -> ID 译码 -> EX 执行 -> M 访存 -> WB 写回
五段式流水线
MIPS架构(RISC)的经典模型
每个阶段的时间设置为一样,以最长的时间看齐,所以每个阶段的末尾都添加了【锁存器】,用来存储产生的结果,以确保可以准时发出
Cache分为:
指令Cache
数据Cache
这样访问Cache的指令和数据是可以并行进行的
各阶段含义:
FE 取指阶段
访问指令Cache,把指令存到锁存
如果存在立即数,就把立即数放入到 Imm 锁存器中
ID 译码阶段
把操作数从寄存器组中取出,放入到AB锁存器中
在RISC中所有的指令操作数都只来自于寄存器
EX 执行阶段
在ALU中进行运算,把运行结果然后到锁存器
M 访存阶段
把运行结果写入到数据Cache中
WB 写回阶段
把运行结果写回到寄存器中
流水线冲突:
资源冲突(结构相关)
类比OS的互斥
IF的Mem和M的Mem的访问冲突了
解决办法
1. 相关指令暂停一个周期
2. 重复配置资源:例如Mem分为Im和Dm
数据冲突(数据冲突)
类比OS的同步
最常考的部分
同一个Reg没有按照要求的顺序修改数据
解决办法
1. 硬件阻塞 (stall),插入气泡
2. 软件插入(NOP),插入空指令
3. 数据旁路技术,把ALU的输出端和输入端相接,这样在执行阶段后就可以直接使用上次的运算结果了
4. 编译优化,编译器来优化,效果好、难度大。例如后面有一些不需要r1结果的指令,可以提前来运行。
控制冲突(控制冲突)
因为转移指令或其他改变PC值的指令而导致断流
PC转移指令的 解决办法
1. 转移指令预测
每次转移指令来的时候都预测一次到底是否会执行。分为简单预测(无脑猜true & false),动态预测(根据历史情况预测)
2. 预测成功和不成功两个方向上的指令
需要硬件的支持
3. 提前加快指令码的形成
需要硬件的支持
4. 提高猜测的猜准率
优化法 1
举例说明五种类型指令:
运算类指令
① IF取指 ② ID译码&取值 ③ EX 执行 ④ 空过 ⑤ WB 写回寄存器
运算类指令:
IF:根据PC从指令Cache中取指令到IF段的锁存器中
ID:取IF中的op操作数到ID段锁存器
EX:运算,结果放入EX锁存器
M:空段
WB:将运算结果写回指定的寄存器
Rs是源操作数,Rd是目的操作数
指令举例
ADD Rs, Rd
(Rs) + (Rd) → Rd
ADD #996, Rd
996 + (Rd) → Rd
SHL Rd
(Rd) <<< 2 → Rd
RISC运算只有Reg参与,没有M阶段
LOAD指令
① IF取指 ② ID译码&取值 ③ EX 执行 ④ M 访存 ⑤ WB 写回寄存器
LOAD指令:
IF:根据PC从指令Cache中取指令到IF段的锁存器中
ID:将BR基址寄存器的值放到A,将偏移量放到Imm
EX:运算,得到有效的地址 A + Imm
M:从数据Cache中取数据,放到锁存器
WB:将运算结果写回指定的寄存器
指令举例
LOAD Rd, 996(Rs)
(996+(Rs)) → Rd
LOAD Rd, mem
(mem) → Rd
RISC处理器中只有“LOAD”和“STORE”指令才能访问主存
STORE指令
① IF取指 ② ID译码&取值 ③ EX 执行 ④ M 访存 ⑤ 空段
STORE指令:
IF:根据PC从指令Cache中取指令到IF段的锁存器中
ID:将BR基址寄存器的值放到A,将偏移量放到Imm,将要存的数放到B
EX:运算,得到有效的地址 A + Imm,把B的值放进去
M:从数据Cache中取数据,放到锁存器
WB:空段
指令举例
STORE Rs, 996(Rd)
Rs → (996+(Rd))
STORE Rs, mem
Rs → (mem)
BRANCH指令
① IF取指 ② ID译码&取值 ③ EX 执行 ④ M/WrPC(目标PC值写回PC) ⑤ 空段
转移类指令:通常采用相对寻址
BRANCH指令:
IF:根据PC从指令Cache中取指令到IF段的锁存器中
ID:将需要比较的两个数放到锁存器A,B;偏移量放入到Imm
EX:运算,比较两个数
M:将目标PC值写回PC
也可以成为WrPC段,比M耗时短,安排在M段时间内完成
WB:空段
WB阶段一般修改通用寄存器
偏移量:例如 beq Rs, Rt, #996 就是 【 (PC) + 4 + (996 * 4) -> PC 】
指令举例
beq Rs, Rt, #off
如果(Rs) == (Rt),则(PC) + 指令字长 + (#off * 指令字长) → PC
否则:(PC) + 指令字长 → PC
bne Rs, Rt, #off
如果(Rs) != (Rt),则(PC) + 指令字长 + (#off * 指令字长) → PC
否则:(PC) + 指令字长 → PC
JMP指令
① IF取指 ② ID译码&取值 ③ EX/WrPC ④ 空段 ⑤ 空段
转移类指令:通常采用相对寻址
把PC的操作安排在EX里面完成,WrPC
因为PC越早写入,越能够避免控制冲突
JMP指令:
IF:根据PC从指令Cache中取指令到IF段的锁存器中
ID:偏移量放入到Imm
EX:(计算PC值?)把PC值写回PC中
WrPC
咸鱼PPT中说不需要ALU,不用计算,这里存疑
M:空段
WB:空段
指令举例
jmp #off
(PC) + 指令字长 + (#off * 指令字长) → PC
WrPC段越早完成越能避免冲突,也可以在WB端修改PC
指令流水线的分类
根据流水线使用级别的不同
【部件功能级】流水线
更细一层
把复杂的运算组成流水线
例如:ALU执行浮点的运算,可以把求阶差、对阶、尾数相加、结果规格化四个部分组装成流水线
【处理机级】流水线
【一个处理器中的不同部件】 跑【一个指令不同阶段】
把指令的执行组成流水线
例如:把指令的取值、分析、执行、访存、写回分为5个部分形成流水线
【处理机间】流水线
【多个处理器】跑【一个任务】
每个处理机完成某一类型的任务,然后把任务结果存在与下一个处理器共享的存储器中
根据流水线完成的功能不同
单功能流水线
只能用于某个特定的任务:例如浮点运算流水线
多功能流水线
可以用于多个任务:例如指令流水线
动态&静态
静态流水线
同一时间内,流水线的各段只能按同一种功能的连接方式工作
动态流水线
指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。
这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
例子:动态 --- ALU又可以做除法又可以做加法
线性&非线性
线性流水线
从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线
存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线 适合进行线性递归的运算。
例字:非线性 --- 只有加法指令的ALU,运行乘法需要多次EX,IF ID EX EX EX ... EX M WB
流水线的多发技术
1. 超标量技术
每个时钟周期内可并发多条独立指令,需要配置多个功能部件
不能调整指令的执行顺序,通过编译优化技术,把可以并行执行的指令搭配起来
1. 多并发 --- 多个功能部件
空分复用技术
2. 编译优化需要判断那些可以并行
2. 超流水技术
在一个时钟周期内再分段(3段)
在一个时钟周期内一个功能部件使用多次(3次)
不能调整指令的执行顺序
靠编译程序解决优化问题
时分复用技术
和超标量差不多
都不能【动态调整】指令执行顺序。 生成这种指令顺序的技术:【动态调度技术】
乱序发射:指CPU可以【动态的调整指令的执行顺序】
3. 超长指令字
由编译程序挖掘出指令间潜在的并行
多条能并行操作的指令组合成一条
具有多个操作码字段的超长指令字(可达几百位)
多个处理部件
编译程序去挖掘发现哪些指令可以合并在一起执行
考频:高
09、10、13、16、17*2、18-20、12大、14大*2
多处理器
考频:低
22
XIXD
SISD
传统串行计算机,一个CPU一个存储器。指令按顺序串行执行,一次性只能处理一条数据
优化:
使用指令流水线
使用多个功能部件,采用多模块交叉存储
SIMD
数据级并行
一个指令对多个数据流进行处理,一般为【数据级并行技术】。由一个指令控制部件,多个处理单元组成
例如一个CPU多个ALU
特点:
一条指令中的多个数据是存在不同的地址中的,那么该条指令的执行的数据运算可以并发进行
例如一个程序中的for处理循环数组,可以同时处理完16个下标的数据
注意事项:
SIMD的MD是与数据有关的,即一个进程编译过后,可能在第1、2、4次运算是int加减,故只能使用SISD的模式。但是在第3次运算的时候是数组运算,可以使用SIMD的模式
向量处理器
是特殊的SIMD,既可以一次处理多个数据,又一次处理的数据是一个多维的向量
eg: 向量处理机的LOAD指令,可以将一个向量取到向量寄存器中;加法指令,可以实现两个向量相加
应用于:向量计算、大量浮点数计算,空气动力学、核物理学、巨型矩阵计算问题很多超级计算机如中国的“银河”就是向量处理器
要求:
1. 有多个向量处理器
2. 主存是”多端口“交叉存储器
3. 主存要大容量,集中式最好
MISD
不存在
MIMD
线程级或线程级以上并行
多计算机系统
每个计算机拥有各自私有的存储器,有独立的主存空间,计算机之间只能够通过消息传递进行通信
多核处理器系统
SMP(对称多处理)系统,具有共享的单一地址空间,存取指令可以访问系统中的所有存储器
Cache的分配
例如有三级Cache,则每个核有自己的一级和二级Cache,三个核共享同一个三级Cache
硬件多线程
单核
细粒度
指令级并行
多个线程轮流交叉执行指令
粗粒度
指令级并行
只有一个进程进行较大阻塞的时候才切换进
同时
线程级并行
单核处理器有多个功能部件、寄存器组、指令发射槽
处理器
超线程技术
可以同时发多条,三种硬件多线程方式的调度示例
多核/多处理器
多处理器:
有多个CPU,每个CPU一个处理单元来运作
多个CPU之间的信息交互是通过电脑主板进行的
多处理器的分类
第一类:UMA统一存储访问
SMP
共享同一份内存,每个处理器访存所有存储单元的速度大致相同
SMP、UMA、NUMA拓展
UMA需要考虑Cache一致性的问题
统一存储访问(UMA)多处理器:根据处理器与共享存储器之间的链接方式,分为基 于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器。
第二类:NUMA非统一存储访问
ASMP
拥有自己的不同内存。会有特定几个处理器访存存储单元的速度更快
NUMA理论上是可以无限扩展的
非统一存储访问 (NUMA)多处理器:处理器中不带高速缓存时,被称为 NC-NUMA; 处理器中带有一致性高速缓存时,被称为 CC-NUMA。
自旋锁:
SMP的多个处理器可能同时访问一个共享变量
所以要使用自旋锁来进行互斥访问
和单处理器的互斥锁很类似的东西
多核处理器:
一个CPU中集成了多个处理单元(核)
可以共享Cache也可以不共享Cache
不共享Cache
比较
共享Cache
END
前置知识