8.3-指令流水(学习笔记)
Posted PacosonSWJTU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.3-指令流水(学习笔记)相关的知识,希望对你有一定的参考价值。
【README】
本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;
【1】如何提高机器速度
1 提高访存速度
多体并行:对多个存储体进行交叉访问,在一个主存周期中,有多个存储体向cpu提供数据,或 cpu在一个主存周期中访问多个存储器;
2 提高IO和主机之间的传送速度
起初,io和主机之间是采用程序控制方式,该方式下,CPU与外设直接不能并行工作;
- 2.1 中断: cpu和外部设备可以在部分实现中并行工作,提高了cpu使用率;
- 2.2 DMA: 直接主存访问;用DMA控制器直接在内存和外设之间进行数据传送;减少cpu在数据传送过程中的占用率;进而提高cpu的使用率;
- 2.3 通道: DMA可以划分为多个子通道(netty的实现原理);子通道间可以同时准备数据,但传送需要串行占用cpu周期,进一步提高了IO外设与内存间的数据传输率;
- 2.4 IO处理机:内存和IO设备间的数据传输,整个传输过程和数据校验过程,完全由IO处理器来做,cpu被独立出来和解放出来,效率会更高 ;
- 2.5 多总线: ;
【2】系统并行性
1 并行概念
2.1 并发: 两个或多个事件在同一时间段发生;
2.2 同时: 两个或多个事件在同一时刻发生(时间上相互重叠);
流水线方式是同时方式的一种;
2 并行性的等级
2.1 过程级 ;
2.2 指令级 ;
【3】指令流水原理
2)指令的二级流水
当取指令1完成后,进入执行指令1; 这时取指令部件空闲,可以取指令2;
当执行指令1完成后,转而执行指令2,而不是取指令2;这样,取指和执行阶段在时间上完全重叠;指令周期减半,速度提高1倍;
3)影响指令流水加倍的因素:
因素1 执行时间 大于 取指时间;
因素2 条件转移指令对指令流水的影响:
因为只有当指令执行后,才知道结果,根据结果判断是否转移; 如果转移的话,将要执行的指令就不是按序的下一条指令;
4)指令的六级流水
4.1)指令周期被分为6个阶段:
- 1) FI:取指令;fetch instruction
- 2) DI:指令译码; decode instruction
- 3) CO: 形成操作数地址;
- 4) FO: 取操作数; fetch operand
- 5) EI: 执行; execute instruction
- 6) WO: 结果写回;write operand
4.2)横轴表示时间; 纵轴表示指令;
4.3)由上图可以看出流水线的执行性能优于串行执行(干货):
完成一条指令需要6个时间单位;
1.串行执行,则完成9条指令,需要54个时间单位;
2.采用六级流水线执行,完成9条指令,仅需要14个时间单位;
5)小结(以m级流水线,n个指令为例)
5.1)m级流水线的含义:同一个时钟周期中最多有m条指令在同时执行;
5.2)本文结论:流水线中指令执行速率是串行方式的 X=m*n/(m+n-1) 倍; 又m可以看做常量,当n取无限大时,则X取m倍,即m级流水线的指令执行速度是串行方式的m倍(干货);
-- 流水线中指令执行分析过程如下:
第1条指令执行完成的时钟周期是m;
第2条指令执行完成的时钟周期是m+1;
第n条指令执行完成的时钟周期是 m+n-1;(由数学归纳法很简单就可以得出)
-- 串行方式指令执行分析过程:
第1条指令执行完成的时钟周期是m;
第2条指令执行完成的时钟周期是m*2;
第n条指令执行完成的时钟周期是m*n;(由数学归纳法很简单就可以得出)
【3.5】 影响指令流水线性能因素
【3.5.1】结构相关
【因素1】 结构相关;
如 指令a使用运算器计算下一条指令的地址;指令b使用运算器完成指令运算;这两条指令就会发生资源冲突;
上图蓝色标识的始终周期就会发生冲突;
如时钟周期4, 指令1的FO是访存取操作数;指令4的FI是访存取指令,这就会产生冲突; 这些冲突就会降低流水线性能;
解决方法:
- 1, 停顿;第4条指令的FI不在时钟周期4取指令,而停顿到时钟周期5取指令;
- 2, 指令存储器和数据存储器分开;
- 3, 指令预取技术(一次取多条指令,而不是每执行一条取一条指令);
【3.5.2】数据相关
不同指令重叠操作,流水线分为多个段,可能多个读段,或多个写段,通常情况下前段是读,后段是写,可能改变操作数的读写顺序; (如 指令1 先读后写; 指令2 先读后写;)
- 2.1 写后读相关;先写后读相关;
- 2.2 读后写相关;
- 2.3 写后写相关;
2.4 解决方法:
- 2.4.1 后推法;以写后读为例,等待写入R1成功后,然后再读R1的数据;
- 2.4.2 采用旁路技术;以写后读为例,不需要等待指令1的结果写入R1,只要指令1的结果一旦在运算器的输出端生成以后,直接把结果送入到指令2的运算器的输入端; 这样会更好节约时间;
【3.5.3】控制相关
指令3是转移指令;若需要转移,则转移到第15条指令;
而这期间,已经进入流水线的指令(指令4~指令7)的操作因指令转移会被作废,从而造成损失;
【4】指令流水线性能
- 1 吞吐率:单位时间内流水线所完成指令或输出结果的数量;
- 2 加速比: Sp;表示采用m段流水线的速度与同功能的不采用流水线的速度之比;
3 流水线效率:流水线中硬件使用率;
- 3.1 建立时间: 指令进入流水,到执行完成从流水线输出的时间;
- 3.2 排空时间: 最后一条指令进入流水线,到最后一条指令从流水线输出的时间;
总的时间=流水段被加电的总的时间;
【5】流水线多发技术
上面讲了,利用流水线提高指令执行速度;
下面看一下,在流水线的基础上,对指令的解释(包括取指令+执行指令)速度进一步提高的方法;
如果用多条流水线,即几条指令同时进入到不同流水线(多套流水线部件)进行解释,那这样的话, 指令速度可以被进一步提高; 这就是超标量技术(流水线多发技术);
【5.1 】超标量技术(多套流水线部件)
每个时钟周期内,多条独立指令进入到不同流水线中进行解释;
- 1 需要配置多条流水线,多个部件;
- 2 不能调整指令的执行顺序:
通过编译优化技术,把可并行的指令搭配起来; (这就是jvm指令重排序的原因所在了);
把多条可以并行执行的指令,把它挑选出来,让它们同时进入到3条流水线;
【5.2】超流水线技术(仅一套流水线部件)
超流水线: 把一个时钟周期分为3份;
- 时钟周期(0-1)有3根竖线,就把一个时钟周期(流水段)分为了3份;
1) 普通流水线的设计,每个时钟周期叫做流水段;
流水段之间加入锁存器,把每个流水段的执行结果在锁存器中进行锁存;
作为下一个流水段执行时的操作信号,或控制信号,或操作的数据;
2)超流水线的设计:
把一个时钟周期或一个流水段再分为3份;这3份之间是没有锁存器的;
不同指令处于同一个流水段或时钟周期中;相互之间的信号不能叠加;
例子:mips处理器, 采用了超流水技术;
超流水技术也不在指令执行过程中,调整指令执行顺序(jvm指令重排序),而是由编译器优化来调整;
【小结】
由上文分析知:m级流水线的指令执行速度是串行方式的m倍;
则 p分段m级超流水线技术的指令执行速度是串行方式的 m*p 倍 (理论情况下,因为还有很多影响流水线性能的因素);
【5.3】超长指令字
【6】流水线结构
【6.1】指令流水线结构
译码: 来确认这条指令要做什么操作;
地址形成部件:解析出操作数地址;
理想情况下, 6级流水线的速度是不采用流水线的6倍;
分为6段后,在流水段之间要加上锁存器;锁存器用于保存上一个流水段的操作结果;同时为下一个流水段提供操作数据和操作信号;
【6.2】运算流水线
以上是关于8.3-指令流水(学习笔记)的主要内容,如果未能解决你的问题,请参考以下文章