【计算机体系结构】什么是流水线?

这篇具有很好参考价值的文章主要介绍了【计算机体系结构】什么是流水线?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

目录

参考资料

前言

流水线

提高流水线效率的技术

超级流水线

超标量

分支预测

乱序执行


参考资料

(21条消息) 流水线、超流水线、超标量(superscalar)技术对比(转)_沉迷科研刘昊然的博客-CSDN博客

图解|30张图,带你深入理解CPU流水线和分支预测的那些事儿 - 知乎 (zhihu.com)

计算机体系结构基础(第3版)-胡伟武等-微信读书 (qq.com)

前言

        我们从某CPU官网可以看到某芯片的简介:

四发射超标量,计算机体系结构,java,开发语言,硬件工程,c语言

        上图中的乱序四发射超标量流水线是什么意思呢?这些都是CPU指令执行中的名词,本文一次性讲清楚。

流水线

       流水线这个词相信大家都不陌生了,很好理解,把一个耗时较长的操作,分成一段一段的小操作,两个不同大操作下的小操作可以并行执行,这样就比一个完整操作执行完再做下一个操作的耗时更小,操作效率更高。比如说,把洗车分成喷水、打泡沫、刷洗、擦拭、吹干几个工站,在第一辆车喷完水进入打泡沫的工站后,下一辆车就可以进来喷水了,而不用等前一辆全部洗完再进来,这样效率大大提升,赚钱更多了。

        计算机执行指令一般包含以下过程:从存储器取指令并对取回的指令进行译码,从存储器或寄存器读取指令执行需要的操作数,执行指令,把执行结果写回存储器或寄存器。上述过程称为一个指令周期。计算机不断重复指令周期直到完成程序的执行。以上指令执行的各个小步骤就是流水线操作,常规的5级流水线如下:

1、取指令IF

        取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。

2、指令译码ID

        取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。

        在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。

3、指令执行EX

        在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。

        此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。

4、访存取数阶段MEM

        根据指令需要,有可能要访问主存读取操作数,这样就进入了访存取数(Memory,MEM)阶段,此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。

5、结果回写WB

        作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据写回到某种存储形式。

        为了提升效率,通过流水线操作将顺序执行的指令操作并行起来执行,如下图:

四发射超标量,计算机体系结构,java,开发语言,硬件工程,c语言

        总结起来CPU流水线技术就是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令,属于CPU硬件电路层面的并发。

        总结起来CPU流水线技术就是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令,属于CPU硬件电路层面的并发。

提高流水线效率的技术

        在标准流水线基础上,还想再继续提高操作效率该怎么办呢?

        常见的提高流水线效率的技术包括超级流水线、转移预测技术、乱序执行技术、超标量(又称为多发射)技术等,技术很多,这里只是简单介绍,后面争取专门写几篇文章。

超级流水线

        超级流水线以增加流水线级数的方法来缩短机器周期,相同的时间内超级流水线执行了更多的机器指令。采用简单指令以加快执行速度是所有流水线的共同特点,但超级流水线配置了多个功能部件和指令译码电路,采用多条流水线并行处理,还有多个寄存器端口和总线,可以同时执行多个操作,因此比普通流水线执行的更快,在一个机器周期内可以流出多条指令。

        一般而言,CPU执行一条指令需要经过以下阶段:取指->译码->地址生成->取操作数->执行->写回,每个阶段都要消耗一个时钟周期,同时每个阶段的计算结果在周期结束以前都要发送到阶段之间的锁存器上,以供下一个阶段使用。所以,每个时钟周期所消耗的时间就是由以上几个阶段中的耗时最长的那个决定的。假设耗时最长的阶段耗时为s秒,那么时钟频率就只能设计到1/s赫兹(这里不考虑阶段间信号传递的时间和锁存器的反应时间)。

        那么,要提高时钟频率,一种可能的方法就是减小每个阶段的时间消耗。其中一种最简单的办法,就是将每个阶段再进行细分成更小的步骤,同样是细分后的每个阶段,单个阶段的运算量小了,单位耗时s也就减少,这样实际上就是提高了时钟频率。这种将标准流水线细分的技术,就是超级流水线技术。当然,流水线和超级流 水线之间并没有很明显的区别。这样的技术,虽然提高了CPU的主频,但是也带来了很大的副作用:

        首先,假设不使用流水线情况下,某指令的执行时间为s,指令执行结果保存在寄存器中的时间为d,将其改为N级流水线,由于细分后的每一个阶段都要在其后使用寄存器保存结果,因此将一个阶段细分为N个子阶段并不能让单位时间减少到s/N, 而是s/N + d, 其中d为寄存器的保存结果时间。这实际上就是增加了多余的时间消耗。

        其次,随着流水线级数的加深,一旦分支预测出现错误,会导致CPU中大量的指令作废,这样的消耗是十分巨大的。

        以上原因,也就是什么Pentium IV具有31级的流水线,指令的执行效率却赶不上只有14级流水线的Pentium M,高流水线级数的处理器是追求更高的主频,以获取更高的吞吐率和性能,而低流水线级数的处理器的功耗更低,提高能效比。

超标量

        超标量技术。初看的时候容易把超标量和超级流水线搞混。工艺技术的发展使得在20世纪80年代后期出现了超标量处理器。超标量结构允许指令流水线的每一阶段同时处理多条指令,换句话说,可以理解为同时有多条流水线在处理指令。其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。类似上文提到的5级单流水线被称为标量流水技术,而CPU中有多条并行执行的流水线技术称为超标量流水技术。举个简单的例子,一个洗车店,如果喷水、打泡沫、刷洗、擦拭、吹干这几个工站都是只有一个,那就是标量流水,如果这些工站都各有一个以上,那就是超标量流水。

        在单流水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能发射(issue)或退休(retire)一条指令。超级标量结构的cpu支持指令级并行,每个周期可以发射多条指令(2-4条居多,文章开头列的某CPU简介中的4发射指的就是每个周期可以发射4条指令),从而提高cpu处理速度。超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件,在程序运行期间,由硬件(通常是状态记录部件和调度部件)来完成指令调度。超级标量机主要是借助硬件资源重复(例如有两套译码器、ALU、访存部件等)来实现空间的并行操作。

分支预测

        转移预测技术,又叫分支预测。先解释一下为什么要做分支预测。假设有如下一段程序要执行:

        int a = 某输入值;

        int b = 某输入值;

        if(a>3)

               int c = b + a;

        else

                int c = b - a;

        上面涉及到条件判断带来的转移,上面的各条语句虽然名义上是顺序执行,但是CPU是流水线执行指令操作的,一些步骤是并行走,同时某些步骤之间有先后依赖关系,加上条件的判断,就会发生指令的转移,一旦发生指令转移,就要排空后面的流水线,且要从转移的目标地址重新取指令,这就是转移开销。

        转移指令或分支指令会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。这显然也流水线处理的初衷是相悖的,为了解决这一问题,就需要分支预测技术。

        冯·诺依曼结构指令驱动执行的特点,使转移指令成为提高流水线效率的瓶颈。典型应用程序平均每5~10条指令中就有一条转移指令,而转移指令的后续指令需要等待转移指令执行结果确定后才能取指,导致转移指令和后续指令之间不能重叠执行,降低了流水线效率。随着主频的提高,现代处理器流水线普遍在10~20级之间,由于转移指令引起的流水线阻塞成为提高指令流水线效率的重要瓶颈。

        转移预测技术可以消除转移指令引起的指令流水线阻塞。转移预测器根据当前转移指令或其他转移指令的历史行为,在转移指令的取指或译码阶段预测该转移指令的跳转方向和目标地址并进行后续指令的取指。转移指令执行后,根据已经确定的跳转方向和目标地址对预测结果进行修正。如果发生转移预测错误,还需要取消指令流水线中的后续指令。为了提高预测精度并降低预测错误时的流水线开销,现代高性能处理器采用了复杂的转移预测器。

        例如,可以在取指部件中设置一位标志记录上一条转移指令的跳转方向,碰到转移指令,不用等该转移指令执行结果,就根据该标志猜测跳转方向进行取指。对于C语言中的“for(i=0,i<N,i++)”类的循环,这种简单的转移猜测就可以达到(N-1)/(N+1)的准确度,当N很大时准确度很高。

乱序执行

        乱序执行技术。如果指令i是条长延迟指令,如除法指令或Cache不命中的访存指令,那么在顺序指令流水线中指令i后面的指令需要在流水线中等待很长时间。乱序执行技术通过指令动态调度允许指令i后面的源操作数准备好的指令越过指令i执行(需要使用指令i的运算结果的指令由于源操作数没有准备好,不会越过指令i执行),以提高指令流水线效率。为此,在指令译码之后的读寄存器阶段,应判断指令需要的操作数是否准备好。如果操作数已经准备好,就进入执行阶段;如果操作数没有准备好,就进入称为保留站或者发射队列的队列中等待,直到操作数准备好后再进入执行阶段。为了保证执行结果符合程序规定的要求,乱序执行的指令需要有序结束。为此,执行完的指令均进入一个称为重排序缓冲(Re-Order Buffer,简称ROB)的队列,并把执行结果临时写入重命名寄存器。ROB根据指令进入流水线的次序,有序提交指令的执行结果到目标寄存器或存储器。CDC6600和IBM 360/91分别使用记分板和保留站最早实现了指令的动态调度。

        就像保留站和重排序缓冲用来临时存储指令以使指令在流水线中流动更加通畅,重命名寄存器用来临时存储数据以使数据在流水线流动更加通畅。保留站、重排序缓冲、重命名寄存器都是微结构中的数据结构,程序员无法用指令来访问,是结构设计人员为了提高流水线效率而用来临时存储指令和数据的。其中,保留站把指令从有序变为无序以提高执行效率,重排序缓存把指令从无序重新变为有序以保证正确性,重命名寄存器则在乱序执行过程中临时存储数据。重命名寄存器与指令可以访问的结构寄存器(如通用寄存器、浮点寄存器)相对应。乱序执行流水线把指令执行结果写入重命名寄存器而不是结构寄存器,以避免破坏结构寄存器的内容,到顺序提交阶段再把重命名寄存器内容写入结构寄存器。两组执行不同运算但使用同一结构寄存器的指令可以使用不同的重命名寄存器,从而避免该结构寄存器成为串行化瓶颈,实现并行执行。文章来源地址https://www.toymoban.com/news/detail-771675.html

到了这里,关于【计算机体系结构】什么是流水线?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Linux]计算机软硬体系结构

    冯诺依曼体系结构的组成 现代计算机大多都遵守冯诺依曼体系结构 冯诺依曼体系结构的示意图如下: 冯诺依曼体系结构计算机由五大部件组成: 输入设备 输出设备 存储器(内存) 运算器 控制器 注:如今大多的计算机都将运算器和控制器集成到一起,被称作中央处理器,简称

    2024年02月13日
    浏览(34)
  • 【Linux】—— 详解计算机体系结构

    前言: 在之前,我们已经对Linux环境开发的基本工具进行了详细的学习。接下来,我们将要学习的第一大块便是关于计算机体系结构的知识!! 目录 前言 (一)冯诺依曼体系结构 基本介绍 木桶原理 数据流动过程 (二)操作系统 1、概念 2、感性理解 总结 在我写的《操作系

    2024年02月09日
    浏览(35)
  • 计算机体系结构(复习资料)

    1.存储程序计算机 (冯诺依曼):4部分                 运算器(用于完成数值运算)                 存储器(用于存储程序和数据)                 输入输出设备(用于完成计算机与外部信息交互)                 控制器(根据程序形成控

    2024年02月02日
    浏览(41)
  • 第一章、计算机组成与体系结构

    第一节.数据的表示   二进制转十进制:权值相加。即一个二进制数为1010.1,转为十进制为: $$ 小数点左边从0开始幂,小数点右边就是-1   十六进制转十进制:同样的,权值相加。即一个十六进制为100121,转为十进制为: $$ 十进制转二进制:整数位用短除法,除二取余,直到

    2024年02月03日
    浏览(32)
  • 【计算机组成原理与体系结构】指令系统

    目录 一、指令概述 二、指令分类 三、扩展操作码 四、指令寻址 五、数据寻址 六、x86汇编指令 计算机指令 :指示计算机硬件进行某种操作的命令 机器指令 :使用二进制编码来表示的计算机指令 能被计算机硬件系统识别并执行的特殊的0/1代码串(机器码) 指定了计算机硬

    2024年02月08日
    浏览(47)
  • 计算机网络第一章——计算机体系结构(上)

    提示:剑未佩妥,出门已是江湖;酒尚余温,入口不识乾坤,愿历尽千帆,归来仍是少年。 电信网络就是通过电话线连接起来的一个网络,有线电视网络通过电缆或者光缆将已经录制好的电视节目发给千家万户,计算机网络是通过各个结点,这个结点包括终端的电脑,手机,

    2024年02月06日
    浏览(47)
  • 【计算机组成原理与体系结构】控制器

    目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、时序控制 CPU的功能: 指令控制 :完成取指令、分析指令和执行指令的操作,即程序的顺序控制。 操作控制 :一条指令的功能往往是由若干操作信号的组合来实现的,CPU管理并产生由内存取出的每条指

    2024年02月08日
    浏览(32)
  • 【计算机体系结构】Cache性能分析实验报告

    原文档下载: https://download.csdn.net/download/weixin_56213139/87384692 一、 实验目的 (1)加深对Cache基本概念、基本组织结构以及工作原理的理解。 (2)掌握Cache容量、相关度、块大小对Cache性能的影响 (3)掌握降低Cache不命中率的各种方法以及它们对提高Cache性能的好处 (4)理解

    2024年02月03日
    浏览(37)
  • 中级软件设计师备考---计算机组成与体系结构1

    对于n位二进制数,原码、反码和补码的表示范围如下: 原码:用最高位表示符号位,0表示正数,1表示负数。n位二进制数的原码表示范围为:-(2 n-1 -1) ~ 2 n-1 -1。 反码:正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。n位二进制数的反码表示范围

    2023年04月09日
    浏览(43)
  • 中级软件设计师备考---计算机组成与体系结构3

    计算题 概念题 计算可靠度 码距:是指两个码字之间的不同位数。例如,1010和1111之间的码距是2,因为它们在第二位和第三位上不同。在信息传输中,码距越大,就越容易检测和纠正错误。 在一个码组内为了检测e个误码,要求最小码距d应满足:d=e+1 在一个码组内为了纠正

    2023年04月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包