当前位置: 首页 > java >正文

【体系结构 三 流水线技术】

体系结构 三 流水线技术

  • 1.流水线的基本概念
  • 2.基本流水线的分类
  • 3.基于DLX指令集的流水线实现
  • 4.流水线的性能指标
  • 5.流水线冒险


1.流水线的基本概念

将重复的时序过程分解成若干个子过程,每一个子过程都可以有效的在其专用功能段上与其他子过程同时进行

流水线的特点:

  1. 流水过程由多个相联系的子过程组成,每个过程称为流水线的“级”或“段”,一条流水线的段数,也称为流水线的“深度”或“流水深度”
    每个子过程由专用的功能段实现
  2. 各个功能段所需时间应尽量相等,否则,时间长的功能会造成流水线的“堵塞”和“断流”,这个时间一般为一个时钟周期(拍)或机器周期
    流水线需要有“通过时间”(第一个任务流出结果所需的时间),在此之后流水过程才进入稳定工作状态,每一个时钟周期(拍)流出一个结果
  3. 流水线技术适合大量重复的时序过程,只有在输入端能够连续地提供任务,流水线地效率才能充分发挥

2.基本流水线的分类

按照流水线所完成的功能分类:

单功能流水线(Unifunction Pipelines):只能完成一种固定功能的流水线
多功能流水线(MultifunctionPipelines):流水线的各段可以进行不同的连接,从而使流水线在不同的时刻或在同一时间完成不同的功能

按照同一时间内各段之间的连接方式分类:

静态流水线(Static Pipelines):同一时间内,流水线的各段只能按同一种功能的连接方式工作
动态流水线(DynamicPipelines):在统一时间内,当某些段正在实现某种运算(如定点乘)时,另一些段却在实现另一种运算(如浮点加)

按照流水的级别来进行分类:

部件级流水线:又叫运算操作流水线(Arithmetic Pipelines),是把处理机的算术逻辑部件分段,以便为各种数据类型进行流水操作
处理机级流水线:又叫指令流水线(Instruction Pipelines),是把解释指令的过程按照流水方式处理
处理机间流水线:宏流水线(MacroPipelines),是由两个以上的处理机串行地对同意数据流进行处理,每个处理机完成一项任务。一般属于异构型多处理机系统,对提高各处理机地效率有很大地作用

按数据表示来分类:

标量流水处理机(Scalar Pipelining Processor):处理机不具有向量数据表示,仅对标量数据进行流水处理
向量流水处理机(Vector Pipelining Processor):处理机具有向量数据表示,并通过向量指令对向量地各元素进行处理

按照流水线种是否有反馈回路进行分类

线性流水线(linear pipelines):流水线地各段串行连接,没有反馈回路
非线性流水线(nonlinearpipelines):流水线中除有串行连接地通路,还有反馈回路。常用于递归或组成多功能流水线。在非线性流水线中地重要问题是流水线地调度问题

3.基于DLX指令集的流水线实现


在这里插入图片描述
1)取指令周期(IF):

根据PC值从存储器中取出指令,并将指令送入指令寄存器IR;PC值增加4,指向顺序的下一条指令,并将下一条指令的地址放入临时寄存器NPC中。

2)指令译码/读寄存器周期(ID):

读IR寄存器(指令寄存器),并将读出结果放入两个临时寄存器A和B中。同时对IR寄存器中内容的低16位进行符号扩展,然后将符号扩展后的32位立即值保存在临时寄存器Imm中。(固定字段译码“Fixed-FieldDecoding”技术)

3)执行/有效地址计算周期(EX)

可分为如下4类:

  • 存储器访问:ALU将操作数相加形成有效地址,并将结果放入临时寄存器ALUOutput中
  • 寄存器-寄存器ALU操作:ALU根据操作码支出的功能对临时寄存器A和B的值进行处理,并将结果送入临时寄存器ALUOutput中。
    在这里插入图片描述
  • 寄存器-立即值ALU操作:ALU根据操作码指出的功能对临时寄存器A和Imm中的值进行处理,并将结果送入临时寄存器ALUOutput中。
    在这里插入图片描述
  • 分支操作:ALU将临时寄存器NPC和Imm中的值相加,得到分支的目的地址。同时对前一个周期读入到寄存器A的值进行检查,决定分支是否成功。

4)存储器访问/分支完成周期(MEM)

  • 存储器访问操作
    存储器访问操作包含了Load和Store两种类型的操作。
    !在这里插入图片描述
  • 分支操作
    在这里插入图片描述

5)写回周期(WB)

不同的指令在写回周期完成的工作也不一样。


在这里插入图片描述

需要解决的问题:
必须要确保在指令重叠时,不存在任何流水线资源冲突问题,流水线各段不会在同一个时钟周期内使用相同的数据通路资源。

将IM和DM分隔开,避免了取指令操作和访问数据操作之间存在访问存储器冲突,但因此导致流水线的存储器带宽必须是非流水线的5倍,这是获取高性能所必须付出的开销之一。

IM  --- 指令存储器
DM  --- 数据存储器

在这里插入图片描述
那么如果读写都是对同一个寄存器进行,又将如何处理呢?

从使用资源的角度分析,流水线的ID和WB段都需要使用到寄存器文件:
ID段需要对寄存器文件进行读操作
WB段需要对寄存器文件进行写操作

如何处理分支指令?

其次在图中没有考虑PC的问题,流水线为了能够在每个时钟周期启动一条新的指令,就必须能够子啊每个时钟完成PC值的增值操作,并保存增值后的PC值,对于上述的流水线来说必须在IF段完成,以便于取下一条指令做好准备,当流水线执行分支指令的时候,分支指令可能会改变PC值,但是它只有在MEM段结束之后才能完成对PC值的操作。针对这个问题我们需要重新组织上述的流水线的数据通路,争取在IF段完成改变PC值的操作。

总结上述的的问题如下:

问题解决办法
取指令操作和访问数据操作之间存在访问存储器冲突将IM和DM分隔开
如何对同一个寄存器进行读写
如何处理分支指令(PC值的改变)

综上问题,在流水线中,每个时钟周期都要用到其所有的流水段,一个流水段中的所有操作必须在一个时钟周期内完成,特别是要是数据通路完全流水,就必须保证从一个流水段传输到下一个流水段的数据都能够被保存到寄存器文件中,为此对多周期实现数据通路进行如下改进:

在这里插入图片描述
每个流水段之间设置了一些流水线寄存器文件。流水线寄存器文件保存着从一个流水段传送到下一个流水段的所有数据和控制信息。随着流水过程的进行,这些数据和控制信息从一个流水线寄存器文件拷贝到下一个流水线寄存器文件,直至不再需要为止。

寄存器文件由它们相连的流水段的名称来标记,当一条指令流水执行时,在各个时钟周期之间用来保存临时值的所有寄存器都包含在相应的寄存器文件中,每个寄存器文件被看作是相应寄存器文件的一个阈,这些寄存器也被称之为流水线寄存器。

IF/ID寄存器文件 ---- 连接流水线IF段和ID段的寄存器文件
指令寄存器是IF/ID寄存器文件的一个阈被记作IF/ID.IR

在这里插入图片描述


4.流水线的性能指标


吞吐率:是指单位时间内流水线所完成的任务数或输出结果的数量

  • 最大吞吐率:流水线在连续流动达到稳定状态后所得到的吞吐率
  • 实际吞吐率:
  • 吞吐率是衡量流水线速度的重要指标。

加速比:指m段流水线的速度与等功能的非流水线的速度之比

效率:流水线的设备利用率。

  • 由于流水线有通过时间和排空时间,所以在连续完成n个任务的时间内,每段都不是在满负荷地工作
  • 通过时间:第一个任务输入完成后到其完成的时间
  • 排空时间:最后一个任务输入后到完成的时间

5.流水线冒险


该部分内容详细可参考:
链接: 流水线冒险(Pipeline Hazards)|计算机组成


**在流水线中会有一种情况,在下一个时钟周期中下一条指令不能执行,这种情况被叫做流水线冒险。**流水线冒险一共分为三种情况:

  • 结构冒险(Structural hazards)
  • 数据冒险(Data hazards)
  • 控制冒险(Control hazards)

结构冒险(Structural hazards)

因缺乏硬件支持而导致指令不能在预定的时钟周期内执行的情况。即硬件不支持多条指令在同一时钟周期执行。

数据冒险(Data hazards)

无法提供指令所需数据而导致指令不能在预定的时钟周期内执行的情况。即一条指令的执行需要等待另一条指令执行完成后所产生的数据。

控制冒险(Control hazards)

也叫分支冒险,决策依赖于一条指令的结果,而其他指令正在执行中。比如说分支跳转指令,必须等ALU给出结果后才知道该跳转到哪一条语句。

http://www.xdnf.cn/news/11099.html

相关文章:

  • delay的几个函数说明
  • Linux Shell Shock漏洞利用和实战
  • php语法之计算1~100偶数之和
  • c语言-exit函数
  • 【C语言】Windows下的多线程编程-关键段(临界区)
  • LARGE_INTEGER 转换 __int64
  • 进化计算(八)——MOEA/D算法详解Ⅱ
  • 12036 抢票助手开源,星标 12.7K !
  • B2B2C电商app系统开发(java开源,快速搭建)
  • 【一文读懂】什么是磁带存储?为何焕发第二春?
  • 【Laravel系列4.3】模型Eloquent ORM的使用(一)
  • 5000字详解性能需求
  • 滚动条样式修改
  • 内网端口映射工具有哪些?
  • 蝶阀的作用介绍
  • 史上最全网络安全站点集合
  • Java面试宝典
  • 分享126个图片JS特效,总有一款适合您
  • Nios II嵌入式软处理器提升系统性能方式详解
  • Happytime RTSP可用于流式传输各种设备和文
  • 俄罗斯 搜索引擎 邮箱创建
  • 使用 iMacros 来自动化日常的工作
  • LAMP架构
  • erp是什么意思?ERP系统是什么
  • 使用Plist编辑器——简单入门指南
  • 前HP大中华区总裁孙振耀退休感言
  • Java小白(学习Java详细讲解)从入门到精通
  • 一文带你了解红墨水实验!
  • 华为交换机配置入门指南:从零开始,轻松掌握基础配置
  • 一文读懂背照式CMOS图像传感器