首页 > 其他分享 >11-指令流水

11-指令流水

时间:2023-06-14 19:46:10浏览次数:50  
标签:11 取指令 部件 指令 流水 流水线 执行

三、指令周期

一、如何提高机器速度

  1. 提高访存速度
    高速芯片 Cache 多体并行
  2. 提高I/O和主机之间的传送速度
    中断 DMA 通道 I/O处理机 多总线
  3. 提高运算速度
    高速芯片 改进算法 快速进位链
  4. 提高整机处理能力
    高速器件 改进系统结构,开发系统的并行性

二、系统的并行性

  1. 并行的概念
    并行:
    • 并发:两个或两个以上时间再同一时间段发生
    • 同时:两个或两个以上时间再同一时刻发生
  2. 并行性的等级
    过程级(程序、进程) 粗粒度 软件实现
    指令集(指令之间、指令内部)细粒度 硬件实现

三、指令流水原理

  1. 指令的串行执行
    取指令 取指令部件 完成
    执行指令 执行指令部件 完成

    如果采用执行的串行执行,则取指令阶段 执行指令部件空闲;执行指令阶段取指令部件空闲

  2. 指令的二级流水
    第一条指令在执行指令的时候,第二条指令开始取指令操作
    若取指和执行阶段时间上完全重叠,指令周期减半 速度提高1倍

  3. 影响指令流水效率加倍的因素
    1) 执行时间>取指时间 可以在取指令部件和执行指令部件中间加一个指令部件缓冲区,如果指令指令部件还没有让出,就先将指令放在指令部件缓冲区中
    2) 条件转移指令 对指令流水的影响:必须等上条指令执行结束,才能确定下条指令的地址 造成时间损失 可以进行指令预测

  4. 指令的六级流水

四、影响指令流水线性能的因素

  1. 结构相关 不同指令争用同一功能部件产生资源冲突
    解决办法:

    • 停顿
    • 指令存储器和数据存储器分开
    • 指令预取技术(适用于访存周期短的情况)
  2. 数据相关 不同指令因重叠操作,可能改变操作数的 读/写 访问顺序
    写后读相关(RAW)
    读后写相关(WAR)
    写后写相关(WAW)
    解决办法:

    • 后推法:推后读,在上一条指令结束后,再执行下一条指令
    • 采用旁路技术 在上一条指令运算器有结果输出后,直接给到下一个运算器的输入端来节省时间
  3. 控制相关 由转移指令引发 转移指令只有在上一条指令结束后,才知道下一条指令是哪一条,就造成了时间的浪费

  4. 流水线性能
    1)吞吐率 单位时间内流水线所完成指令或输出结果的数量 设m段的流水线各段时间为△t

    • 最大吞吐率$T_pmax=1/△t$
    • 实际吞吐率 连续处理n条指令的吞吐率为$T_p=n/(m*△t+(n-1)△t)$
      2)加速比 m段的流水线速度与等功能的非流水线速度之比 设m段的流水线各段时间为△t
    • 完成n调指令在m段流水线上共需$T=m△t+(n-1)△t$
    • 完成n调指令在等效的非流水线上共需$T'=nm△t$
      加速比 $S_p=nm/(m+n-1)$
      3)效率 流水线中各功能段的利用率
      由于流水线有建立时间和排空时间 因此各功能段的设备不可能一直处于工作状态
      效率=流水线各段处于工作时间的时空区/流水线中各段总的时空区=mn△t/m(m+n-1)△t

五、流水线的多发技术

  1. 超标量技术
    • 每个时钟周期内可并发多条独立指令
      配置多个功能部件
    • 不能调整指令的执行顺序
      通过编译优化技术,把可并行执行的指令搭配起来
  2. 超流水线技术(使用广泛)
    • 在一个时钟周期内再分段(3段)
      在一个时钟周期内一个功能部件使用多次(3次)
    • 不能调整指令的执行顺序
      靠编译程序解决优化问题
      流水线速度最大可达到原来的3倍
  3. 超长指令字技术
    • 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条,具有多个操作码字段的超长指令字(可达几百位)
    • 采用多个处理部件

六、流水线结构

  1. 指令流水线结构
    完成一条指令分6段,每段需一个时钟周期(不同cpu不一样)
    取指令部件->指令译码部件->地址形成部件->取操作数部件->操作执行部件->回写结果部件
    若流水线不出现断流 1个时钟周期出1个结果
    不采用流水线技术 6个始终周期出一个结果
    理想情况下,6级流水的速度是不采用流水技术的6倍
    每个部件都需要锁存
  2. 运算流水线
    完成浮点加减运算 可分 对阶、尾数求和、规格化三段
    每一段后面都要加锁存器
    分段原则 每段操作时间尽量一直

标签:11,取指令,部件,指令,流水,流水线,执行
From: https://www.cnblogs.com/Oh-mydream/p/17481191.html

相关文章

  • 1111
    classGet_gradient_nopadding(nn.Module):def__init__(self):super(Get_gradient_nopadding,self).__init__()kernel_v=[[0,-1,0],[0,0,0],[0,1,0]]kernel_h=[[0,0,0],......
  • Dapr v1.11 版本已发布
    Dapr是一套开源、可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性、微服务、无状态以及有状态等应用程序类型。Dapr能够确保开发人员专注于编写业务逻辑,而不必分神于解决分布式系统难题,由此显著提高生产力并缩短开发时长。Dapr是用于构建云原生应用程序的开......
  • WPF在win10/11上启用模糊特效 适配Dark/Light Mode
    先看效果图win11:win10: 大佬们已经总结了许多在WPF上开启亚克力效果的方法,本文只是做一些填坑和适配工作.正文开始先来看看部分版本Windows的模糊效果和我的适配方案:1).早期Windows10:SetWindowCompositionAttribute方法参照:在Windows10上为WPF窗口添加模糊特......
  • POJ2117 Electricity 题解 tarjan点双连通分量 割点
    题目链接:http://poj.org/problem?id=2117题目大意:给定一个由\(n\)个点\(m\)条边构成的无向图,请你求出该图删除一个点之后,连通块最多有多少。解题思路:tarjan,判断\(u\)的子节点有几个\(v\)满足\(low[v]\gedfn[u]\)就是答案,但是同时如果\(u\)不是这个dfs树的根节......
  • java开发C语言编译器:jvm的return指令以及局部变量的操作
    jvm运行字节码时,代码的运行必须围绕两种数据结构,一种是堆栈,一种是队列,如果jvm执行某条指令时,该指令需要对数据进行操作,那么被操作的数据在指令执行前,必须要压倒堆栈上。如果堆栈上的数据需要暂时保持起来时,它就会被加载到局部变量队列上。java代码中,每个方法里面的局部变量包括函数......
  • java开发C语言编译器:JVM 的基本操作指令介绍及其程序运行原理
    更详细的讲解和代码调试演示过程,请参看视频用java开发C语言编译器更详细的讲解和代码调试演示过程,请参看视频如何进入google,算法面试技能全面提升指南如果你对机器学习感兴趣,请参看一下链接:机器学习:神经网络导论更详细的讲解和代码调试演示过程,请参看视频LinuxkernelHacker,......
  • 6-14|gitlab的runner的流水线怎么看
    要查看GitLab的Runner的流水线,可以按照以下步骤操作:1.进入GitLab的项目页面,选择“CI/CD”选项卡。2.在“Pipelines”选项卡下,在顶部的搜索框中输入Runner名称或者RunnerID,筛选出该Runner对应的流水线。3.点击该流水线的ID,进入该流水线的详情页面。4.在流水线详情页面,可以......
  • win11更改鼠标右键菜单栏
    **右键菜单改回Win10(展开)**1.新建记事本:(格式为.txt)2.填写脚本内容regadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f/vetaskkill/f/imexplorer.exe&startexplorer.exe3.保存文件,记事本后缀.txt改为.bat确定4.......
  • miniconda 常用指令
    创建新环境:condacreate-npy2python=2.7condacreate-n环境名字python版本删除环境:condaremove-npy2--allcondaremove-n环境名字--all(--all是清除全部)列出当前所有环境:condaenvlist进入某个环境:condaactivatepy2condaactivate环境名字退......
  • 2015年11月Xcode7.1(7B91b)打包发布苹果iOS应用指南
    2015年11月Xcode7.1(7B91b)打包发布苹果iOS应用指南 第1步:配置项目的开发授权证书(图1)如图1,选择TARGETS下的项目名称。(图2)如图2,选择BuildSettings,然后找到ProvisioningProfile. (图3)如图3,选择distribution的开发授权证书。这个distribution的开发授权证书来自苹果开发者后台配置......