一、处理器微架构实现之微架构概览

一、处理器微架构实现之微架构概览_第1张图片

计算机在当今社会生活中有着举足轻重的作用,而处理器又是计算机的核心。如今,我们可以在许多设备中找到处理器身影:游戏机、消费电子设备和汽车等。

本讲座对当代微处理器的微体系结构进行了深入研究。重点是实现方面,讨论几种可供选择的实现方法以及其在性能、功率和成本方面的影响。

处理器的微体系结构经历了持续的发展,例如,英特尔在最近几年大约每年都会推出一款新的微处理器。这种演变主要由两种因素推动:(1) 技术发展和 (2) 工作负载的演变。

技术发展通常被称为摩尔定律,晶体管密度大约每2年翻一番,每一代技术都提供更小、更快且能耗更低的晶体管,这使得设计人员能够在不增加处理器的面积和功率的前提下提高其性能。

另一方面,为了更好的发挥用户应用程序的特性,处理器也不断调整它们的特性,这些特性会随着时间的推移而发展。例如,近年来,我们目睹了多媒体应用程序的快速增长,处理器中的特性也随之变化以更好地支持多媒体应用的发展。

1.1 微处架构分类

处理器微架构可以按照多个正交维度进行分类,在这里,我们将介绍最常见的几种。

1.1.1流水线/非流水线处理器

流水线处理器将每条指令的执行分成多个阶段,并允许在不同阶段同时处理不同的指令。流水线增加了指令级并行性 (ILP),并且由于其成本效益,如今几乎所有处理器都在使用流水线。

1.1.2顺序/乱序执行处理器

顺序执行处理器按照二进制代码文件中出现的指令顺序处理指令(根据指令的顺序语义),而乱序执行处理器可能(一般是)以不同于二进制代码文件中出现的指令顺序执行指令。乱序执行指令的目的是通过为硬件提供更多自由来选择在每个周期中处理哪些指令以增加 ILP(Instruction Level Parallelism)的数量。显然,乱序执行的处理器比顺序执行的处理器需要更复杂的硬件。

1.1.3标量/超标量处理器

标量处理器每周期在流水段中不能执行超过1条指令,换句话说,对于任何代码,标量处理器无法实现大于每周期1条指令的吞吐量。不是标量的处理器称为超标量处理器,超标量处理器可以在所有流水线阶段同时执行多于1条指令,因此对于某些代码,每周期可以实现大于1条指令的吞吐量。

超长指令字 (VLIW) 处理器是超标量处理器的一个特例,VLIW处理器可以在所有流水线阶段处理多条指令,因此符合超标量的定义。使超标量处理器成为 VLIW 的是以下特征:(a) 它是顺序执行的处理器,(b) 二进制代码指示哪些指令将并行执行,以及 (c) 许多执行延迟暴露给程序员,并成为指令集体系结构的一部分,因此代码必须遵守有关特定类型指令之间距离限制,以保证正确执行。这些约束的目的是简化硬件设计,避免包含硬件机制在运行时检查某些操作数的可用性并决定在每个周期中执行哪些指令。

例如,每周期执行4条指令的VLIW处理器中,代码由4条指令的数据包构成,每条指令都必须属于特定类型。此外,如果一个给定的操作需要三个周期,代码生成器有责任保证接下来的两个数据包不使用这个结果。

换句话说,在非VLIW中,处理器的代码语义仅由指令顺序决定,而在VLIW处理器中,如果不知道硬件的某些特定特性(通常是功能单元的延迟),则无法完全推导出代码的语义。通过将一些硬件特性作为架构定义的一部分,VLIW 处理器可以拥有更简单的设计,但另一方面,使代码依赖于具体实现,因此,它可能无法从一种实现兼容到另一种实现。

1.1.4向量处理器

向量处理器在其 ISA(指令集体系结构)中包含了大量能够对向量进行操作的指令。传统上,向量处理器具有对相对较长的向量进行操作的指令。最近,大多数微处理器都包含一组对相对较小的向量进行操作的指令(例如,Intel AVX扩展中多达8个单精度FP单元[17])。 这些指令通常称为 SIMD(单指令多数据)指令。 根据这个定义,现在的许多处理器都是向量处理器,尽管它们对向量指令的支持有很大差异。

1.1.5多核处理器

一个处理器可能包含一个或多个核心。核心是可以处理一段连续代码的单元(通常称为线程)。传统处理器过去只有一个核心,但现在大多数处理器都有多个核心。 多核处理器可以同时处理多个线程,每个线程使用不同的硬件资源,并支持这些线程在程序员的控制下进行同步和通信。这种支持通常包括核心之间的某种类型的互连,以及通过这种互连进行通信的原语,通常用于共享数据和一致性维护。

1.1.6多线程处理器

多线程处理器可以在其某些核心上同时执行多个线程。多核处理器和多线程处理器都可以同时执行多个线程,但关键的区别在于,在多核的情况下,线程大多使用不同的硬件资源,而在多线程处理器中共享大部分硬件资源。多核和多线程是两个正交的概念,因此它们可以同时使用。例如,英特尔酷睿i7处理器有多个核心,每个核心都是双向多线程的。

1.2 细分市场分类

处理器还具有不同的特性,具体取决于它们所针对的细分市场。最常见的细分市场分类如下:

  • 服务器:一般是指强大的数据中心系统,通常由许多用户共享,通常具有大量的处理器。在这个细分市场中,计算能力和功耗是用户最重要的参数。

  • 桌面台式机:指在家中或办公室使用的计算机,一般不会同时有超过一个用户使用。在这些系统中,计算能力和散热噪音是用户最重要的参数。

  • 移动平台:指笔记本电脑,其主要特点是移动性,因此大部分时间都使用电池供电。在这些系统中,能耗是用户最重要的参数,因为它会影响电池寿命,同时计算能力也非常重要。

  • 超级移动平台:在这些系统中,能源消耗对用户来说至关重要。计算能力虽然很重要,但相对于能源消耗而言是次要的。这些系统通常非常小,以最大限度地提高便携性。

  • 嵌入式:是指除了计算机之外,我们现在使用的许多系统中嵌入的处理器。这些嵌入式处理器几乎无处不在:汽车、消费电子产品、医疗保健设备等。它们的特性因嵌入的特定系统而异。在某些情况下,它们的计算能力要求可能很重要(例如,在机顶盒中),而在许多其他情况下,成本是最重要的参数,因为它们的计算要求最低,而这一切都是为了最大限度地减少它们对总成本的影响。在一些嵌入式系统中,能源消耗也是最重要的。

1.3 处理器概述

一、处理器微架构实现之微架构概览_第2张图片

图 1.1 处理器构成框图

图1.1是处理器构成框图,它适用于当今大多数处理器,特别是最常见的乱序执行的超标量处理器。该图还描述了每条指令执行所经过的主要阶段,这些阶段不一定对应于实际实现中的流水线阶段,具体的实现可以将它们中的每一个分成多个阶段,或者可以将其中的几个组合到同一阶段。

指令首先从指令缓存(I-Cache)中获取,然后对指令进行解码以了解指令所要执行的操作。之后,大多数处理器将某种类型的重命名应用于寄存器操作数(寄存器重命名),以消除错误依赖并增加可利用的 ILP 数量。然后根据指令的类型,将指令分派到各种缓冲区。非内存访问指令被分派到发射(Issue)队列和重新排序缓冲区(ROB),而内存访问指令被分派到load/store队列。指令会一直保留在发射队列中,直到它们被发射执行。在执行指令之前必须读取操作数,这可以通过多种方式完成,我们将在第5章和第6章中介绍。之后,将结果写回寄存器文件,最后,指令被提交。指令会一直保留在重新排序缓冲区(ROB)中,直到被提交。重新排序缓冲区的目地是存储对指令执行有用的信息,以在必要时对其进行压缩。

内存操作以特殊方式处理,他们需要计算有效地址,与算术指令相同的方式完成。然而,除了访问数据缓存之外,可能还需要检查它们与其它运行中的内存指令之间存在的潜在依赖性。load/store队列为此存储所需的信息,相关逻辑负责确定何时以及以何种顺序执行内存指令。

在顺序执行的处理器中,指令按程序顺序流经这些阶段,这意味着如果一条指令由于某种原因(例如,一个不可用的操作数)而停顿,较新的指令不会越过其执行,因此它们也需要停顿。

在超标量处理器中,上述每个部件都有同时处理多条指令的能力。此外,在一些流水线阶段之间还会添加缓冲区进行解耦,缓存还允许处理器隐藏由于不同类型的事件(例如缓存未命中、操作数未准备好)而导致的停顿。在取指单元与解码单元、解码单元和重命名的单元、分派和发射单元之间配置一个缓冲区是比较常见的。

1.3.1流水线概述

本节概述流水线的主要构成,以下章节将对各阶段进行详细描述。

流水线的第一部分负责获取指令,这部分流水线的主要组成部分是 (a) 指令高速缓存(I-Cache),用于存储指令,以及 (b) 确定下一个指令地址的分支预测器。

下一部分是指令解码,这部分的主要是解码器、ROM 和专用电路,其主要目的是识别指令的主要属性,例如类型(控制流)和它将需要的资源(寄存器端口,功能单元FU)。

随后是指令流向分配阶段,其中执行的两个主要操作是寄存器重命名和分派。寄存器重命名需要更改寄存器操作数的名称,目的是消除所有虚假依赖,从而最大化处理器可以利用的指令级并行性。通常通过一组表来完成,这些表包含有关逻辑名称到物理名称的映射以及此时未使用物理寄存器名称的信息(空闲列表),以及用于分析重命名的多条指令之间的依赖关系的一些逻辑,因为生产者—消费者配对的目的和源寄存器必须以一致的方式重命名。指令分派会保留指令将使用的各种资源,包括重新排序缓冲区、发射队列和load/store缓冲区。如果资源不可用,相应的指令将被暂停,直到其他指令释放所需的资源。

流水线的下一阶段专门用于指令发射。指令会一直位于发射队列中,直到发射逻辑确定可以开始执行指令。对于顺序执行处理器,发射逻辑相对简单,由一个指示哪些操作数可用的记分板(scoreboard)和一个用于检查队列头部指令是否已准备好所有操作数的简单逻辑电路组成。对于乱序执行处理器,这个逻辑相当复杂,因为它需要在每个周期分析队列中的所有指令,检查指令的操作数是否准备就绪以及指令执行所需资源的可用性。

指令发射后,指令转到流水线的执行部分。这里有针对不同类型运算的多种执行单元,通常包括整数运算、浮点运算和逻辑运算。如今,包含用于 SIMD 操作(单指令多数据,也称为向量操作)的特殊单元也很常见。执行阶段的另一个重要组成部分是旁路逻辑,它由可以将结果从一个单元移动到其他单元的输入线路和确定结果是否应该使用旁路而不是使用来自寄存器文件数据的相关逻辑组成。旁路网络的设计在大多数处理器中都至关重要,因为线路延迟与门延迟不是比例相关的,因此它们对处理器的周期时间有重要影响。

最后指令进入提交阶段。这部分流水线的主要目的是将指令拉回顺序执行,即使指令以不同的顺序发射或执行完成的。与这部分流水线相关的逻辑会检查重排序缓冲区中最旧的指令是否已完成,一旦完成,指令就会从流水线中退休,释放资源并做一些记录。

影响流水线中多个阶段的是恢复逻辑,由于某些错误推测(典型情况是分支预测错误),处理器已经完成的指令必须撤消。发生这种情况时,必须刷新指令,将某些存储(例如,寄存器文件)重置为以前的状态。

本文的其余部分详细描述了当代处理器的不同组件的设计,以及最先进的设计,有时会概述一些其他设计方案。

本文章翻译至Processor Microarchitecture: An Implementation Perspective,结合机翻和本人理解修改,若有错误,请批评指正。

关注微信公众号,持续更新更多处理器微架构,操作系统内核相关文章,你的关注是我持续进步的动力。

一、处理器微架构实现之微架构概览_第3张图片

你可能感兴趣的:(处理器微架构,架构)