zoukankan      html  css  js  c++  java
  • 流水线技术概念简介

    流水线原理

    对于一条具体的指令执行过程,通常可以分为五个部分:取指令,指令译码,取操作数,运算,写结果.其中前三步一般由指令控制器完成,后两步则由运算器完成

    若采用顺序执行的方式, 则执行前三步时运算器空闲, 执行后两步时指令控制器空闲.

    流水线技术的基本原理是: 指令控制器完成了对第一条指令的处理后, 不等待运算器完成后续的处理直接开始对第二条指令的处理.这里的指令控制器和运算器只是对参与指令处理的部件的举例.

    时空图是对处理状态的图形描述, 横坐标为时间, 纵坐标离散为处理的阶段(表示对处理部件的占用, 即空间).每一块代表某一指令的某一处理阶段, 标有同一序号的各阶段的块表示某一指令的处理流程.

    各阶段等时长的时空图:

    各阶段不等时长的时空图:

    吞吐率TP是衡量处理能力的主要指标, 其含义为单位时间内处理的指令数.

    对单指令流水线而言,最大吞吐率(TP_{max})为处理过程中用时最长阶段单次耗时的倒数.

    实际吞吐率则根据定义来计算.

    由时空图我们可以计算出处理n条指令所花费的时间T, 并可以计算出采用顺序处理消耗的时间(T_{顺}).

    定义加速比(S = frac{T_{顺}}{T}).

    提高流水线性能

    瓶颈

    瓶颈是指处理时间较长的处理阶段, 从上面各阶段不等长的时空图可以看出这些处理阶段使得后续阶段需要等待其完成浪费了处理时间.

    对于瓶颈阶段的解决方案可以采用将瓶颈阶段拆分为多个较短的处理阶段,或者采用多个处理部件并行处理.

    将瓶颈阶段拆分后单指令处理时间未变, 但是多条指令总体处理时间缩短.

    相关

    相关是指流水线处理过程中相邻或相近的任务之间存在依赖制约关系.相关将会降低流水线的处理效率,因此, 需要采取措施避免相关性带来的损害.

    相关性分为几类:

    • 结构相关: 并行执行的指令需要占用同一硬件资源产生冲突.

    • 数据相关: 处理的某一阶段需要等待上一阶段的结果产生数据相关, 如上文瓶颈阶段

    • 控制相关: 当流水线执行条件转移等指令时产生控制相关.

    处理控制相关的方法除了上文提到的对瓶颈的处理外还有定向和互锁硬件.

    定向设备是流水线段之间直接的连通同路,又称旁路或短路.

    流水线互锁硬件在发现存在数据相关时先让流水线暂停工作,直到数据相关消失为止.

    条件转移指令导致已经进入流水线的指令不再执行, 需要将转移目标处的指令重新加入流水线中,降低效率.

    处理控制相关的主要思路是分支预测,分支预测分为静态预测和动态预测两种.

    静态预测比较重要的方法是编译器预测,比如对于一个循环,编译器认为继续循环比跳出循环的概率要大.

    动态分支预测的一种方法是采用分支历史表, 通过一或两个标志位记录该分支处历史信息,用于预测分支.

    分支目标缓冲器则是存储历史跳转目标, 若当前条件与历史吻合时则用历史记录进行跳转.

    延迟分支是分支预测之外的另一种处理方法, 它利用编译器对指令重排, 通过插入空指令或有用指令尽量使流水线处于充满状态.

    将分支指令延迟为长度为n的分支指令,其后紧跟n个分支延迟槽, 利用延迟槽中的指令掩盖必须插入的停顿周期, 减少分支开销.

    中断

    中断分为内部中断和外部中断,内部中断主要是异常处理中断,外部中断则类型很多发生比较随机,如IO中断.

    断点分为不精确断点和精确断点.不精确断点的处理机制是禁止新的指令进入流水线,已进入的指令执行完毕后流水线中断.

    除了中断位置不精确外,如果是异常中断不精确断点会使异常指令继续执行容易产生错误结果.

    精确断点则是立即中断, 流水线中现场信息全部保留下来以便在中断返回后恢复现场.

    其它

    提高流水线深度(段数)是经典的加速方法, 但也伴随着许多问题.现在有很多新技术用于加速处理.

    指令调度是在一段程序中重新排序指令,使得程序中相关指令尽可能消除.

    乱序执行则采用跳过相关指令,先执行不相关指令的方法加速.

    超标量处理机基于重复硬件运行多条流水线,使得在一个时钟周期内可以发射或流出多条指令.

    超流水线处理机将阶段更加细分, 级数大于等于8级的流水线称为超流水线.

    超长指令字是把不相关的多条指令组合在一起作为一条位数超长的指令一同发射到流水线中,并行执行.

  • 相关阅读:
    模型层之多表操作
    模型层:表单操作
    Django模板层
    第六十课、数组类模板
    第五十九课、类模板的深度剖析
    第五十八课、类模板的概念和意义
    第五十七课、深入理解函数模板
    第五十六课、函数模板的概念和意义
    第五十五课、经典问题解析四
    第五十四课、被遗弃的多重继承(下)
  • 原文地址:https://www.cnblogs.com/Finley/p/5631360.html
Copyright © 2011-2022 走看看