64-ia-32架构优化手册(10)

来源:互联网 发布:淘宝商品价格旁边的字 编辑:程序博客网 时间:2024/06/01 09:46

2.6. Intel®超线程技术

 通过在一个物理处理器内或一个物理处理器封装内的每个处理器核内提供多个逻辑处理器,Intel®超线程技术(HT技术)使得软件可以利用任务级或线程级并行性。在其在IntelXeon处理器的第一次实现中,超线程技术使单个物理寄存器(或一个处理器核)看起来有两个或多个逻辑处理器。基于KnightsLanding微架构的IntelXeon Phi处理器在每个处理器核中支持4个逻辑处理器;实现在KnightsLanding微架构的超线程技术的细节,参考第16章。

大多数Intel架构处理器家族支持在每个处理器核中,或在早期实现中一个物理处理器里,两个逻辑处理器的超线程技术。本节的剩余部分描述超线程技术早期实现的特性。大部分描述也适用于后期支持两个逻辑处理器的超线程技术实现。本章的微架构部分提供了各个微架构额外的细节以及对超线程技术的改进。

两个逻辑处理器每个都有一整组架构寄存器,同时共享单个物理处理器的资源。通过维护两个处理器的架构状态,一个支持HT技术的处理器对软件,包括操作系统以及应用程序代码,看来就像两个处理器。

通过在两个逻辑处理器之间共享最高要求所需的资源,与传统的多处理器系统相比,HT技术也非常适合对吞吐量提供额外性能提升的多处理器系统。

图2-14显示了一个典型基于支持HT技术处理器的,以总线为基础的对称多处理器(SMP)。每个逻辑处理器可以执行一个软件线程,在一个物理处理器上同时最多允许运行两个软件线程。两个软件线程同时执行,意味着在同一个时钟周期,来自逻辑处理器0的一个add操作与来自逻辑处理器1的另一个add操作与读操作可以由执行引擎同时执行。


在HT技术的第一个实现中,物理执行资源是共享的,对每个逻辑处理器复制架构状态。这使得实现HT技术的模片面积成本最小,同时仍然能获得多线程应用或多任务工作负荷的性能增益。


归因于HT技术的性能潜力是因为:

·        操作系统及用户程序可以在每个物理处理器的逻辑处理器上调度多个进程或线程执行的事实。

·        当仅有一个线程在使用执行资源时,更高水平的使用片上执行资源的能力;资源使用的更高水平会导致更高的系统吞吐量。

2.6.1.处理器资源与HT技术

在一个物理处理器中多数微架构资源是在逻辑处理器间共享的。仅少数小的数据结构对每个逻辑处理器复制。本节描述资源如何共享、分区或复制。

2.6.1.1. 被复制的资源

架构状态(architecture state)对每个逻辑处理器复制。架构状态包含由操作系统及应用程序用来控制程序行为以及保存计算数据的寄存器。这个状态包括8个通用寄存器,控制寄存器,机器状态寄存器,调试寄存器,及其他。存在几个例外,最主要是内存类型范围寄存器(memorytype range register,MTRR)以及性能监控资源。架构状态与例外的完整列表,参考《Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual, Volumes 3A, 3B & 3C》。

其他资源,比如指令指针以及寄存器重命名表,被复制来同时追踪两个逻辑处理器的执行与状态改变。返回栈预测器被复制来改进返回指令的分支预测。

另外,少数缓冲(例如,2项的指令流缓冲)被复制来减少复杂性。

2.6.1.2. 分区的资源

通过限制每个逻辑处理器使用半数项,几个缓冲被共享。这些被称为分区资源。这样分区的原因包括:

·        操作的公平性。

·        允许一个逻辑处理器上的操作绕过另一个逻辑处理器上可能已经暂停的操作的能力。

例如:缓存不命中,分支误预测,或指令依赖性可能阻止一个逻辑处理器在若干周期内前进。这个划分防止暂停的逻辑处理器阻塞前进的步伐。

通常,在主要流水线步骤间支持指令的缓冲是分区的。这些缓冲包括在执行追踪缓存后的微操作队列,在寄存器重命名步骤后的队列,支持指令回收的重排缓冲,以及读写缓冲。

在读写缓冲的情形中,分区还提供了对每个逻辑处理器维护内存次序以及检测内存次序违反的一个更简单的实现。

2.6.1.3. 共享的资源

在一个物理寄存器中的大多数资源是完全共享的,以提高资源的动态使用率,包括缓存与所有的执行单元。某些有线性地址的共享资源,像DTLB,包括一个逻辑处理器ID位来识别该项属于哪个逻辑处理器。

依赖于一个上下文ID位,第一级缓存可以在两个模式中工作:

·        共享模式:L1数据缓存完全由两个逻辑处理器共享。

·        自适应模式:在自适应模式中,使用页目录的内存访问,在共享这个L1数据缓存的逻辑处理器间,等同映射。

其他资源完全是共享的。

2.6.2.微架构流水线与HT技术

本节描述HT技术微架构,以及来自两个逻辑处理器的指令如何在流水线的前端与后端间处理。

尽管源自两个程序或线程的指令可以同时执行,而且在执行核与内存层级中不需要按照程序次序,前端与后端包含几个选择点来选择来自两个逻辑处理器的指令。所有的选择点在两个逻辑处理器间交替,除非一个逻辑处理器不能使用一个流水线步骤。在这个情形里,另一个逻辑处理器完全使用该流水线步骤的每个周期。为什么一个逻辑处理器不能使用一个流水线步骤的原因包括缓存不命中,分支误预测,以及指令依赖。

2.6.3.前端流水线

执行追踪缓存在两个逻辑处理器间共享。执行追踪缓存访问每周期由这两个逻辑处理器仲裁。如果在一个时钟周期为一个逻辑处理器获取一个缓存行,下一个时钟周期将为另一个逻辑处理器获取一行,只要两个逻辑处理器都要求访问追踪缓存。

如果一个逻辑处理器暂停或不能使用执行追踪缓存,另一个逻辑处理器可以完全使用追踪缓存的带宽,直到第一个逻辑处理器的指令获取从L2缓存返回。

在获取指令并构建了微操作的追踪后,微操作被放入一个队列。这个队列将执行追踪缓存从寄存器重命名流水线步骤解耦。就像之前描述的,如果两个逻辑处理器都是活动的,该队列被分区,使得两者都可以独立前进。

2.6.4.执行核

这个核每周期最多可以分发6个微操作,只要这些微操作是就绪的。一旦微操作被放入等待执行的队列,两者两个逻辑处理器的指令就没有区别。执行核与内存层级不知道指令属于哪个逻辑处理器。

在执行后,指令被放入重排缓冲。重排缓冲解耦了执行步骤与回收步骤。重排缓冲被分区,使每个逻辑处理器各使用一半的项。

2.6.5.回收

回收逻辑追踪来自两个逻辑处理器的指令何时准备回收。通过在两个逻辑处理器之间交替,对每个逻辑处理器它以程序次序回收指令。如果一个逻辑处理器没有准备好回收任何指令,那么所有的回收带宽专属于另一个逻辑处理器。

一旦写操作被回收,处理器需要将写数据写入第一级数据缓存。选择逻辑交替在两个逻辑处理器间将数据提交到缓存。


原创粉丝点击