zoukankan      html  css  js  c++  java
  • 组成原理(十三):指令流水

    学习重点

    1. 并行等级
    2. 指令流水原理
      • 指令二级流水
      • 指令六级流水
    3. 影响流水线性能的因素
      • 结构相关:资源冲突
      • 数据相关:指令重排序
      • 控制相关:转移指令
    4. 流水线能指标:
      • 吞吐率
      • 加速比
      • 效率
    5. 流水线多发技术:
      • 超标量技术
      • 超流水技术
      • 超长指令字
    6. 流水线结构:
      • 指令流水结构
      • 运算流水结构
      • 锁存器

    1.提高机器速度

    1.1 提高访存速度

    高速芯片;Cache;多体并行

    1.2 提高IO和主机之间的传送速度

    中断, DMA, 通道, IO处理机, 多总线

    1.3 提高运算器速度

    高速芯片; 改进算法; 快速进位链

    1.4 提高整机处理能力

    高速器件;改进系统结构,开发系统并行性


    2.系统的并行性

    1.并行的概念:

    • 并发:两个或两个以上事件在同一事件段发生
    • 同时(并行):两个或两个以上事件在同一时刻发生,时间上相互重叠

    2.并行性的等级

    • 过程级(程序、进程):粗粒度 ,软件实现
    • 指令级(指令之间,内部):细粒度,硬件实现

    3.指令流水原理

    3.1 串行指令与二级流水

    指令的串行执行

    指令的二级流水

    3.2 影响指令流水效率加倍的因素

    1. 执行时间 > 取指时间
      通过指令部件缓冲区解决:

    2. 条件转移指令 对指令流水的影响

      • 必须等上条指令执行结束才能确定下条指令的地址,等待时间
      • 分支预测法:猜测法

    3.3 指令六级流水

    • FI:取指令
    • DI:指令译码
    • CO:形成操作数
    • FO:取操作数
    • EI:执行
    • WO:结果写回(寄存器或内存)

    4.影响指令流水线性能的因素

    4.1 结构相关

    不同指令争用同一功能部件产生资源冲突:FI,FO,WO

    对寄存器,运算器的访问也会发生冲突

    解决:

    • 停顿:加入气泡,往后移
    • 分立缓存:指令存储器和数据存储器分开,half结构
    • 指令预取:取指部件利用空闲时间将指令取到缓冲队列

    4.2 数据相关

    不同指令因重叠操作,可能改变操作数的 读/写 访问顺序

    1. 写后读:(RAW)
    2. 读后写:(WAR)
    3. 写后写:(WAW)

    解决方法:

    • 后推法:推后指令的读或写,等到另一个指令的操作执行完毕再执行
    • 旁路技术(前向通道):前一个指令执行完后,不写回主存或寄存器,直接送入第二个指令

    4.3 控制相关

    条件转移指令引起:

    示例:第三条指令是转移指令

    • 指令3 执行(EI)时,直接转移到指令15
    • 导致中间 4~15 的指令全都不执行,造成损失

    5.流水线性能(指标)

    5.1 吞吐率

    单位时间内 流水线 所完成指令输出结果 的数量

    • m*Δt:第一条流水线执行完毕时间
    • 之后每个时间段都有一条指令执行完毕
    • 示意图见5.3

    5.2 加速比

    阿姆达尔定律

    加速比=未用指令流水时间/使用了指令流水时间

    示意图见5.3

    5.3 效率

    流水线各功能段的利用率


    6.流水线多发技术

    6.1 超标量技术

    • 每个时钟周期内可并发多条独立指令,配置多个功能部件
    • 不能调整指令的执行顺序:通过编译优化技术,把可并行执行的指令搭配起来

    示意图:

    6.2 超流水技术

    一个时钟周期内再分段(3段)

    一个时钟周期内一个功能部件使用多次(3次)

    不能调整指令的执行顺序:靠编译程序解决优化问题

    每个时钟之间都有锁存器

    • 保存前一阶段结果
    • 为下一阶段提供操作数据和信号

    6.4 超长指令字技术

    1. 由编译程序 将多条能并行操作的指令组合成一条
    2. 具有多个操作码字段超长指令字 (几百位)

    7.流水线结构

    7.1 指令流水

    完成一条指令分为6段,每段需要一个时钟周期(不同CPU不同)

    每段之间需要加上锁存器,理想情况下提高6倍速度

    7.2 运算流水

    完成 浮点加减运算,大致可分为对阶,尾数求和,规格化三个阶段


  • 相关阅读:
    %
    【收藏】Javascript调用后台代码的方法
    C++Builder2010中配置OpenCV2.2
    【收藏】Visual studio 2008 && 2010 快捷键大全
    队列的练习
    哈希表
    poj 3750 链表
    C/C++内存存储 mark在此
    二叉树,深搜,广搜
    链表的练习
  • 原文地址:https://www.cnblogs.com/kenshine/p/14517142.html
Copyright © 2011-2022 走看看