【计算机系统】指令流水线

前言       

        流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各部件同时处理是针对不同指令而言的,比如说,指令流水线把一条指令分为取指、分析和执行3部分,可以同时处理取指和分析,但是不能同时处理一个部分,如不能同时处理取指操作。


        指令流水线是将指令执行分成几个子过程,每一个子过程对应一个工位,我们称之为流水级或流水节拍,如下图所示。该工位在计算机中就是可以重叠工作(相同时间同时工作)的功能部件,称为流水部件。流水线要求所有指令在每个部件上执行的时间是一样的。在流水线中,机器周期的长度由最慢的流水级部件处理子过程所需的时间来决定

        IF部件、ID部件、EX部件、WD部件可同时都执行有操作,每条指令按图中一步步执行。在部件执行操作的过程中,允许上一个指令进入,它只能等待当前指令操作执行完成后方可进入此部件。

        流水线这种可同时为多条指令的不同部件进行工作的方式,提高了各部件的利用率和指令的平均执行速度。它是怎么提高利用率的呢?下面看两个图来分析。

       从图2可以看到,任意一个系统时间都有大量的设备处于空闲状态,例如第一个时间段有ID、EX、WB空闲,则第二个时间段有IF、EX、WB空闲。

       从图3可以看到,系统空闲的时间只是执行第一条指令的时候有,后面就都没有了,大大提升系统资源的利用率及整个系统的吞吐量。


计算流水线执行时间: Nt+(k-1)*▲t。

       假定有某种类型的任务,共分成N个子任务,执行每个子任务需要时间t,则完成该任务所需时间为Nt。若以传统的串行方式,则完成K个任务所需时间为KNt;而使用流水线技术执行,时间是Nt+(k-1)t。我们可以根据图3加以理解,第一个任务需要完整的时间,余下任务开始周期执行,然后根据最慢的流水部件得出周期,再乘以(总指令数-1)就得到任务的执行总时间了。

两个术语

        流水线的吞吐率:任务数/完成时间。如:在流水线执行方式下,完成3个任务花费了6s,则此流水线的吞吐率为3/6,等于0.5。

        加速比:不采用流水线的执行时间/采用流水线的执行时间。如:图2和图3,执行两个任务,采用流水线的执行时间为5s,不采用流水线的执行时间为8s,则加速比为8/5。


影响流水线的主要因素


       流水线的关键在于同一时间轴,多个部件同时执行,因此如果这个条件不能得到满足,则流水线就会被破坏。这种破坏主要来自以下3种情况:转移指令、共享资源访问的冲突、响应中断。

思考

       在学习流水线的时候,不太明白为什么是最慢的那一个决定流水线的周期,所以我做了一个假设来判断周期,步骤如下:

       我们先假设t2所需时间最长,第一条指令用F表示,第二条指令用S表示,则有:

       ①F执行完A阶段后,S开始执行A阶段,此时历时为t1 秒。

       ②F执行B阶段执行了t1秒后,S等待。F执行完B阶段后,S开始执行B阶段,此时已经历时t1+t2秒。

       ③F执行完C阶段后,S执行了在B阶段执行了t3秒,此时已经历时t1+t2+t3秒。

       ④S执行又执行了(t2-t3)+ t3 = t2秒后,完成整个过程。

       可知,因为流水线是同一时间轴的,S执行完后的时间点减去F执行完后的时间点就是周期,也就是我们得出来的t2。所以说,周期还得看最慢的流水部件。

总结

       计算时间的时候要清楚一点,就是时间轴就同一个,就能看明白计算的过程了。注意两个术语的意思,吞吐率和加速比。
————————————————
版权声明:本文为CSDN博主「琚建飞」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gnd15732625435/article/details/53034354

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gantt(甘特图)与PERT(项目计划评审技术)图,项目关键路径和松弛时间

甘特图也叫做进度管理图。 他是一种简单的水平条形图,它以日历为基准描述项目任务,水平轴表示日历时间线,每一个线条表示一个任务,任务名称垂直的列在左边列中,图中的线条的起点和终点对应水平轴上的时间,…

学习阮一峰Javascript模块化编程,requireJS使用

使用背景NOW: 网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式。 项目需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的…

阮一峰的JavaScript 的 this 原理

一、问题的由来 学懂 JavaScript 语言,一个标志就是理解下面两种写法,可能有不一样的结果。 var obj {foo: function () {} };var foo obj.foo;// 写法一 obj.foo()// 写法二 foo()上面代码中,虽然obj.foo和foo指向同一个函数,…

计算机基础:IP地址,子网掩码,默认网关,DNS服务器

如图各项IP地址、子网掩码、默认网关、DNS服务器分别都代表什么意思 (一)IP地址 IP是32位二进制数据,通常以十进制表示,并以“.”分隔。IP地址是一种逻辑地地址,用来标识网络中一个个主机,IP有唯一性&#…

解决vue的{__ob__: observer}取值问题

vue编码中经常出现获取到的数据是:{__ob__: Observer} 格式的,详细如下 可能导致后续数据操作错误,如何获取其中的数值呢 解决方法如下: 将返回的数据data先转换为JSON字符串形式,然后再从字符串形式转换成JSON格式JS…

软考计算机基础:存储系统

软考计算机存储系统笔记: 存储器分类: 1、按存储位置分为内存和外存; 2、按存储材料分为磁存储(使用磁存储介质)、半导体存储(分为双极型和MOS型,根据数据是否需要刷新可以分为静态SRAM存储器…

vscode统计代码行数,前端开发配置、快捷键使用

1、统计代码行数 使用场景是项目年终统计行数。 实现:在需要统计得文件夹右键“在文件夹中查找“ ,后输入筛选得正则表达式 ^b*[^:b#/].*$ (注意右边小图标都点亮) 这里顺便将自己使用vscode进行前端开发环境配置归纳一下,便于自己以后快速…

vue-cli打包后怎么修改服务器地址实践有效

前言:公司vue项目使用 npm run build 打包生成dist文件部署后,当需要修改服务器端地址时候就又需要重新配置url并打包部署,为简化部署测试工作,想实现通过修改服务器地址的配置文件来实现修改打包后的项目服务器地址。 项目基于vu…

干净高效的搜索引擎

找一个干净好用的搜索引擎,好文转载备忘 为什么不用百度搜索引擎,估计一百个人会有一百个理由。 百度最让人诟病的还是它的竞价排名,其实要赚钱无可厚非,但这吃相……前几天看到知乎上有人发了张百度和谷歌搜索的对比图&#xf…

vue-router区分hash模式和history模式

总结: hash模式是我们在url后面添加一个#xx触发事件。尽管浏览器没有请求服务器,但是页面状态和url已经关联起来了,这就是所谓的前端路由,单页应用的标配。 history模式下浏览器地址不规整(没有#)&#x…

Vue 打包前需修改的配置,解决白屏问题

vue-cli项目和electron-vue项目打包运行都有遇到的白屏问题,下面记录打包前需要确认的配置 第一: config文件夹下的index.js 中的文件中的 assetsPublicPath :‘/’ 改为’./’ 不然的话会是空白页,记住,是build那块。…

electron-vue解决打包错误、无法调用出开发者工具(亲测有效)

错误1: unresolved node modules vue... 或 not found modules..的错误 解决方式:依赖的模块错误,删除node_module文件夹后,尽量用npm install而不是淘宝镜像cnpm安装 错误2: Cannot create symlinks (on Windows hos…

JS中使用bignumber处理高精度小数运算

项目开发中发现精度丢失的问题,如0.10.2 0.30000000000000004的问题 解决方式:引用bignumber.js用于数字精度要求较高的计算。 1、安装或引用: 下载地址:https://github.com/MikeMcl/bignumber.js/releases 或 npm install big…

restful api接口设计

技术由来: 互联网早期,页面请求和并发量不高,且移动端未盛行时对接口要求不高,使用动态页面(jsp)就能满足绝大多数的使用需求。但是随着互联网和移动设备的发展,人们对Web应用的使用需求也增加,传统的动态…

vue-cli安装和使用

主要记录安装vue-cli制定版本和使用,注意vue-cli4创建项目命令和项目结构的改变 检查当前项目的vue-cli版本: vue -V 卸载当前版本: npm uninstall vue-cli -g 安装最新版本: npm install -g vue-cli 安装指定版本: npm in…

Apache 和 Tomcat 服务器的区别

Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置。 Apache是web服务器(静态解析,如HTML)&…

二进制、八进制、十六进制相互转换

一、十进制与二进制之间的转换 1、十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 (具体用法如下图) 2、二…

vue-cli3+与vue-cli2的区别和vue-cli 修改配置

vue-cli3是基于webpack4打造,vue-cli2是基于webpack3vue-cli3的设计原则是“0配置”,移除(隐藏)配置文件build和config等目录vue-cli3提供了vue ui 命令,提供了可视化配置vue-cli3移除了static文件夹,新增了…

electron打包vue-cli4项目的解决方案1(项目实测)

背景: 项目已通过vue-cli4框架开发并运行在nginx服务器上(使用了nginx的反向代理),现需要将该项目转成桌面端应用程序,选择electron来实现。 设想2种解决方案: 1、使用electron-quick-start的loadURL方法…

IP 基础知识“全家桶”,45 张图一套带走!

转载自: https://mp.weixin.qq.com/s/kPjFeefB1Xsbc2bHz_Or1Q 前言 前段时间,有读者希望我写一篇关于 IP 分类地址、子网划分等的文章,他反馈常常混淆,摸不着头脑。 那么,说来就来!而且要盘就盘全一点&am…