从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

    • 网课-计算机组成原理(北大-陆俊林)

      • 概述-计算机组成原理(北大-陆俊林)
      • 第1周-计算机组成章节视频简介
      • 101-电子计算机的兴起
      • 102-冯·诺依曼结构的要点
      • 103-冯·诺依曼结构的小故事
      • 104-计算机结构的简化模型
      • 105-计算机执行指令的过程
      • 106-计算机输入和输出
      • 107-冯诺依曼结构和具体实现
      • 201-设计自己的计算机
      • 202-x86 体系结构
      • 203-x86 指令简介
      • 204-复杂的 x86 指令举例
      • 205-MIPS 体系结构
      • 206-MIPS 指令简介
      • 301-算术运算和逻辑运算
      • 302-门电路的基本原理
      • 303-寄存器的基本原理
      • 304-逻辑运算的实现
      • 305-加法和减法的实现
      • 306-加法器的优化
      • 401-乘法的运算过程
      • 402-乘法器的实现
      • 403-乘法器的优化 1
      • 404-乘法器的优化 2
      • 405-除法的运算过程
      • 406-除法器的实现
      • 407-除法器的优化
      • 501-处理器的设计步骤
      • 502-数据通路的建立
      • 503-运算指令的控制信号
      • 504-访存指令的控制信号
      • 505-分支指令的控制信号
      • 506-控制信号的集成
      • 601-流水线的基本原理
      • 602-流水线的优化
      • 603-超标量流水线
        • 实际的例子
      • 604-流水线的冒险
      • 605-数据冒险的处理
      • 606-控制冒险的处理
      • 701-存储层次结构概况
      • 702-DRAM 和 SRAM
      • 703-主存的工作原理
      • 704-主存技术的发展
      • 705-高速缓存的工作原理
      • 706-高速缓存的组织结构
      • 707-存储容量的计算
      • 801-中断和异常的来源
      • 802-中断向量表的结构
      • 803-中断向量表的发展
      • 804-中断的处理过程
      • 805-内部中断分类说明
      • 806-基于中断的功能调用
      • 901-输入输出接口的基本功能
      • 902-输入输出接口的编址方式
      • 903-输入输出的控制方式
      • 904-中断控制方式
      • 905-外部中断的处理过程
      • 906-直接存储器访问方式
  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • 数据库

  • 计算机基础
  • 计算机组成原理
  • 网课-计算机组成原理(北大-陆俊林)
2023-06-13
目录

603-超标量流水线

# 603-超标量流水线

超标量流水线在现代的处理器当中得到了广泛的应用,也就是这种技术给我们带来了出色的处理器性能。 那究竟什么才是超标量流水线,它又是如何工作的呢? 我们这一节将一起探讨这个问题。

‍

这个是我们之前已经构建好的一条流水线,但是如果我们觉得它的吞吐率还不够高, 其中一个改进的方向就是加深流水线, 而与之相对另一个改进的方向就是拓宽流水线,而拓宽流水线的这个方案我们就称为超标量。

在现在通常来说超标量的结构是只有两条或者有两条以上可以并行工作的流水线, 那好就这个厨房的例子,现在为了满足更多客人的需求, 我们就需要把这条做菜的流水线进行拓宽, 我们从左往右来看首先我把这个洗菜的池子扩大一倍,这样就可以同时洗两道菜的原料了。 那与之相匹配的后面的各个环节都得加倍, 这样我们就有了两条可以并行工作的流水线,这就是一条超标量流水线。 在处理器设计当中我们也经常简称为超标量。

那么与超标量流水线相对,以前的单条流水线就可以被称为标量流水线, 那采用了超标量结构的处理器,我们也常称之为超标量处理器。

​

‍

那么就结合这个例子简单的来看一看超标量流水线是如何工作的。 既然我们这个洗菜的池子扩大了一倍,那么同时就可以进行两道菜的操作,那么当 一分钟过去之后,洗菜这个环节就会将这两份菜的原料分别送到切菜 1 这个环节的两位操作人员手中, 而与此同时第三道菜和第四道菜则会进入洗菜环节。 这样在每一个环节都有两道菜菜在同时的并行向前, 那到了五分钟的时候就可以同时完成两道菜。

而对于处理器,这也常被称为双发射的结构, 那如果照着这个方式再扩展一条流水线就变成三发射。 再扩大一条就会变成四发射,这就是超标量流水线的基本工作原理。

​

‍

# 实际的例子

那我们再来看一些实际的例子,奔腾是第一款采用超标量技术的 x86CPU。 这就是奔腾的流水线结构,它是一个双发射的五级流水线, 这两条流水线分别被命名为 U 流水和 V 流水, 它们共用取指和译码的部件,但是有自己独立的地址生成逻辑,ALU 以及数据高速缓存的接口,那在一个时钟周期内可以同时发送两条指令,分别到 U 流水和 V 流水。

​

‍

‍

当然超标量技术并不是到这个时候才诞生的, 而是在很多年前就在计算机当中获得了应用。 这是历史上第一台超级计算机 CDC6600, 那么在这台计算机当中,有十个并行的功能部件,因此也被认为是最早采用了超标量技术的计算机。 不过这些功能部件内部并没有采用流水线,所以从这里我们可以看出超标量技术和流水线技术实际上是相互独立的, 只不过在现在采用了超标量技术的 CPU 也都是使用流水线的技术。

​

那虽然 CDC6600 没有采用流水线,但它的下一代产品 CDC7600 就在这些并行的功能部件内实现了流水线的技术。

‍

‍

那我们再回到现在,ARM Cortex-A9 的流水线结构。 它每个时钟周期可以发射四条指令, 根据指令的不同,总共会经过八到十一级流水线。 与奔腾类似的是在流水线的前端比如说取指,译码并没有分成多条流水线而是采用统一的部件。 当然我们要知道这些部件虽然看上去是一个,但它实际上比标量流水线要大得多, 比如说取指部件至少一次要能取来四条指令甚至更多, 而译码部件一次也至少应该完成四条指令的译码,

而到了流水线的后端, 才会从结构表示上体现出多条并行流水线的形态。

​

‍

‍

然后我们再来看 Core i7 的超标量流水线。 这个流水线就更为复杂,这个是指令高度缓存,也就相当于我们在流水线原理当中提到的指令存储器, 我们可以看到每个周期从指令存储器当中会取回 128 个比特,也就是十六个字节, 因为 x86 指令长度是不固定的,所以首先要经过一个指令长度的译码器,分解出到底哪几个字节是一条指令。

那么在这一点上 RISK 指令系统就体现出了明显的优势, 它每条指令都是定长的,不用额外进行这样的识别工作。 那么还有一点值得一提的是在译码器当中通过硬件会将 x86 的指令转换成更为简单的指令, 这些指令被称为 V 操作,那从这里可以看出有三个简单的译码器, 用于对那些比较简单的 x86 指令进行转换,每条指令对应一个 V 操作。

而那些非常复杂的指令则会通过这个复杂的译码器转换成多条 V 操作, 而这些 V 操作都是类似于 risk 指令的格式, 这样在它流水器的后半部分看到的都是 risk 格式的简单指令了。

那这张图还只是流水线的前半部分, 我们再画出后半部分。在这里我们也可以看出多条并行的流水线, 而且因为在这个流水线当中运行的是 V 操作,都是采用了 risk 的编码风格, 所以这里也可以充分运用大量面向 risk 处理器研发出的高级流水线的技术。

这也就是为什么我们现在经常说 x86 虽然是一个 CISCO 的指令系统, 但它实际上是用 risk 的方式去实现的。 那这个 CPU 就是一个四发射十六级流水的超标量流水线,

​

‍

‍

那我们再来比较一下超标量流水线和之前的标量流水线, 最开始从单周期处理器到流水线处理器主要考虑的是时间并行性上的优化, 通过对现有硬件进行切分,只是增加了少量的流水线寄存器以及部分的控制信号的改动,让原本串行执行的指令在一定程度上并行起来,

而从标量流水线到超标量流水线则是主要考虑了空间并行性上的优化, 这是让不同的指令同时在不同的流水线上运行, 那么简单的看来每增加一个发射数就需要增加一条流水线的硬件资源。

​

‍

‍

我们最后来看一看超标量流水线与多核的关系。 从原理上讲它们都是在空间并行性方面寻求的优化, 我们还是看一个实际的例子。 这就是 Core i7,也是我们现在熟知的多核超标量处理器。那么来看看它内部的结构。 首先我们来看一个概念叫做处理器核。这部分实际上就包含了我们之前介绍的那些数据通路控制信号等等。

当然还需要包含指令和数据的高度缓存对应了我们原理结构当中的指令存储器和数据存储器。 那为了提高性能现在的处理器当中一般还配备了二级的高速缓存。 这些部件的关系非常紧密,我们通常也就把这一部分称为一个处理器核。 那么刚才看到那个四发射十六级流水线的结构图就是在只这么一个处理器核内部的结构,那么可以说这一个处理器核就是一个超标量流水线的处理器核, 而在单核的时代这个部分结构就单独制造出了一个芯片,就是以前的单核 CPU, 那现在我们把这样同样的结构复制多份,然后再加上一些共享的存储部件 就构成了一个多核的 CPU,这里面有四个核,那就是一个四核的 CPU, 每一个核内部都是一个超标量流水线的结构, 这就是我们现在通常说的多核 CPU 和超标量流水线之间的关系。

​

‍

‍

现在我们已经从整体框层面了解了流水线处理器的发展演变的过程, 而且也知道了现代最先进流水线处理器的大体结构。 但是仅仅了解这些是不够的, 流水线的方式引入处理器之后它自身也带来了一些新的问题, 我们必须了解并解决这些问题, 这是我们下一节将要探讨的主题。

上次更新: 2024/9/29 12:08:10
602-流水线的优化
604-流水线的冒险

← 602-流水线的优化 604-流水线的冒险→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式