相關文章

Dd84204e28951f128f512d44c0a3737b30d1c8ba

「在2008年的第四季,Intel即將推出全新一代的Nehalem處理器,其代號為Bloomfield。初期,它將會推出4核心的版本,並且還導入新的HyperThreading技術,叫做SMT(Simultaneous Multi-threading)」(後來已修正)

這是前天pcadvfish在blog某篇文章的段落,讓吃飽閒閒到處看人不爽古道熱腸的筆者直接在MSN上破口開幹好心提醒:這樣寫是錯的。SMT實乃「專有名詞」,Intel NetBurst、Atom和Nehalem的HyperThreading,只是SMT某種實作形式。更何況,同樣叫做「Intel的HyperThreading」,在雙核心Itanium 2「Montecito」與「Montvale」就不是「SMT」。嘿嘿,混亂了吧?事實上,並不是CPU像宋七力搞分身一心多用就是「同時多執行緒」。

我們簡單回顧一下,Multithreading在CPU加速機制的三種應用。

Coarse-grained multithreading(CMT,粗質多執行緒):這是最簡單的形式,當單一執行緒遭遇長時間的延遲,如耗費大量clock cycle的L2 cache miss,CPU才會清空指令管線,交換執行緒,進行context switch,只要沒大事發生,執行緒就盡量全速運行。其缺點也很明顯:較差的指令輸出率,與較高的重新啟動管線成本。

案例:

  • 1999年的IBM RS64 III「Pulsar」(單核心/雙執行緒)
  • 2005年Sun UltraSPARC T1「Niagara」(8核心/32執行緒)
  • 2006年Intel Itanium 2「Montecito」(雙核心/4執行緒)
  • 2007年Sun UltraSPARC T2「Niagara 2」(8核心/64執行緒)
  • 2007年Intel Itanium 2「Montvale」(雙核心/4執行緒)

哇賽,整排RISC伺服器用大怪物耶!

Fine-grained multithreading(FMT,細質多執行緒): 和上述「粗質」完全相反,隨時可在每個cycle內切換執行緒,以追求最高的輸出率,問題則在於,這會拉長每個執行緒的平均執行時間。就筆者印象所及,除了Fujitsu的SPARC64VI「Olympus」,似乎沒有任何商用的汎用處理器採用細質多執行緒,但請注意:NVIDIA NV40與ATI R520之後的GPU,全數都是細質多執行緒架構,這和顯示晶片與CPU截然不同的性能取向(尤其當shader運算效率變成重點時),有著極密切的關聯。

無論粗質還是細質,都只能在單一cycle內執行一個執行緒。那麼,如果要「同時」執行不同的執行緒,該怎麼辦?這時SMT就要派上用場了。不過,SMT概念的起源,來自「有效利用」CPU既有OOOE(Out-Of-Order Execution)的龐大資源,畢竟這些現有的機制都已經克服多數同時執行不同執行緒的技術門檻,如暫存器重新更名(Register Renaming)、指令執行判定(Commit)和維持程式執行一致性的指令重排緩衝區(ReOrder Buffer)等。

講的更白一點,所謂的SMT,只是將TLP(Thread-Level Paralleism)轉為ILP(Instruction-Level Parallelism)罷了,提高兼具超純量(Superscalar)與非循序指令執行能力的處理器利用率。除了讀者熟悉的HyperThreading,SMT最有名的例子,莫過於2004年的IBM Power5「Squadron」,僅延續和前代Power4「Regattta」相同的管線深度與執行寬度,卻藉由導入SMT與整合記憶體控制器,讓整體效能完全脫胎換骨,K爆所有高階伺服器CPU,也許我們也將在條件相似的Nehalem看到再度重演的歷史。

但回過頭來,SMT的原始構想來自「壓榨發掘OOOE的剩餘價值」,這是否代表缺乏OOOE的超純量CPU就不能實現SMT?答案是否定的,像IBM的超高時脈怪物Power6,與Intel的超迷你原子Atom「Silverthorne/Diamondville」,本質上都是in-order design,卻也都是SMT。換言之,只要有適當的配套措施和足夠的運算資源,SMT絕非OOOE CPU的專利,只是比較困難,而且所費不貲。就算有現成的OOOE,也沒人規定非得SMT不可,Fujitsu SPARC64 VI內建強大的OOOE能力,卻僅導入FMT,即可證明此事不是嘴砲

最後,我們就來複習一下,Intel的HyperThreading有幾種?

  • HT on NetBurst→SMT based on OOOE
  • HT on Itanium→CMT(因為IA-64指令集的原始設計精神就想和複雜的OOOE老死不相往來)
  • HT on Atom→SMT without OOOE
  • HT on Nehalem→SMT based on OOOE

唬爛到此結束,謝謝收看,感謝讀者看完一連串人腦當機所產生的亂碼。未來筆者將進一步深入探討多執行緒在CPU上的演化與進展,只是不知道在blog還是雜誌上就是了

使用 Facebook 留言

170818e850a2360e4d4d9b8c23c47640?size=48&default=wavatar
1.  小賢 (發表於 2010年12月31日 02:24)
講的很詳細而且很專業!
希望能後有續的文章

發表回應

謹慎發言,尊重彼此。按此展開留言規則