【计算机系统结构】第三章 流水线技术

news/2024/11/29 9:33:15/

文章目录

  • 第三章 流水线技术
    • 3.1 先行控制技术
    • 3.2 流水线的基本概念
    • 3.3 流水操作中的相关

第三章 流水线技术

提高计算机性能

  • 缩短 CPI:RISC技术
  • 提高指令并行度:流水线技术

3.1 先行控制技术

指令重叠执行

  • 指令执行时间:Ti=t取指令+t分析+t执行T_i = t_取指令+t_分析+t_执行Ti=t指令+t+t
  • 执行方式(假设三个阶段的 t 相等,一共 N 条指令)
    • 顺序执行:T=3NtT = 3NtT=3Nt
    • 重叠执行
      • 一次重叠:T=(1+2N)tT = (1+2N)tT=(1+2N)t
      • 两次重叠:T=(2+N)tT = (2+N)tT=(2+N)t

先行控制技术

  • 关键:缓冲技术、预处理技术
  • 目的:指令流和数据流的预处理和缓冲,使指令分析器和指令执行独立工作,始终忙碌
  • 问题
    • 部件独立
      • 独立取指、分析、执行部件,设置对应存储、指令、运算控制器
    • 主存访问冲突
      • 拆分程序和数据总线和存储器/cache(哈佛结构)
        • 结构复杂,数据线多,对汇编、机器程序员不透明
      • 多体交叉存储结构
      • 先行控制技术
    • 分析和执行指令时间不同
      • 先行控制技术
  • 先行控制处理机
    • 缓冲栈深度:D取指栈≥D操作栈≥D读栈≥D写栈D取指栈≥D操作栈≥D读栈≥D写栈D取指栈D操作栈D读栈D写栈

在这里插入图片描述

3.2 流水线的基本概念

概念

  • 流水线技术:重复过程 -> 若干子过程,子过程由专门部件实现
  • 流水线级或段:子过程及其功能部件
  • 流水线深度:流水线段数
  • 标量流水:取指、译码、执行、访存、写回
  • 流水线结构:功能部件+缓冲寄存器
  • 时空图:kkk 段流水线,nnn 条指令,每段用时 △t\triangle tt
    • 填入时间:k⋅△tk \cdot \triangle tkt
    • 填满+排空时间:(n−1)⋅△t(n-1) \cdot \triangle t(n1)t
    • 功能部件延时 △ts\triangle tsts,锁定时间 △tl\triangle tltl
      • 最高工作频率 TPMAX=1△ts+△tlTP_{MAX} = \frac{1}{\triangle ts+\triangle tl}TPMAX=ts+tl1
      • 延时时间不等,则最高工作频率 TPMAX=1max(△ts+△tl)TP_{MAX} = \frac{1}{max(\triangle ts+\triangle tl)}TPMAX=max(ts+tl)1
  • 特点
    • 每段用时 △t\triangle tt 应尽量相等,否则成为瓶颈,影响吞吐率,造成阻塞或断流
      • 分割瓶颈部件工作
      • 重复设置瓶颈部件
    • 满载时每隔 △t\triangle tt 将有一个结果输出

分类

  • 按处理机
    • 操作部件级:处理机算术逻辑运算部件分段,如浮点运算,超流水线处理机,子部件+缓冲
    • 处理机级:指令流水线,拆分指令解释执行过程,部件+缓冲
    • 处理机间级:多处理机系统任务调度策略,处理机+缓冲
  • 按功能
    • 单功能:一条流水线完成单一任务
    • 多功能:改变部件连接,从而改变流水线功能,标量运算
  • 按工作方式
    • 静态流水线:某功能指令全部流出后,才允许改变部件连接,单/多功能
    • 动态流水线:可在任何时候改变连接,多功能
  • 按连接方式
    • 线性流水线:没有反馈连接,常用
    • 非线性流水线:通过反馈线使部件重复使用
  • 按流入流出顺序
    • 顺序流水线:输出结果与输入次序相同,早期
    • 乱序流水线:打乱次序利于执行,结果恢复原次序,现代、
  • 按数据表示方式:标量流水线、向量流水线
  • 按控制方法:同步、异步
    • 处理机内:同步
    • 处理机间:异步

性能指标

  • 吞吐率:单位时间内完成任务量
    • TP=nTk=n(m+n−1)△tTP = \frac{n}{T_k} = \frac{n}{(m+n-1) \triangle t}TP=Tkn=(m+n1)tn
    • nnn 完成指令条数
    • TkT_kTk 完成任务所用时间 Tk=(m+n−1)△tT_k = (m+n-1) \triangle tTk=(m+n1)t各级执行时间相等且无气泡时才可用,否则看图说话
    • n→∞n \to \inftynTPmax=lim⁡n→∞n(m+n−1)△t=1△tTP_{max} = \lim_{n \to \infty} \frac{n}{(m+n-1) \triangle t} = \frac{1}{\triangle t}TPmax=limn(m+n1)tn=t1
    • m 级流水线,n 条指令,各级执行时间不等
      • TP=n∑i=1m△ti+(n−1)max⁡(△t1,…,△tm)TP = \frac{n}{\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)}TP=i=1mti+(n1)max(t1,,tm)n
      • n→∞n \to \inftynTPmax=1max⁡(△t1,…,△tm)TP_{max} = \frac{1}{\max(\triangle t_1,\dots,\triangle t_m)}TPmax=max(t1,,tm)1
  • 加速比:同一批任务,不用和采用流水线所用时间之比
    • S=T0Tk=nm△t(m+n−1)△t=nmm+n−1S = \frac{T_0}{T_k} = \frac{nm \triangle t}{(m+n-1) \triangle t} = \frac{nm}{m+n-1}S=TkT0=(m+n1)tnmt=m+n1nm
    • T0T_0T0 不用流水线所用时间 T0=nm△tT_0 = nm \triangle tT0=nmt各级执行时间相等可用,否则看条件说话
    • TkT_kTk 采用流水线所用时间
    • n→∞n \to \inftynSmax=lim⁡n→∞nmm+n−1=mS_{max} = \lim_{n \to \infty} \frac{nm}{m+n-1} = mSmax=limnm+n1nm=m
    • m 级流水线,n 条指令,各级执行时间不等
      • S=n⋅∑i=1m△ti∑i=1m△ti+(n−1)max⁡(△t1,…,△tm)S = \frac{n \cdot \sum_{i=1}^{m} \triangle t_i}{\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)}S=i=1mti+(n1)max(t1,,tm)ni=1mti
  • 效率: n 个任务占用的时空区与 m 个功能段总的时空区之比
    • E=T0m⋅Tk=nm△tm(m+n−1)△t=nm+n−1E = \frac{T_0}{m \cdot T_k} = \frac{nm \triangle t}{m(m+n-1) \triangle t} = \frac{n}{m+n-1}E=mTkT0=m(m+n1)tnmt=m+n1n
    • n→∞n \to \inftynEmax=lim⁡n→∞nm+n−1=1E_{max} = \lim_{n \to \infty} \frac{n}{m+n-1} = 1Emax=limnm+n1n=1
    • m 级流水线,n 条指令,各级执行时间不等
      • E=n⋅∑i=1m△tim⋅[∑i=1m△ti+(n−1)max⁡(△t1,…,△tm)]E = \frac{n \cdot \sum_{i=1}^{m} \triangle t_i}{m \cdot [\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)]}E=m[i=1mti+(n1)max(t1,,tm)]ni=1mti
    • 效率不高的原因
      • 数据相关
      • 任务较少时,填入和排空所占比例较大
      • 静态流水线导致排空拉长
  • 关系(各级执行时间相等):S=m⋅E=m⋅△t⋅TPS = m \cdot E = m \cdot \triangle t \cdot TPS=mE=mtTP
  • 性能价格比
    • PCR=TPmaxC=1tk+d⋅1a+bkPCR = \frac{TP_{max}}{C} = \frac{1}{\frac{t}{k}+d} \cdot \frac{1}{a+bk}PCR=CTPmax=kt+d1a+bk1
    • TPmax=1△t=1tk+dTP_{max} = \frac{1}{\triangle t} = \frac{1}{\frac{t}{k}+d}TPmax=t1=kt+d1
      • ttt 串行执行一个任务所用时间(取指分析执行一条指令所用时间)
      • tk+d\frac{t}{k}+dkt+d 同等速度在 k 段流水机执行一个任务所用时间
      • ddd 锁存器延迟时间
    • C=a+bkC = a+bkC=a+bk 流水线总价格
      • aaa 流水段本身价格总和
      • bbb 单个锁存器价格
    • 对 k 求导得,PCR 极值时 K0=tadbK_0 = \sqrt{\frac{ta}{db}}K0=dbta
    • k >= 8 超流水线,超流水线处理机

若干问题

  • 瓶颈问题:流水线各段不均匀,时钟周期取决于瓶颈段延迟时间
  • 额外开销:寄存器延迟,时钟偏移开销
  • 冲突问题:重要问题

非线性流水线的竞争与调度

  • 冲突
    • 启动距离:前一条指令输入开始到下一条指令输入为止的时间差
      • 禁止启动距离:会引起冲突的启动距离
      • 启动循环:任何时间都不会发生冲突的启动距离
  • 最优调度方法
    • 根据预约表写出第一条指令的禁止向量 F
      • 对每个部件计算任意两次复用时间差
      • 求所有部件的时间差的集合为禁止向量 F
      • 向量元素为禁止距离
    • 根据禁止向量计算初始冲突向量
      • 为一串二进制串,F 中存在 i 时该位为 0 否则为 1,串长度 len=max⁡(Fi)len = \max(F_i)len=max(Fi)(len <= 流水段数 m)
      • 第 i 位表示启动距离为 i△ti \triangle tit 时的冲突情况,0 不会冲突,1 冲突
    • 根据初始冲突向量推算出全部冲突向量
      • 初始向量右移,高位补零,地位溢出 1 时不做处理,溢出 0 时与初始向量相或,结果加入冲突向量集合
      • 再从向量集合中选中一个未操作向量,重复上述步骤,直至冲突向量集合不再扩展
    • 画出表示冲突向量迁移的有向图
      • 将冲突向量高位隐式补充到 n-1 位,n 为预约表最大周期数
      • 冲突向量第 i 位为 0,右移 i 位后与初始向量相或,得到结果向量,用有向边连接冲突向量节点与结果向量节点,边权为 i
      • 保证节点出度 = 冲突向量中 0 的个数
    • 根据冲突向量迁移图写出启动循环
      • 简单循环:有向图中的闭合回路,(1,7)表示第二条在 1 个周期后进入,第三条在 7 个周期后进入,第四条循环为 1 个周期后进入…
      • 平均启动距离(平均间隔时钟周期数):闭合回路的平均边权,
      • 最小启动循环(最优调度方案):平均启动距离最小的,且同时考虑奇、偶条指令的情况
      • 最小恒定循环:只有一条边的闭合回路
    • 计算最大吞吐率
    • 画出功能部件连接图
      • 最后一个到达的功能部件连接输出

3.3 流水操作中的相关

相关

  • 概念:指令存在依赖关系
  • 名相关:两条指令访问相同名称的寄存器/存储器单元,但没有数据流动
    • 反相关:j 写 = i 读
    • 输出相关:j 写 = i 写
    • 换名技术:修改操作数名,一改全改
  • 数据相关:
    • 条件(满足其一即是数据相关)
      • j 使用 i 的结果
      • j 与 k 数据相关且 k 与 i 数据相关(传递性)
    • 存储器数据相关考虑其有效地址
  • 控制相关:分支指令引起
    • 两个限制
      • 被分支指令控制的指令不能移动到分支指令之前
      • 不被分支指令控制的指令不能移动到分支指令之后

冲突

  • 概念:由于相关使得下一条指令不能在指定时钟周期执行
  • 结构冲突:同一时间争用同一功能部件
    • 解决方法:暂停一拍,气泡
  • 数据冲突:指令重叠执行导致数据访存顺序改变
    • 解决方法:定向传送技术,旁路技术,相关专用通路技术
    • 类型
      • RAW 先读后写
        • 定向传送技术:顺序流动流水线,不一定管用
        • 互锁硬件:检测流水线冲突,插入暂停,直至冲突消失
        • 指令调度:乱序流动流水线,编译调整指令顺序
      • WAR 先写后读,覆盖了真正想读出的原来的内容,乱序流水
      • WAW 写后写,改变写入顺序,乱序流水
  • 控制冲突:分支指令引起 PC 值变化
    • 解决办法
      • 尽早计算目标地址,尽早判断转移是否成功
        • 使得目标地址能在 ID 后可知
      • 预测分支失败
        • 失败:正常流动(不浪费周期)
        • 成功:后一条指令做空(浪费 1T)然后执行目标指令
      • 预测分支成功
        • 条件:先知道目标地址,后知道是否成功(同时知道,则没有作用)
      • 延迟分支:“延长”分支指令执行时间
        • 从前调度:不被依赖,总能提高流水线性能
        • 从目标处调度:失败必须保证被调度的指令对程序的执行没有影响,成功时可提高流水线性能
        • 从失败处调度:成功必须保证被调度的指令对程序的执行没有影响,失败时可提高流水线性能

http://www.ppmy.cn/news/41703.html

相关文章

如何开启全新旅途,实现旅游市场活力复苏

2023年&#xff0c;随着疫情逐渐得到控制&#xff0c;旅游业迎来了新的发展机遇&#xff0c;如何重振旅游市场成为了各界关注的焦点。那么&#xff0c;我们该如何开启全新的旅途&#xff0c;实现旅游市场活力的复苏呢&#xff1f; 增强服务意识&#xff0c;助力旅游市场活力复苏…

Java语言-----泛型的认识

目录 一.什么是泛型 二.泛型类的使用 2.1泛型类的定义 2.2泛型类的数组使用 三.泛型的上界 四.泛型的方法 五.泛型与集合 &#x1f63d;个人主页&#xff1a; tq02的博客_CSDN博客-C语言,Java领域博主 &#x1f308;梦的目标&#xff1a;努力学习&#xff0c;向Java进发…

Python 进阶指南(编程轻松进阶):十三、性能测量和大 O 算法分析

原文&#xff1a;http://inventwithpython.com/beyond/chapter13.html 对于大多数小程序来说&#xff0c;性能并不那么重要。我们可能会花一个小时编写一个脚本来自动执行一个只需要几秒钟就能运行的任务。即使需要更长的时间&#xff0c;当我们端着一杯咖啡回到办公桌时&#…

Servlet入门讲解

文章目录简介快速入门执行流程生命周期方法介绍体系结构urlPattern配置XML配置简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强&#xff08;C#&#xff09;Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调…

SpringCloud微服务技术栈之网关服务Gateway

文章目录SpringCloud微服务技术栈之网关服务Gateway前言网关服务Gateway的基本概念Gateway的体系结构Gateway的主要功能网关服务Gateway的架构设计架构设计方案示例代码网关服务Gateway的实践操作1. 创建工程2. 配置路由规则3. 实现过滤器4. 集成服务注册中心5. 启动网关服务器…

面试题

用 C写一个函数&#xff0c;交换两个整型变量 int a 5, b 10; cout << "Before swapping: a " << a << ", b " << b << endl; swapVars<int>(a, b); cout << "After swapping: a " << a …

检测图中的负循环 | (贝尔曼福特)

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和变为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子: