說到超線程技術,大家應該都不陌生了,Intel早在2002年推出的Northwood奔騰4 HT處理器就把這一技術帶入到消費級市場,雖然隨后的酷睿2處理器超線程被拋棄,不過到了2008年推出的Nehalem架構Core i7處理器又把超線程技術帶回到市場上,並一直沿用至今,現在的Core i7/i3、部分奔騰與Atom、還有移動版的雙核Core i5與Core M處理器都有超線程技術,AMD最新推出的Ryzen系列除最低端的Ryzen 3外都帶有SMT多線程技術,與Intel的超線程技術類似。

在了解超線程是什么鬼之前我們要先知道線程是什么,Thread線程是操作系統能夠進行運算調動的最小單位,它被包含在進程之中,是進程中的實際運作單位,一個進程中可以並發多個線程,每條線程並行執行不同的任務。
Intel Hyper-Threading Technology(超線程技術)的學術名字是Simulate MultiThreading(SMT,同步多線程技術),SMT是超線程技術的學術名稱,這兩個東西是完全一樣的。這技術的引入是為了更好的利用CPU的空閑資源,Intel從奔騰處理器就開始引入超標量、亂序運行、大量的寄存器及寄存器重命名、多指令解碼器、預測運行等特性,這些特性的原理是讓CPU擁有大量資源,並可以預先運行及平行運行指令,以增加指令運行效率,可是在現實中這些資源經常閑置,為了有效利用這些資源,就干脆再增加一些資源來運行第二個線程,讓這些閑置資源可運行另一個線程。
什么是多線程?
MultiThreading多線程這個概念有些曖昧,多線程可以指在一個CPU核心上同時執行多個線程,也可以是多個任務,盡管在同一個核心內執行,但是它們之間完全分離。多線程在概念上類似搶占式多任務處理,但是在現在的超標量處理器中以線程級來實現。
多線程有兩個主要實現方法,一個是Temporal MultiThreading時間多線程,另一個則是Simulate MultiThreading同步多線程,時間多線程還可以進一步分為Fine-Grained MultiThreading細粒度多線程與Coarse-Grained MultiThreading粗粒度多線程。

CMT粗粒度多線程是最簡單的多線程技術,當單一執行線程遇到長時間的延遲,如Cache Missed時,就進行線程切換,直到原線程等待的操作完成,才切換回去。
FMT細粒度多線程比CMT粗粒度多線程復雜一些,它隨時可以在每個時鍾周期內切換多個線程,以追求最大的輸出能力,當然,隨時可以切換也是有代價的,它拉長了每個執行線程的平均執行時間。
CMT和FMT都沒有在消費級處理器上面使用,Intel與AMD處理器上使用的都是SMT同步多線程,不過NVIDIA與AMD的GPU都有使用FMT技術。
SMT同步多線程具有多個執行單元,CMT和FMT都是在單個執行單元下的技術,不同的線程在指令級別上並不是真正的“並行”,而SMT則具有多個執行單元,同一時間內可以同時執行多個指令,可以充分發掘超標量處理器的潛力,因此SMT具有最大的靈活性和資源利用率,不過處理器也更復雜。
不過現在的消費級處理器都是超標量處理器,所以要支持SMT其實在架構上不用太多改變:所需的主要添加是在一個周期中從多個線程獲取指令的能力,以及一個更大的寄存器文件來保存來自多個線程的數據。並發線程的數量可以由芯片設計者決定。常見模式是每個CPU核心有兩個並發線程,但一些處理器的每個核心支持最多八個並發線程。
不過現在的消費級處理器都是超標量處理器,所以要支持SMT其實在架構上不用太多改變:所需的主要添加是在一個周期中從多個線程獲取指令的能力,以及一個更大的寄存器文件來保存來自多個線程的數據。並發線程的數量可以由芯片設計者決定。常見模式是每個CPU核心有兩個並發線程,但一些處理器的每個核心支持最多八個並發線程。
工作原理
對於單一處理器核心來說來說,雖然也可以每秒鍾處理成千上萬條指令,但是在某一時刻,只能夠對一條指令(單個線程)進行處理,超線程技術能夠 把一個物理處理器在軟件層變成兩個邏輯處理器 ,可以使處理器在某一時刻,同步並行處理更多指令和數據(多個線程),當然了實際效能不可實現雙倍提升,畢竟干活的核心只有一個。

可以這樣說,超線程是一種可以將CPU內部暫時閑置處理資源充分“調動”起來的技術,奔騰4 HT處理器多加入了一個邏輯處理單元,這讓CPU可以同時執行多個程序而共享一顆CPU內的資源,如:ALU、FPU、 緩存等,當兩個線程都同時需要某一個資源時,其中一個要暫時停止,並讓出資源,直到這些資源閑置后才能繼續,因此超線程的性能並不等於兩顆CPU的性能。

在發布奔騰4 HT處理器的時候Intel說過,超線程技術只增加了5%的芯片面積,就可換來15%~30%的性能提升,而后來的Nehalem架構帶來了全新的超線程技術,得益於指令集分制預測技術與較短的流水線,它擁有比奔騰4好得多的效能,再加上整合了內存控制器讓其擁有更大的內存帶寬,還有更大的緩存,這樣就更能夠有效的發揮超線程的作用,Nehalem的超線程可以在增加很少能耗的情況下,讓性能提升20-30%,后續每一代雖然都有一些小修改,不過基本上都是Nehalem架構的延續。
超線程的作用
其實在Intel剛把超線程技術推向消費級市場的時候市場反應不怎么好,因為當時的操作系統和軟件都沒有對多線程技術進行優化,多數軟件都是以單線程運行,超線程的優勢非但顯露不出來反而會因為另一個虛擬處理器搶占資源導致運行起來比沒超線程的處理器更慢。
這些問題隨着這些年來操作系統和軟件逐步對多核多線程進行優化得到改變,特別是Windows 10系統對多線程優化相當好,操作系統的調度器設置更為科學,多核心多線程的負載更為平均,你在Windows 10系統下打開任務管理器會發現 不論物理核心還邏輯核心的負載都相當平衡,除非是人為指定負載線程,否則很少會出現之前Windows 7那樣單核負載多核圍觀的慘狀。

至於超線程的作用其實還是很明顯的,之前我們對比測試過Core i7-6700K和Core i5-7600K,他們倆的四核與單核Boost頻率是相同的,都是4.0GHz與4.2GHz,區別就在於超線程的有無和L3緩存的大小了,至於Skylake與Kaby Lake兩者是沒有性能上的差別的。

有超線程的Core i7-6700K多線程性能比Core i5-7600K好19%左右,然而超線程技術在提升處理器的利用率增大吞吐量的同時也稍微增加了單個線程的延時,如果只看單線程能力的話Core i5-7600K其實比Core i7-6700K還好2.8%左右,然而降低這么一點單線程性能讓多線程性能提升這么多這其實是很划算的。
太長不看版:
簡單地說,超線程技術是一個很好的提升核心利用率的東西,將閑置處理資源充分調動起來,增強核心並行運算性能,在操作系統中一顆物理CPU能當做多顆CPU來使用。
超線程有什么好處呢:
- 有效提升CPU利用率
- 改善計算機的性能
- 提高系統可靠性
比如奔騰G4560這種雙核在擁有超線程之后性能暴增,在低端入門市場相對受歡迎,雙核四線程的處理器能夠對應大多數輕量級日常應用。當然隨着核心數目增多超線程的作用就越弱,特別是那些八核或者核心數更多的處理器,十六個框框看起來很爽然而實際上用起來很多線程都是空載的,大多數消費者與應用都沒法很好的利用這么多線程的性能,目前只有視頻和3D渲染軟件和壓縮軟件有能做到,軟件還是制約硬件性能的最大因素。
另外,超線程技術需要CPU支持,需要主板支持,需要操作系統支持,還需要應用軟件支持,缺一不可,否則就玩不轉了。
