按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
叱檀τ诰托髯刺梢员坏鞫鹊紺PU 上运行。线程间的Context Switch 需要几十个时钟周期。 由此可见当CPU 需要从内存中取数据时,处理单元需要空转几十个时钟周期,有关统计显示当前CPU 处理单元的平均利用率不足25% 。为了提高CPU 处理单元的利用率,设计者采用了线程级的并行技术,即在CPU 的核心中执行一个以上的指令序列。对于操作系统来说,一个物理的处理器相当于两个逻辑的处理器,当前有三种不同的方式,实现多线程技术。 粗粒度的多线程,在任一时刻只有一个线程执行,当线程遇到一个长延迟事件时,如二级缓存不命中,则系统调度另一个线程执行,而不是让系统资源空转等待此线程。这一机制可以提高整个系统的利用率。这两个线程共享许多系统资源,如CPU 的寄存器和缓存等,因此这两个线程的切换比Context Switch 要快得多,只需要几个时钟周期。IBM 在使用PowerPC RS64 IV 处理器的pSeries 680 和pSeries 660…6M1 上使用过这种粗粒度的多线程技术。 另一种与粗粒度的多线程技术相对的是细粒度多线程技术,采用这种多线程的系统循环的执行两个线程的指令,这就需要在处理器的设计上增加许多冗余的部件。如果一个线程遇到个长延迟事件时,对应这一线程执行的时钟周期仍然没有被利用。 第三种多线程技术是同步多线程技术(SMT) ,与其他的多线程技术一样,同步多线程能够从多个线程中取出指令来运行,它能够同时执行不同线程的指令。通过同步多线程技术,系统能够动态调整系统环境,如有可能同时执行不同线程的指令。当一个线程遇到长延迟事件时,允许另一个线程使用所用的处理单元。 Power5 处理器的设计采用两路的同步多线程设计,虽然更多路的同步多线程也是可能的,但模拟现实,其所增加的系统的复杂性是不经济的。另外一个需要注意的问题是,同步多线程技术可能会由于缓存争用而降低整个系统的性能。
'编辑本段'Intel超线程技术有多少种?
基于NetBurst架构的超线程:OOOE + SMT 基于Itanium架构的超线程:IOE + CMT 基于Atom架构的超线程:IOE + SMT 基于Nehalem架构的超线程:OOOE + SMT SMT(Simultaneous Multi…Threading,同步多线程)实乃是一个专有名词,是一种类技术的名称,不仅仅Nehalem有采用,Pentium 4也有采用,还有很多其他商用处理器也有采用。正确的情况应该是,Nehalem的HT技术和Pentium 4的HT技术一样,都是属于SMT技术。 实际上,超线程技术在Intel的很多处理器里面都有使用,除了Pentium 4(NetBurst架构)、Core i7(Nehalem架构)之外,Itanium 2(Mondecito)和Atom(Silverthorne)处理器里面都有,然而它们携带的HT技术却不属于SMT! 在整理Intel的多种HT超线程技术之前,我们先来回顾一下MultiThreading多线程技术的分类,MultiThreading多线程就是在一个单个的处理核心内同时运行多个工作线程的技术,和CMP(Chip MultiProcessing,芯片多处理)不同,后者是通过集成多个处理内核的方式来让系统的处理能力提升——也就是现在常见的多核技术。现在主流的处理器都使用了CMP技术。 然而CMP技术大规模增加了相应的电路,从而增加了成本,MT(MultiThreading)技术却不是多线程架构异同这样,它只需要增加规模很少的部分线路(通常,约2%)就可以提升处理器的总体处理器能力,从而可以很简单地提升相关应用的性能。 MultiThreading(或作Multi…Threading)来源于可以追溯到上个世纪90年代开始的一个叫做ILP(Instruction Level Parallelism,指令级并行化)的思想,这个思想产生了一个叫做Throughput puting(吞吐量计算)的名词,用来提升如在线交易这样的并行计算的性能。Throughput puting的两种主要方式就是MultiProcessing和MultiThreading。 一开始,为了开发ILP,在过去的几十年中利用了超标量(Superscalar,同时具备多个执行器)、乱序执行(Out…Of…Order Execute,允许无数据关联性的指令同时运行)、动态分支预测、VLIW(Very Long Instruction Word,超长指令集 ) 等技术(前三种可在经典的Pentium Pro架构上看到,最后一个就是Itanium的特色技术)。然而,超标量使设计的复杂性急剧增加,同时,指令之间的数据和控制相关,可以开发的ILP 也有限,以及一些其它因素,使得经典的超标量结构处理器难以进一步提高处理器性能。 而且从应用的角度看,如在线事务处理OLTP、决策支持系统DSS、Web服务等这样的应用的特点是具有丰富的线程级并行性(Thread Level Parallelism)而缺乏ILP,因此也就促使了MultiProcessing和MultiThreading的出现。 MultiThreading多线程技术的思想有些类似于早期的分时共享计算系统,执行多个线程的处理器在遇到某个线程由于Cache Miss或者分支预测失败而停顿的时候,可以切换到另一个线程来执行。目前主流的MultiThreading具有着三种形式,差别在于线程间共享的资源以及线程切换的机制: 其中CMT和FMT都是在单个执行单元下的技术,不同的线程在指令级别上并不是真正的“并行”,而SMT则具有多个执行单元,同一时间内可以同时执行多个指令,因此前两者有时先归类为TMT(Temporal MultiThreading,时间多线程),以和SMT相区分。 首先介绍CMT——Coarse…Grained MultiThreading是因为:它是最简单的多线程技术,当单一执行线程遇到长时间的延迟,如Cache Missed时,就进行线程切换,直到原线程等待的操作完成,才切换回去。Coarse…Grained MultiThreading有时也叫Block MultiThreading堵塞多线程或者Cooperative MultiThreading协作多线程。 由于CMT很简单,因此很多处理器都有实现,除了下面列出之外,很多嵌入式微控制器都有实现: 1999年的IBM RS64 III「Pulsar」(单核心/双线程) 2005年Fujitsu SPARC64 VI「Olympus…C」(双核心/4线程) 2006年Intel Itanium 2「Montecito」(双核心/4线程) 2007年Intel Itanium 2「Montvale」(双核心/4线程) Intel的Itanium 2赫然在目 FMT——Fine…Grained MultiThreading随时可以在每个时钟周期内切换多个线程,以追求最大的输出能力——当然,随时可以切换也是有代价的,它拉长了每个执行线程的平均执行时间。Fine…Grained MultiThreading有时也叫Interleaved MultiThreading交错多线程或者Pre…emptive MultiThreading抢先多线程。 和CMT比起来,FMT要复杂一些,因此相应的处理器就没有那么多,例: 2005年Sun UltraSPARC T1「Niagara」(8核心/32线程) 2007年Sun UltraSPARC T2「Niagara 2」(8核心/64线程) 其实UltraSPARC T2同时还使用了其他的MT技术,才实现了比T1多了一倍的多线程能力,仔细看看上图,T2还使用了什么MT技术(注意第一段的CMT是Chip MultiThreading的意思而不是Coarse…Grained M最典型的:Intel Pentium 4或者Core i7ultiThreading的意思)? 虽然CPU上使用FMT技术的并不 早在NV G40以及ATI R520开始,GPU内部就开始应用了FMT细粒度多线程技术,为了隐含Cache Miss的存储器高延迟,GPU内部的执行单元不停地在工作线程之间切换,提升总的处理能力。不过,G40的FMT实现了具体多少个线程笔者倒不是很清楚,根据资料看应该在100左右。 前面说过,SMT其实和其他两种多线程技术都不同——那两种技术被称之为TMT时间多线程。SMT——Simultaneous MultiThreading具有多个执行单元,可以同时运行多条指令,因此才叫做“同步多线程”!SMT起先源自充分挖掘超标量架构处理器的潜力——超标量的意思就是可以同时执行多个不同的指令。因此SMT具有最大的灵活性和资源利用率,然而实现也最复杂(当然比起多核结构来说就是小意思了)。 2002年Intel Pentium 4 Xeon「Prestonia」(单核心/双线程) 2007年Sun UltraSPARC T2「Niagara 2」(8核心/64线程) 2008年Intel Core i7「Nehalem」(4核心/8线程) 这里又看到了UltraSPARC T2,这是因为它同时采用了FMT和SMT技术:因为UltraSPARC T2具有两个执行单元,每一个线程组使用一个,线程组内则按照T1那样执行4个线程。现代的GPU也采用了类似的混合设计: 不同的流处理器可以同时执行不同的线程,当然同一个流处理器也可以在不同的线程之间切换。 介绍了所有的MT多线程技术种类之后,我们可以来看Intel的HyperThreading超线程技术了,前面说过,Intel具有超线程技术的CPU有:Pentium 4(NetBurst架构)、Core i7(Nehalem架构)、Itanium 2(Mondecito)、Atom(Silverthorne)。我们已经知道具有超线程技术的Pentium 4/Pentium 4 Xeon(不是所有的P4都有超线程技术)采用的是SMT架构,Core i7的则是其改进版本。我们再来看看Itanium 2:Itanium 2 Montecito采用了双核心设计,每核心两个线程;Itanium 2 Montecito的超线程技术采用了CMT架构; 可见,Itanium 2的超线程技术和Pentium 4的SMT不同,它实际上是CMT粗粒度多线程技术。这是因为Itanium 2是In…Order架构的,SMT的原始构想就是充分压榨OOOE(Out…Of…Order Execution)的能力,因此In…Order架构的Itanium 2就没有采用SMT的方式。因为要创建多个线程的代价太大。 那是否In…Order架构的处理器就不能实现SMT了呢?并不是,Intel的Atom就是一个典型的例子: 除了Atom之外,IBM的怪物Power6(起始频率4。7GHz)也采用了基于In…Order架构的SMT技术(Power5的SMT是基于Out…Of…Order):IBM Power6处理器,双核,每核两个线程;Power6:In…Order + SMT,Power5则是Out…Of…Order + SMT。'2'
'编辑本段'超线程“灵魂附体”——同步多线程技术
在NetBurst微架构后期,Intel为了维持性能上的优势,将Prescott核心的Pentium 4流水线拉长到31级;细化后的流水线可以被分成若干个环节,然后执行不同的任务进程,Intel将其称为“Hyper…Threading Technology(超线程技术,简称HT)”。但过长的流水线需要进行大量的分支预测工作,而且一旦预测失准,就要把当前的工作全部推倒重新来过。这就造成了Pentium 4 HT处理器空有高频率,发热量也大得惊人,性能却提高有限,最终还被扣上了“高频低能”的大帽子。 从原则上来讲HT技术绝对是一项非常有意义的创新和尝试,如果我们假设当初HT遇到的不是流水线冗长Prescott Pentium 4,而是更加精简高效的Core 2 Duo,结果会怎样? 当然,只有14级流水线的Core 2 Duo最终还是与HT擦肩而过(当初的理由是过短的流水线没必要引入超线程技 术);但这并不代表Intel放弃了这方面的努力,现在Nehalem就在尝试做这样的事情。所不同的是,这次的主角有了一个新名字——Simultaneous Multi…Threading(同步多线程,简称SMT)。 新技术允许内核在同一时间运行两个不同的进程,以此来压缩多任务处理时所需要的总时间。这么做有两个好处,其一是提高处理器的计算性能,减少用户得到结果所需的时间;其二就是更好的能效表现,利用更短的时间来完成任务,这就意味着在剩下的时间里节约更多的电能消耗。当然这么做有一个总前提——保证SMT不会重复HT所犯的错误,而提供这个担保的则是在Core微架构中表现非常出色的分支预测设计 1、 Event 用事件(Event)来同步线程是最具弹性的了。一个事件有两种状态:激发状态和未激发状态。也称有信号状态和无信号状态。事件又分两种类型:手动重置事件和自动重置事件。手动重置事件被设置为激发状态后,会唤醒所有等待的线程,而且一直保持为激发状态,直到程序重新把它设置为未激发状态。自动重置事件被设置为激发状态后,会唤醒“一个”等待中的线程,然后自动恢复为未激发状态。所以用自动重置事件来同步两个线程比较理想。MFC中对应的类为CEvent。