CPU流水线技术演进「建议收藏」

CPU流水线技术演进「建议收藏」一.三级线性流水线每个流水级的结构是:逻辑电路+寄存器我们可以将流水线往下细分,使得各个流水级足够小(CPU执行时间少),就可以通过提高系统时钟频率来提高CPU的处理速度。二.多级线性流水线(这里以5级为例)注意:我们把5级以上的流水线称为超流水线结构。三.muti-多级线性流水线(这里以5级为例)四.多级非线性流水线(乱序执行部件)五.超线程处理器多级非线性流水线(虚拟处理器共用乱序执行部件)拥有超线程的处理器将两个虚拟的处理器暴露给共享的乱..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一. 线性流水线

流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。

CPU流水线技术演进「建议收藏」

每个流水级的结构是:逻辑电路+寄存器 

CPU流水线技术演进「建议收藏」

 我们可以将流水线往下细分,使得各个流水级足够小(CPU执行时间少),就可以通过提高系统时钟频率来提高CPU的处理速度。

二.线性超流水线(这里以5级为例)

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

一般而言,CPU执行一条指令需要经过以下阶段:取指->译码->地址生成->取操作数->执行->写回,每个阶段都要消耗一个时钟周期,同时每个阶段的计算结果在周期结束以前都要发送到阶段之间的锁存器上,以供下一个阶段使用。

CPU流水线技术演进「建议收藏」

注意: 我们把5级以上的流水线称为超流水线结构。

三.muti-线性超流水线(这里以5级为例)——超标量

  超标量(superscalar)是指在CPU中有一条以上的流水线,并且每时钟周期内可以完成一条以上的指令,这种设计就叫超标量技术。 其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。

CPU流水线技术演进「建议收藏」

四.非线性超流水线(加入乱序执行部件)

CPU流水线技术演进「建议收藏」

五.超线程非线性超流水线(虚拟处理器共用乱序执行部件)

CPU流水线技术演进「建议收藏」

拥有超线程的处理器将两个虚拟的处理器暴露给共享的乱序执行部件。它们共享一个重排序缓存和乱序执行部件,让操作系统认为它们是两个独立的处理器。

六.场景演绎

这一切看上去有点令人感到困惑,那么我们举一个例子来让这一切变得清晰起来。

从应用程序的角度来看,我们仍然是运行在指令流水线上,就像老的 8086 处理器那样。处理器就是一个黑盒子。黑盒子会处理指令指针指向的指令,当处理完之后,会在内存里找到处理的结果。

但是从指令本身的角度来讲,这个过程可谓历经沧桑。我们下面介绍对于现今的处理器(大约在 2008-2013 年之间),一条指令在其内部的过程。

首先,你是一条指令,你所属的程序正在运行。

你一直在耐心的等待指令指针会指向自己,等待被 CPU 运行。当指令指针距离你还有 4KB 远的时候(这大约是 1500 条指令),你被 CPU 从内存取到指令缓存中。虽然从内存加载进入指令缓存需要一段时间,但是现在距离你被执行的时刻还很远,你有足够的时间。这个预取的过程属于流水线的第一级。

当指令指针离你越来越近,距离你还有 24 条指令的时候,你和你旁边的 5 个指令会被放到指令队列里面。

这个处理器有 4 个译码器,可以容纳一个复杂指令和最多三个简单指令。你碰巧是一条复杂指令,通过译码,你被翻译成 4 个微指令。

译码的过程可以划分为多步。译码过程中的一步是检查你需要的数据和猜测你可能会产生一个地址跳转。译码器一旦检测到需要的额外数据,不需要让你知道,这个数据就开始从内存加载到数据缓存中了。

你的四个微指令到达寄存器重命名表。你告诉它你需要读哪个内存地址(比如说 fs:[eax+18h]),然后寄存器重命名表将这个地址转换为临时地址供微指令使用。地址转化完成后,你的微指令将进入重排序缓存(Reorder Buffer, ROB)并记录指令次序。接着第一时间进入保留站(Reservation Station, RS)。

保留站用于存储已经准备就绪可以执行的指令。你的第三条微指令被立即选中并送往端口5,这个端口直接执行运算。但是你并不知道为什么它会被首先选中,无论如何,它确实被执行了。几个时钟周期之后你的第一条微指令前往端口2,该端口是读单元(Load Address execution unit)。剩余的微指令一直等待,同时各个端口正在收集不同的微指令。他们都在等待端口 2 将数据从缓存和内存中加载进来并放在临时存储空间内。

他们等了很久……

相当久的时间……

不过在他们等待第一条微指令返回数据的时候,又有其他的新指令又进来。好在处理器知道如何让这些指令乱序执行(即后到达保留站的微指令被优先执行)。

当第一条微指令返回了数据,剩余的两条微指令被立即送往执行端口 0 和1。现在这 4 条微指令都已经运行,最终它们会返回保留站。

这些微指令返回后交出他们的“票”并给出各自的临时地址。通过这些地址,你作为一个完整的指令,将他们合并。最后 CPU 将结果交给你并使你退出

当你到达标有“退出”的门的时候,你会发现这里要排一个队列。你进入后发现你刚好站在你前面进来指令的后面,即使执行中的顺序可能已经不同,但你们退出的顺序继续保持一致。看来乱序执行部件真正知道自己做了什么。

每条指令最终离开 CPU,每次一条指令,就和指令指针指向的顺序一样!

参考文章:

转一篇难得的好文章-CPU流水线的探秘之旅_mb5fe94b3e552d9的技术博客_51CTO博客CPU流水线技术演进「建议收藏」https://blog.51cto.com/u_15069472/4701934跟涛哥一起学习嵌入式 31:深入浅出CPU流水线工作原理 – 知乎 (zhihu.com)CPU流水线技术演进「建议收藏」https://zhuanlan.zhihu.com/p/132352768

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171214.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HashMap的实现原理及hash冲突(碰撞)解决方法[通俗易懂]

    HashMap的实现原理及hash冲突(碰撞)解决方法[通俗易懂]HashMap采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行map.put(String,Obect)方法时,系统将调用String的hashCode()方法得到其hashCode值——每个Java对象都有hashCode()方法,都可通过该方法获得它的hashCode值。得到这个对象的hashCode值之后,系统会根据该hashCode值来…

    2022年10月20日
    2
  • 四旋翼飞行器的飞控实现「建议收藏」

    尝试制作这个四旋翼飞控的过程,感触颇多,整理了思绪之后,把重要的点一一记下来;这个飞控是基于STM32,整合了MPU6050,即陀螺仪和重力加速计,但没有融合电子罗盘; 另外,四旋翼飞行器的运动方式请百度百科,不太复杂,具体不再赘述; 这是飞控程序的控制流程(一个执行周期):   比较重要的地方:1.i2c通信方式;

    2022年4月10日
    99
  • Python 图像处理_图像处理的一般步骤

    Python 图像处理_图像处理的一般步骤Python图像处理基础对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Py

    2022年10月14日
    2
  • YOLO3训练自己数据(超详细步骤)

    YOLO3训练自己数据(超详细步骤)须知:对于占比较小的目标检测效果不好,虽然每个格子可以预测多个boundingbox,但是最终只选择IOU(预测的矩形框和真实目标的交集与并集之比)最高的boundingbox作为物体检测输出,即每个格子最多只预测出一个物体。当一个格子中包含多个物体时,如鸟群等,却只能检测出其中一个。另外,YOLO对车牌识别的效果一般。一:下载YOLO3项目gitclonehttps://githu…

    2022年6月25日
    27
  • java 随机数算法_Java随机数算法原理与实现方法实例详解

    java 随机数算法_Java随机数算法原理与实现方法实例详解本文实例讲述了Java随机数算法。分享给大家供大家参考,具体如下:软件实现的算法都是伪随机算法,随机种子一般是系统时间在数论中,线性同余方程是最基本的同余方程,“线性”表示方程的未知数次数是一次,即形如:ax≡b(modn)的方程。此方程有解当且仅当b能够被a与n的最大公约数整除(记作gcd(a,n)|b)。这时,如果x0是方程的一个解,那么所有的解可以表示为:{x0+k…

    2022年7月26日
    12
  • ftp上传工具如何下载和使用像详细教程

    ftp上传工具如何下载和使用像详细教程在学习网站搭建的过程中,我们必定会用到ftp上传工具,那么ftp工具是什么呢,我们该如何下载和使用呢?FTP(FileTransferProtocol),简称是文件传输的协议,我们可以用这个协议在互联网上做文件的双向传输,让我们用自己的计算机,可以链接到世界各地具有文件传输协议的ftp服务器进行连接,从而可以访问,传输下载大量的共享文件。同样我们可以从网站空间服务器中下载拷贝需要的文件到自己的…

    2022年5月22日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号