為什麼 Intel 的超線程技術是一個核兩條線程,而不是更多?
2 是最優的嗎?
可以說是最優的。CPU在執行單線程任務時,並不是核心內每一個單元都在工作。而超線程技術就是讓閑著的那些執行單元去做另一個線程的工作。這時你會看到兩個線程同時進行。但是假設有兩個線程在某一時刻都要使用CPU中的一個特定執行單元,那麼他們倆就沒法同時執行了,只能一個一個來。超線程的本意是提高CPU的使用效率,雖然增加了5%的晶元面積用以實現超線程技術,但是它帶來的性能提升超過了它的成本。
那麼為什麼不超更多呢?因為CPU(這裡主要談PC的CPU)是按照一個核心執行一個線程的本意來設計的。在一個核心執行多個線程的情況下,線程越多,管理他們所需的代價就越大,而且由於資源的搶佔問題,要麼在核心內設置很多冗餘硬體,要麼就要承擔線程等待自己所需的硬體的開銷。所以,一個核心執行一個線程,是效率最高的選擇。如果它偶爾有餘力,我們再加一個線程,利用他的餘力。可能它真的有時候有餘力執行更多線程,但是那種情況太少了,去處理它所花費的代價超過了帶來的提升。好比你自己一個人包餃子,包多了吃不了可以給鄰居送去。但是如果你明知自己的飯量,還回回包四個人份的,那不是有病嗎?剛剛看到了IBM的power7處理器,8核32線程,( @另一隻襪子 告訴我power8有12核96線程!)確實很強,一個核超成四個。我覺得應該是因為伺服器CPU對高並發需求很大,總合考慮了增加核心的成本和超線程的成本他們才決定超更多的吧。而且伺服器的線程應該不像家用電腦的線程差異那麼大,所以應該還是比較好控制的。
剛才看了另一位知友的回答,才想起來伺服器和PC的區別。PC關心的是延遲,就是我面前這個程序還要幾秒能打開;而伺服器關心的是吞吐率,我響應一個客戶端再快也沒有用,我寧願讓大家都等一秒鐘,然後一次響應成百上千個客戶端。這也是伺服器為什麼喜歡多線程的原因之一吧。以前學的東西都忘記了,要在貴乎裝逼還需要多努力啊!注重的計算領域不同,Intel也有一分多的,比如xeon phi。phi比較適合浮點計算,有點像計算卡,但卻是x86的,就拿最新的xeon phi 7290為例,有72個核心288個線程。
intel Xeon Phi 就是單核四線程,不過他的單核計算資源放大過。
如圖

右邊兩個分別是IBM POWER9 SMT8 和 SMT4 的核心。
超線程只是在理想情況下可以充分利用好一個物理核的所有部件,但實際情況下很難做到,尤其是運算量很大讓計算核達到滿載的時候,實際使用中會發現有時候不開超線程性能反而更好。
測過雙路 E5 2660,16個物理核,單核2個超線程,一共32個。在上面跑一些比較密集的計算任務時(例如流體力學運算),明顯能看到開16個進程比32個進程性能會更好。雖然有些部件閑置了,但是畢竟一個物理核的兩個超線程還是相互有影響的,帶來的副作用可能會更嚴重。而且超線程加重CPU負載之後 Turbo Boost 的效果也會減弱。
不過其實不止是IBM的Power,Intel最新的KNL協處理器也能支持到單核4線程。官方給出的報告中說測試下來普遍情況下單核2個線程比單線程性能好很多,某些應用下單核4線程還能再提升性能。應該是裡面的硬體架構有作提升或者用了什麼新的技術吧,具體的我沒看了。另外一點也是要看跑什麼樣的任務,不同應用根據計算量、通信、訪存等等的差異,有的更適合單線程,有的可能會適合多線程。
所以單核2個超線程應該是多種因素考慮下妥協的結果吧,可能人家很早就做過更多的,但是測試出來效果並不好或者跟成本不成比(流水線深度、Cache大小這些是不是也有這方面的道理呢?多了也不一定有效,還得考慮成本進行trade off),畢竟是商業產品,而且Intel的CPU本身作為通用處理器要做很多除了運算以外的事情(有大量的計算扔給GPU或者Xeon Phi啊),估計2個超線程在各方面都要更適合吧。
記得以前一個數據說Intel超線程只能帶來20%多的性能提升。那說明超線程瓶頸在計算單元而不是調度單元,加更多的線程數意義也不大了。
x86體系結構的原因,通用寄存器少,不適合開太多線程,沒那麼多資源可供分享。
百度融核。1C2T是最優的
推薦閱讀:
※如何評價E3-1200 V6 CPU 發布?
※為什麼不能增大CPU面積來提高CPU性能?
※為什麼 CPU 市場 Intel 明顯領先 AMD,但 GPU 市場 AMD 和 NVIDIA 在膠著?
※cpu超頻有什麼用?
※Intel 酷睿2雙核 T6670和Intel Core/酷睿 i5-5200U哪個好?
TAG:中央處理器CPU |
