【IT168評測中心】早在10月14日,在Intel釋出Nehalem架構處理器桌面版——Core i7的一個月之前,我們IT168就已經釋出了《再攀性能之巅 Intel全新酷睿i7深度評測》。在其中,我們可以看到以下的圖像文字:
最後,在Pentium 4時代被大家所熟知的HyperThreading超線程技術回歸到了Nehalem架構當中,現在它被稱之為SMT同步多線程技術,從執行上而言它和HT技術是完全一樣的,隻是借助Nehalem增強的RSB和ITLB架構,Nehalem的超線程性能比起老前輩來要更為強大。
這是筆者在4月份參加IDF2008上海Intel春季開發者論壇上的報道《[IDF08]英特爾下一代處理器:Nehalem》所采用的内容,并一直沿用至今。很多媒體也采用了這樣的說法。然而,“現在它被稱之為SMT同步多線程技術” 這個說法确是不正确的。
Intel Core i7支援HT超線程(SMT的一種),共具有4個處理核心,每核心支援兩個線程,共8個線程 |
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 Computing(吞吐量計算)的名詞,用來提升如線上交易這樣的并行計算的性能。Throughput Computing的兩種主要方式就是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具有着三種形式,差别在于線程間共享的資源以及線程切換的機制:
多線程架構異同 | |||
多線程技術 | 線程間共享資源 | 線程切換機制 | 資源使用率 |
粗粒度多線程 Coarse-Grained MultiThreading | 除取指令緩沖、寄存器、控制邏輯外 | 流水線停頓時 | 提升單個執行單元使用率 |
細粒度多線程 Fine-Grained MultiThreading | 除寄存器、控制邏輯外 | 每時鐘周期 | 提升單個執行單元使用率 |
同步多線程 SimultaneousMultiThreading | 除取指令緩沖、傳回位址堆棧、寄存器、控制邏輯、重排序緩沖、Store隊列外 | 所有線程同時活動,無切換 | 提升多個執行單元使用率 |
其中CMT和FMT都是在單個執行單元下的技術,不同的線程在指令級别上并不是真正的“并行”,而SMT則具有多個執行單元,同一時間内可以同時執行多個指令,是以前兩者有時先歸類為TMT(Temporal MultiThreading,時間多線程),以和SMT相區分。
首先介紹CMT——Coarse-Grained MultiThreading是因為:它是最簡單的多線程技術,當單一執行線程遇到長時間的延遲,如Cache Missed時,就進行線程切換,直到原線程等待的操作完成,才切換回去。Coarse-Grained MultiThreading有時也叫Block MultiThreading堵塞多線程或者Cooperative MultiThreading協作多線程。
Fujitsu SPARC64 VI/VI+處理器,雙核,每核兩個線程
Fujitsu SPARC64 VI/VI+的CMT技術叫做VMT(Vertical Multi-Threading垂直多線程)
由于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搶先多線程。
Sun UltraSPARC T1處理器,8核心,每核4個線程
Sun UltraSPARC T2處理器,8核心,每核8個線程
最後一段表明UltraSPARC T2使用了FMT
和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 MultiThreading的意思)?
雖然CPU上使用FMT技術的并不多,不過我們可以看看另一個領域:GPU,現在NVIDIA和ATI的GPU,都使用了FMT技術:
|
前面說過,SMT其實和其他兩種多線程技術都不同——那兩種技術被稱之為TMT時間多線程。SMT——Simultaneous MultiThreading具有多個執行單元,可以同時運作多條指令,是以才叫做“同步多線程”!SMT起先源自充分挖掘超标量架構處理器的潛力——超标量的意思就是可以同時執行多個不同的指令。是以SMT具有最大的靈活性和資源使用率,然而實作也最複雜(當然比起多核結構來說就是小意思了)。
Intel Pentium 4,單核,每核兩個線程
最典型的:Intel Pentium 4或者Core i7
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的超線程技術:在遇到如L3 cache missed的時候進行線程切換
可見,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就是一個典型的例子:
迷你處理器:Intel Atom(淩動),還有一種叫法是阿童木處理器……
Atom的超線程基于In-Order架構的SMT技術
除了Atom之外,IBM的怪物Power6(起始頻率4.7GHz)也采用了基于In-Order架構的SMT技術(Power5的SMT是基于Out-Of-Order):
IBM Power6處理器,雙核,每核兩個線程
Power6:In-Order + SMT,Power5則是Out-Of-Order + SMT
【IT168評測中心】現在,我們知道Core i7的超線程技術的名稱的正确對待方法了。最後,我們來回顧一下,Intel的超線程技術到底有幾種?
基于NetBurst架構的超線程:OOOE + SMT
基于Itanium架構的超線程:IOE + CMT
基于Atom架構的超線程:IOE + SMT
基于Nehalem架構的超線程:OOOE + SMT
轉載于:https://blog.51cto.com/muyunzhe/1625051