The Front End

Intel NetBurst微架构前端有两个主要部件组成:

  • 取指/译码单元
  • 执行跟踪高速缓存(简称跟踪缓存Trace Cache,或TC)

前端的基本工作如下:

  • 预取有可能执行到的IA32指令
  • 读取还没有预取的指令(例如,分支预测失败后的取指操作)
  • 译码指令(翻译成微指令)
  • 为复杂指令和特殊用途代码产生微码(todo: microop与microcode是不是同一个意思?)
  • 将微指令发送到跟踪缓存中
  • 使用先进的算法进行分支预测。

Intel NetBurst的微架构前端在设计时就考虑了高速流水线化的处理器常遇到的一些问题,下面这两个问题是导致流水线迟滞的主要因素:

  • 从分支目标地指出取指并译码耗费的时间
  • 分支目标地址位于缓存行中部,耗费了译码器的带宽。

执行跟踪高速缓存通过缓存译码后的IA32指令(即微指令)来解决上述问题。IA32指令由一个(指令)翻译引擎进行取指与译码操作。翻译引擎将译码后的微指令组合成微指令序列块,被称为“跟踪”,然后存储在跟踪高速缓存中。该缓存按照程序指令流路径存储这些微指令,代码中分支的结果被集成到同一个缓存行(指Trace Cache)中。这将增加来自于TC的指令流,而且更好的利用整体缓存存储空间,因为缓存不再需要存储未采纳分支且不会执行的指令。每个时钟周期,跟踪缓存可以发送3条微指令到执行核。

执行跟踪缓存和翻译引擎有一个协作的分支预测部件,可以根据指令的线性地址预测分支目标。预测的分支目标会被尽快的读取。如果分支目标已经缓存在跟踪缓存中,可以直接发送到执行核;否则就只能从各级存储器依次请求读取。翻译引擎的分支预测信息可以用了辅助形成最可能执行的路径的“跟踪”。

The Out-of-order Core

执行核的乱序执行微指令的能力是实现指令并行性的关键因素。这是特性使得当某条指令由于等待执行资源无法开始执行时,代码中后续的指令如果具备执行条件,则可以通过指令重排序机制开始执行。处理器利用若干个缓冲区实现流畅地微指令流。这意味当处理器指令流水线的某部分出于某种原因产生迟滞时,通过其他的可以并行执行的操作(例如在核中),或者通过执行先前已经缓存在某个缓冲区(例如,在前端)中的微指令,都可以覆盖这个延迟。

本节中提及的迟滞必须在上下文中理解。执行核被设计为便于并行执行,每个时钟周期内,它可以分发最多达6条微指令。注意,每个周期6条微指令其实已经超过了跟踪缓存和退役单元退役微指令的带宽了。执行核中更高的带宽允许超过3条微指令的峰值爆发,以及通过更灵活地发射微指令到不同的执行端口,从而获得更高的指令发射速度。

大多数的执行单元可以在每个时钟周期开始执行一条新的微指令,这样每条流水线在同一时间可以容纳多条微指令。一些算术逻辑指令(在ALU单元中处理)可以在每个周期内执行2条,许多浮点指令可以在每两个周期开始1条。小结一下就是,只要微指令的操作数和执行资源可用,就可以乱序地开始执行。

Retirement

退役部件的主要功能是从执行核接收微指令的执行结果,以及根据执行结果,按照原始程序设计顺序,正确地更新处理器架构状态。为了得到语义正确的执行结果,IA32指令在退役之前必须将执行结果按照原始程序设计顺序进行提交。当指令退役时,有可能引发处理器异常(例如,更新内存但是遇到缺页)。因此,异常不能预测式(即乱序)地发生,它们必须按照正确的顺序发生,这样在异常处理之后,机器才可以正确地重启指令(例如,继续更新内存)。

当一条微指令完成并将结果写入到目标之后,它就退役了。在每个时钟周期内,最多可以有3条微指令退役。重排序缓冲区(ROB,即以前的指令池)在处理器中用于缓存已完成微指令,按顺序更新处理器架构状态(如前所述),管理异常处理的排序。

退役部件的另一个主要功能是对分支指令进行跟踪,将分支目标信息发送到分支目标缓冲区中,用于更新分支目标的历史信息。图1-3演示了Intel NetBurst微架构中最常执行的路径:一个与多级缓存和系统总线交互的执行环。

接下来的章节会详细的讲解前端和执行核的操作细节。关于Intel NetBurst微架构的细节信息为理解相关的优化技术以及使用指令执行延迟数据提供了必要的背景知识。

Pentium 4处理器架构/微架构/流水线 (5) - 流水线前端/乱序执行核/退役单元相关推荐

  1. Pentium 4处理器架构/微架构/流水线(1) - 概述

    Pentium 4 Architecture Overview 本节简要的介绍Pentium 4处理器的关键特性.这些特性提供了很好背景知识,用于理解详细的代码优化原则. Pentium 4处理器上用 ...

  2. Intel Core Solo/Duo处理器架构/微架构/流水线 - 前端/数据预取/SSE3

    Intel Core Solo/Duo处理器采用的微架构类似于Pentium M处理器的微架构,但是在性能和功能方面做了进一步的增强,主要包括: Intel智能缓存 – Intel Core Duo的 ...

  3. Pentium 4处理器架构/微架构/流水线 (11) - NetBurst执行核详解 - Load/Store操作/存储转发

    Loads and Stores Pentium 4处理器采用以下技术来加速访存操作的执行: 投机执行读存操作 对于读存和写存操作,重排序读存操作 允许多个缓存未中共存的情形(即无需等待上一个缓存未中 ...

  4. Pentium II Pentium III架构/微架构/流水线 (1) - 架构概述

    Pentium II & III Archiecture Overview Pentium II & III与Pentium Pro一样,都是基于P6微架构的处理器,所以在架构与流水线 ...

  5. Intel(R) 处理器产品架构/微架构对照表

    Intel(R) 处理器与微架构对照表 2020/12/23:更新至IceLake/TigerLake微架构 2019/07/09:更新至 2nd Generation Intel® Xeon® Sc ...

  6. Pentium M处理器架构/微架构/流水线(1) - 流水线概述

    Intel® Pentium® M Processor 与Intel NetBurst微架构类似,Intel Pentium M处理器微架构 的流水线也包括3个主要部分: 有序发射前端 乱序超标量执行 ...

  7. Pentium 4处理器架构/微架构/流水线 (9) - NetBurst执行核详解 - 执行单元与发射口

    Execution Units and Issue Ports 每个时钟周期,执行核可能向4个发射口中的1个或多个口分发微指令.在微架构层面,存储操作进一步被分为两个部分:存储数据以及存储地址操作.下 ...

  8. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测

    Branch Predication 对于使用深度指令流水线的处理器,分支预测能力至关重要.分支预测使得处理器可以在分支指令决断之前就开始执行(预测的)分支路径指令.分支延迟是由于分支预测错误导致的性 ...

  9. Pentium 4处理器架构/微架构/流水线 (6) - NetBurst前端详解 - 取指/译码/缓存

    Intel NetBurst Pipeline Details Front End Pipeline Details 本节讲述的关于流水线前端操作的详细信息可能会对软件在指令预取,分支预测以及执行跟踪 ...

最新文章

  1. Skype for Business Server 2015-06-持久聊天服务器-3-配置
  2. adb shell dumpsys 命令 查看内存
  3. Vue-员工管理系统
  4. Resin禁止目录访问
  5. 大学的软件测试怎么学
  6. Android应用开发—PendingIntent:如何判断两个PendingIntent对等
  7. spring boot maven项目返回值乱码的解决方法
  8. 【PMP学习笔记】:三、项目经理角色
  9. 车道线检测综述及近期新工作
  10. 自主芯片+国产系统!天河三号原型机研制完成,中国超算有望重回No.1
  11. 【渝粤教育】国家开放大学2018年秋季 2632T城市轨道交通客运组织 参考试题
  12. android textview 设置单行最大宽度和ellipsize省略号时整体变短的问题
  13. Excel操作-跳过隐藏行粘贴
  14. 电力系统中的Kron简化(Kron Reduction)
  15. 天宇优配|医药股反弹受阻 公募乐观态度不改
  16. 计算机软考网络工程师 查询,软考网络工程师怎么查询报名是否成功?
  17. 2003服务器文件自动只读,您不能查看或更改只读或文件夹在 Windows Server 2003、 Windows XP、 Windows Vista 中或在 Windows 7 中的系统属性...
  18. Linux下chkconfig命令详解
  19. kube-apiserver准入
  20. 【爬虫练习】天气预报查询

热门文章

  1. iGraph(Python)报错sh:open command not found的解决
  2. Mac废纸篓批量还原的方法
  3. latex中正文前出现一页空白页,且占正文页数
  4. Windows 10标题栏显示颜色
  5. 关于使用hexo搭建博客并实现实时编写markdown的思路
  6. java实现两个字符串相连接_P005 实现两个字符串的连接 ★
  7. golang 接口_「Golang系列」 深入理解Golang Empty Interface (空接口)
  8. python对文件的处理_python文件处理fileinput使用方法详解
  9. mvn linux,Linux安装Maven
  10. Python中raise用法