為什麼自從Intel發明超線程HT技術後,並不是每款新出的CPU都有這功能?
換句話說,有什麼場景,不需要甚至不能使用具有HT功能的CPU?
如果說是價格因素,那麼請看這兩款CPU的對比:ARK | 比較英特爾? 產品
這兩款CPU,參數差不多,價格都一樣便宜,只是一款有HT,一款沒有HT。
瀉藥。
先說一個重要問題,重複三遍:
超線程技術不是Intel發明的。
超線程技術不是Intel發明的。超線程技術不是Intel發明的。重定序緩衝(ROB),現代分支預測器(指至少1990以後的設計),Victim Cache,MSHR這些耳熟能詳的東西,以及超線程(學界內部叫同步多線程,亦即SMT),他們的真正發明人都是象牙塔內的一群學者(包括工業界研究院的),而不是Intel,1995年前的Intel還被DEC Alpha和MIPS兩大CPU Vendor按在地上揍呢。
介紹一些歷史八卦吧。
SMT的發明背景是這樣的,核心執行寬度提高以後,執行資源的利用率也暴降,4發射的寬度下就已經有很多浪費了,simulation的結果顯示8發射的實際利用率會跌到不滿30%(但饒是如此仍然擋不住很多不了解微結構的人狂熱地相信未來會出現10發射,20發射的CPU),所以需要同時插入來自多個線程的不相關指令嘗試發掘並行度。
知友王四貼的那三個人就是公認對SMT貢獻最大的(注意,是貢獻最大的人,而不是原始發明人,我看到的最先提出這一構想的一批論文發表於1990~1992年,並且我不懷疑還有更早的,而Tullsen組的SMT論文發表於1995年,這有點兒像踢足球,守門員、後衛、中場一路盤帶傳球給前場前鋒,最後Tullsen組完成了臨門一腳),那篇ISCA神文的一作Dean Tullsen也因此成名。
在SMT已經成為現實的情況下,SMT支持不支持與否就變成了一個商業決策了,比如加入SMT是不是會導致成本變高,會不會導致趕不上產品上市時間,以及全產品線支持SMT會不會導致產品之間區分度下降,等等,這就跟技術問題沒有太大關係了。超線程技術不是 Intel 發明的。
超線程的學名是「Simultaneous Multithreading」(同步多線程),這個榮耀歸於下面這三個人:
- Simultaneous Multithreading: Maximizing On-Chip Parallelism (
Abstract,
Postscript)Dean Tullsen,
Proceedings of the 22rd Annual International Symposium on Computer
Susan Eggers,
and
Henry Levy,
Architecture, June 1995.
This paper demonstrated the feasibility of simultaneous multithreading
with simulation-based speedups on several SMT machine models.
It was selected to appear in the 25th Anniversary Anthology of the
International Symposium on Computer Architecture.
有HT的那個主頻更低乃沒有注意到么 (i.e. 發熱更高)
而且在我們的超級計算機上面我們會手動關掉 HT,畢竟向量單元每核心只有一個,開 HT 不光會有 Cache 競爭還會有 context switch overhead, 跑一下 HPL 你就知道了
至於對比的那兩款同價處理器,沒有 HT 的是八路的,有 HT 的是四路的,這就是價差--多說幾句。Xeon Phi 的 HT 是 always on 的 不能關1. KNC 的 HT 並不是 Xeon 系列的 HT,KNC 的 HT 是實打實的 hardware threads, HT 這個說法是長期以來的謬傳,不過業界也已經習慣了。見what is the relation between "hardware thread" and "hyperthread"?2. KNC 是 in-order 架構,使用HT (hardware) 的目的是 hide latency,這樣的話可以讓核心在計算的同時忙於pulling data,保證使用率。所以 Intel 的建議是 KNC 上至少每核心使用兩路線程。HT是為了提高資源利用率設計,如果應用場景利用率本身就很高那麼HT就沒有價值,反而影響性能。另附:根據Intel的命名規則
E7-4860V2用於4路,E7-8857V2用於8路,也就是說在實際生產環境中,採用8857的伺服器將會有32個物理核心,要充分利用好這麼多核心的應用應該不需要HT來提高利用率了吧。
超線程這個東西並不是開了就一定比不開的好。
因為每個CPU核心裡ALU,FPU這些運算單元的數量是有限的,而超線程的目的之一就是在一個線程用運算單元少的情況下,讓另外一個線程跑起來,不讓運算單元閑著。
但是如果當一個線程整數,浮點運算各種多,當前核心運算單元沒多少空閑了,這時候你再塞進了一個線程,這下子資源就緊張了。兩線程就會互相搶資源,拖慢對方速度。
至於,超線程可以解決一個線程cache miss,另外一個可以頂上,但是如果兩個線程都miss了,那就只有都在等了。這個還是沒有GPU里一個SM里很多warp,超多線程同時跑來得有效果。
所以,如果你的程序是單線程,關了超線程,免得別人搶你資源,如果是多線程,每個線程運算不大,超線程比較有用。超線程其實就是兩個線程共享一個計算單元和內存控制單元,但有自身獨立的一些硬體,目的是兩個都不是全負荷工作的線程可以輪流使用計算單元來實現比較好的 throughput. 但只要有一個很忙,那就可能餓死另一個
推薦閱讀:
※怎樣理解Altera被intel收購??
※對HPC領域來說,Intel Xeon Phi 真能幹掉GPU 么?
※如何評價英特爾8代酷睿處理器的國行價格?
※怎麼看待INTEL處理器支持AVX-512指令集?
※英特爾顯卡相比其他顯卡如何?