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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在线文字识别转换「建议收藏」

    在线文字识别转换「建议收藏」在线文字识别转换http://ocr.wdku.net/conv/index.html

    2022年8月4日
  • Python中sys模块

    sys-系统特定的参数和功能该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。它始终可用。sys.argv传递给Python脚本的命令行参数列表。argv[0]是脚本名称(依赖于操作系统,无论这是否是完整路径名)。如果使用-c解释器的命令行选项执行命令,argv[0]则将其设置为字符串’-c’。如果没有脚本名称传递给Python解释器,argv[0]则为空字符串…

    2022年4月5日
  • opengl和directx渲染有什么区别(directx怎么打开)

    原文地址:http://tieba.baidu.com/p/2018728460?see_lz=1OpenGL只是图形函数库。 DirectX包含图形,声音,输入,网络等模块。 单就图形而论,DirectX的图形库性能不如OpenGL OpenGL稳定,可跨平台使用。但OpenGL多需要显卡支持. ———————————-…

    2022年4月13日
  • RIP路由

    RIP路由

    2021年8月31日
  • 配置springboot项目使用外部tomcat

    配置springboot项目使用外部tomcat在pom文件中添加依赖<!–使用自带的tomcat–><dependency><groupId>org.springframework.boot</

    2022年8月16日
  • SSRF漏洞分析与实践

    SSRF漏洞分析与实践警告请勿使用本文提到的内容违反法律。本文不提供任何担保目录警告一、漏洞简介二、漏洞产生的原因三、SSRF的类型四、利用SSRF可以实现的攻击五、实践漏洞学习(一)简单漏洞验证(二)通过dict协议获取服务器端口运行的服务。(三)通过file协议访问计算机中的任意文件(四)了解sftp及tftp协议在SSRF中的作用六、SSRF与CSRF的区别七、漏洞修复警告一、漏洞简介SSRF(Server-SideRequest…

    2022年6月25日

发表回复

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

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