计算机组成与体系结构——指令流水线
计算机组成与体系结构,第6章指令流水线学习
时钟周期、机器周期、指令周期
时钟周期也称为振荡周期,定义为时钟脉冲的倒数,是计算机中最基本的、最小的时间单位。
机器周期,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。
指令周期, 是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。
转自
简单介绍指令周期
定义
取出:从内存单元中取出放出IR
分析:对指令的操作码(把操作码给CU[CPU中的控制单元] 让系统分析这是系统中的哪一条指令)+寻址方式进行分析
执行:完成指令要求的全部运算(CPU中的运算单元)
指令周期的构成
<1> NOP指令是空指令,之后的题会用到
<2>具有间接寻址的指令周期
大概是这样:
取指周期:访问一次内存(取指令)
间址周期:访问一次内存(取操作数地址)
执行周期:访问一次内存(取操作数)
<3>具有中断周期的指令周期
指令周期的流程
CPU工作周期的标志
说明:
指令周期的不同阶段控制器需要做的不同的操作,因此控制器在CPU的不同阶段要发出不同的命令。。。为了对控制单元进行设计,所以要有CPU工作周期的标志(也就是指令周期执行的哪一个单元)下面那个D触发器就是这样子
指令周期数据流
简单介绍取指周期、间址周期、执行周期、中断周期
-
取指周期
PC(保存当前指令的内存地址)告诉你要取得那条指令的内存地址,把指令的地址放到MAR(MAR保存存储器的地址)中,MAR通过地址总线把指令地址送到指令存储器.
CU把控制信号送到控制总线上,再由控制总线送到存储器**,存储器执行读操作,把相应的数据送到数据总线上,再从数据总线送到MDR(MDR保存数据的地址),IR(已经保存好指令了),CU(进行时序控制)。
【这是读操作 简单理解下这个过程,柳老师讲解过后真的理解更加深入了哈哈哈】
但,并没有结束,这时候CU会进行时序控制,看是否进行PC+1还是啥的操作 -
间址周期
得要取出操作数的地址,地址在存储器中。
假设MDR保存了我们要取得那个操作数的地址,我们从MDR开始,把MDR中的地址码部分送到MAR,进行内存单元的访问,从存储器中取出操作数的真正地址,读操作,CU把控制信号送到存储器中,存储器读出操作数的地址,送到MDR中,这时候MDR部分就真正保存了我们所需要的操作数的地址。 -
执行周期
差异非常大 -
中断周期
中断周期要:
<1>保存程序断点:相当于中断之后返回到程序的那个位置,,也就是说中断以后要执行的下一条指令的地址是多少,那么这个地址就保存在PC中(这其中还是有很复杂的过程的)
①把程序断点得保存到一个内存单元中 在这里CU确定把程序断点保存在哪一个地址,把地址放到MAR中,进而保存到存储器。
②并且这个操作是个写命令,需要CU通过控制总线把写命令传递给存储器
③PC把指令地址送到MDR中,MDR通过数据总线送到存储器
<2>:形成中断服务程序的入口地址
<3>:硬件关中断
(在之后进行了详细的学习)
指令流水
-
如何提高机器速度
①可以提高访存速度,例如把常用的指令放到cache中,方便访问。多体并行,对多个存储器进行交叉访问,在一个主存周期中CPU可以访问多个存储体
②提高IO和主机之间的传送速度:DMA方式,多总线方式。
中断方式:使用程序控制方式进行I/O和主机之间的传送,这时候CPU和外部设备之间不能并行进行工作(使用串行方式进行工作),总线和CPU利用率都比较低。故可以使用中断,CPU和外部设备可以并行工作。 -
系统的并行性
并发,分时操作系统,多道程序在计算机系统中并发进行,每个进程占一个小的时间片
同时,在同一个时刻发生 -
指令的串行指令和二级流水
取值和执行阶段时间完全重叠,看底下图3条指令,如果串行需要6,并行需要3,速度提高一倍 -
影响指令效率的因素
-
指令的6级流水
说明:假设指令的每一段时间都是相同的。。但这都是理想状态的,假设指令之间不存在冲突,没有转移指令。
这个指令流水看最上面的时间段,可见总共需要14个时间单位。串行的话需要54个
当然也可以这么画,是一样的。理解这个过程就好了 -
流水线的设计原则以及适合流水线的指令集特征
设计原则:
⑴指令流水段个数以最复杂指令所用的功能段个数为准。
⑵流水段的长度以最复杂的操作所花费的时间为准。
适合合流水线的指令集特征:
(1)长度尽量一致
有利于简化取指令和指令译码操作;MIPS指令32位,下址计算方便: PC+4;X86指令从1字节到17字节不等,使取指部件极其复杂。
(2)指令格式应尽量规整,尽量保证源寄存器位置相同有利于在指令未知时就可取操作数;MIPS指令的rs和rt位置一定,在指令译码时就可读rs和rt的值.若位置随指令不同而不同,则需先确定指令类型才能取寄存器编号。
(3) 采用装入/存储型指令风格load / Store指令才能访问存储器,可以把load / Store指令的地址计算和运算指令的执行步骤规整在同一个周期,因此有利于减少操作步骤,规整流水线。
(4)数据和指令在内存中”对齐”存放,有利于减少访存次数,使所需数据在一个流水段内就能从存储器中得到。
结论:规整、简单和一致等特性有利于指令的流水线执行 -
影响流水线性能的因素
① 结构相关
<1>两条或两条以上的指令征用同一个运算器之类的,会发生资源冲突,也就是结构相关
下面的指令流水线:
FO FI在同一个时间段访问内存
WO FO FI在同一个时间段也会访问内存单元
关于指令预取技术:内存访问比较快,周期短,那么取址部件使用空闲时间把多条指令从内存单元取出来放入到CPU中的指令缓冲队列(或者说寄存器 运算器啥的)
②数据相关
流水线可能有多个读段,多个写段
**先写后读相关Rrite After Write **:对同一个内存或寄存器先完成写操作再完成读操作。
例如:
大概就是,在进行SUB指令的时候,由于指令流水线导致指令重叠,可能在R1还没写回的时候,ADD指令就读了
先读后写相关:
例如:
可能ADD还没执行完,写回R2值,STA指令就开始读了 基本流水线(就像上面的6级流水)不会发生,乱序执行时会发生
写后写相关:
例如:
SUB 在MUL之后,这个好像是基本流水线(就像上面的6级流水)不会发生,乱序执行的时候可能会发生。遇到再解释
③控制相关
这是一段汇编语言指令,简单理解一下控制相关就好。
从6级流水线来理解:
设3号指令是转移指令,但是第3号指令译码的时候不知道他是转移指令,这时候指令4、5、6、7都会陆续进入指令,但是第三号指令它是个转移指令,执行阶段会跳转到15号指令(假设)。
-
如何解决影响流水线性能的因素
-
流水线的性能的指标
①吞吐率
理解一下这个公式:
单位时间内,在没有结构相关,数据相关,资源冲突等的因素,看那个指令流水线,每经过一个▲t,就会有一个指令输出,所以才有了最大吞吐率的公式
②加速比:
比较容易理解
③效率
简单看一下就好。整个举行的面积除以利用这的矩形的面积
流水线结构
-
指令流水线结构
我们假设有6段,简单看一下
必须加上锁存器:保存前面流水线的操作结果,并为下一段提供操作数据和操作信号
(锁存器的作用学习过) - 运算流水线
指令流水线习题
-
看到老师给的文件上的一道例题,几个公式的运用
(1)T= 1/8MHz = 0.125us
(2)MIPS单位是百万条每秒
平均指令周期(就是一条指令多少秒)=1/0.8MIPS = 1.25us
(3)机器周期=0.5us
平均每个指令周期含有的机器周期数=1.25 ÷0.5=2.5(个)
(4)平均指令执行速度=1/(0.4×4×2.5)=0.25MIPS
(5)每秒40万条指令,每条指令还要2.5×4=10个机器周期
那每秒执行40万×10=400万个机器周期
那么主频频率=1/400万=4MHz
考察解决普通数据冒险:专用通路技术(旁路技术 转发技术)
注意与第四题画法的不同,但本质是一样的。懂得思路就可以了。
考察Load-use数据冒险解决:加nop指令/调整指令序列
已经采用了转发技术,已经避免了数据冒险,因此只对load-use数据冒险进行指令序列调整就好了,什么是load-ues数据冒险?
第一条和第二条、第六条和第七条之间存在load-use数据冒险,因此可将第四条指令插到第二条指令之前;将第五条指令擦回到第七条指令之前(了解一下这个方法就好了)
==考察普通数据冒险解决:专用通路技术(转发技术)、
软件阻塞:加nop指令、
硬件阻塞:加入气泡阻塞指令执行 ==这肯定是需要我们画出时空图的,然后根据时空图进行简单的分析。
第三问懒得看了
End:
1. 自己总结的大部分都是来自哈尔滨工业大学mooc
2. 只是简单总结了课后题