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】运算流水线

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值