奔騰四採用的超線程技術與SNB之後的CPU採用的超線程技術是同一個技術嗎?

雖然都是超線程,它們有沒有什麼區別?


對於我們軟體開發人員的角度上來說,超線程技術實際上就是多給我們了一個邏輯核心。

在硬體角度上來說,超線程技術實際上是添加了計算單元和邏輯單元,但是沒有分配緩存和控制器的邏輯核心。這個邏輯核心可以進行獨立的計算,但是緩存【無論是指令緩存還是數據緩存】是和物理核心共享的,也就是說物理核心分出了一部分L1和L2給超線程的邏輯核心。

根據不同的超線程設計,不僅存在每個超線程邏輯核心都有物理ALU的情況,也有共享ALU的情況。Logical CPU Pointer卻肯定是每個邏輯核心一個。也就是說IBM的Power系列能實現8個邏輯核心就肯定集成了8個LCP。Intel的每個核心中都集成了2個APIC【可編程中斷控制器】【不是AIPC!!!】。

理論上來說,intel的超線程技術並沒有給LCP分配物理L1和ALU,也就是說超線程在系統優化中是有所側重的。比如我之前做的一個物理運算的程序,使用真8核燒烤機按摩店8350就要明顯快於i7-4790,同時i7的速度和i5速度並沒有太多差距,這是因為每個線程執行的內容都包含極其複雜的連續運算,每個線程都有很高的負載,超線程在這種情況下反而成為系統的負擔。但是對於圖像渲染等非連續運算,超線程技術卻又非常有優勢。

對於Power系列處理器,18摸主要用Power系列做的是高性能Server,Server需要處理的絕大多數request都是可以迅速處理的、簡單的一些service,邏輯核心越多,越能給出越快的request。

96個邏輯核心,你們感受一下。


從我能找到的資料來說,原理相同、實現上大致看來(指資源設定以及主要執行步驟)基本相同。

@崔瀚文 的答案中有一點我稍有疑問:

著作權歸作者所有。

商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

作者:崔瀚文

鏈接:奔騰四採用的超線程技術與SNB之後的CPU採用的超線程技術是同一個技術嗎? - 崔瀚文的回答

來源:知乎

在硬體角度上來說,超線程技術實際上是添加了計算單元和邏輯單元,但是沒有分配緩存和控制器的邏輯核心。

從多線程的功用角度來說,主要的計算單元(或是執行部件)不太可能獨立。個人覺得就算存在這樣的CPU,我想也應該是少數。

=================================

1. Pentium 4 HT(NetBurst)和Core i7(Nehalem)中的超線程技術一樣嗎?

Intel的超線程技術在2002年2月發布的志強處理器中首次出現,並在同年12月發布的Pentium 4 HT中同樣加入了這一技術[1]。關於此時的Intel的超線程技術的論文比較多,比如(Deborah T. Marr et al, 2002)[2]。論文中提到,architecture state在各個邏輯線程中是獨立存在的,而其餘幾乎所有資源都是共享的。Architecture state主要包括的是各種寄存器,例如通用寄存器、控制寄存器CR以及APIC寄存器等;而共享的包括緩存、執行部件、分支預測、控制邏輯以及匯流排。

而後來在Nehalem核心(Core i7)中重新回歸的超線程技術,我沒有找到官方詳細的論文。不過找到了一個德克薩斯AM大學博士生的論文,關於Nahalem核心的[3]。文中同樣提到:對於同一個物理核上的邏輯核心,它們之間

    • 獨立:寄存器狀態、返回棧緩衝(用於預測函數返回指令)、指令TLB(用於加速虛擬地址與物理地址的轉換)
    • 分隔(靜態劃分):各種緩衝
    • 競爭共享:分為SMT-sensitive 和SMT-insensitive。保留棧(用於實現亂序執行)、數據TLB、二級TLB等屬於SMT-sensitive,所有執行單元均為SMT-insensitive。

以及共享Cache。

所以結構上看,基本一致。

兩篇論文中都有提到CPU的Pipeline(流水線結構)。當Nehalem開啟超線程時,將從兩個線程中取指令,之後送入後端亂序執行引擎執行。而[1]中提到得Pentium 4在開啟超線程後的做法則更為詳細:兩套指針分別記錄兩個線程的PC,解碼後存入Execution Trace Cache(其為一級指令緩存的主要部分)。兩個線程再按照時鐘周期依次訪問這個Cache。如果有一個線程stall住了,則另一個隨意用。

大致來看,主要步驟基本相同。不過細節不太清楚。

2. 什麼是超線程?

超線程(即Simultaneous multithreading[4])屬於線程級並行方法。在說超線程技術(多線程技術)之前,我們先來看一下超標量技術。

超標量技術是一種指令級並行技術,具備超標量特性的CPU具有同時發射多條指令的能力,這樣CPU就可以充分利用各種執行部件。舉例來說,如果單發射一條加法指令,那麼在執行過程中只有加法部件(或算數計算部件)被利用起來;如果我有兩條指令:add R1, R2; shr R3, 3(加法和右移),如果兩條指令同時執行,那麼加法部件和移位部件就同時利用起來了。

然而能夠同時執行的前提是:兩條指令之間不能有相關性。例如第一條指令需要寫R1,第二條指令需要讀R1,那麼這兩條指令無法同時執行。由此即誕生出了亂序執行(Out of Order)技術:如果第三條指令與前兩條指令沒有相關性,則可以先執行第三條指令。

超線程技術則可以更加充分地利用執行部件:同時執行兩條線程,進一步降低了指令之間的相關性。同時,如果一個線程需要訪存(意味著大量的時鐘周期可能被浪費)、或是分支預測失敗(意味著需要清空流水線),超線程的優勢就更明顯了。

然而對於超線程技術的優劣則有激烈的討論,主要集中在性能的提升的同時晶元面積與功耗等也在增加,這樣的trade-off是否合適。

3. 關於超線程技術消失又重現

Pentium Pro、Pentium 2、Pentium 3所使用的架構均為P6架構,Pentium 4使用Netburst架構,後續的Core 2使用的是Core架構,從Core i系列開始進入Nehalem/Sandy Bridge架構等[5]。

然而,NetBurst是相對獨立的一個架構,讓人記憶深刻的就是超長的流水線和相當高的頻率。而Core架構是基於P6的變種Pentium M的架構改進而來的。在Intel的一個Slides中也可以得知,NetBurst和P6的Pipeline差異較大,Nehalem的基礎需要在二者中做出選擇。而最後做出讓多線程回歸的決定,也是一種「抉擇」[6]。

Reference

1. Hyper-threading

2. Marr
D, Binns F, Hill D L, et al. Hyper-Threading Technology Architecture
and Microarchitecture[J]. Intel Technology Journal, 2002, 6(1):1.

http://www.cs.sfu.ca/~fedorova/Teaching/CMPT886/Spring2007/papers/hyper-threading.pdf

3. Thomadakis M E. The Architecture of the Nehalem Processor and Nehalem-EP SMP Platforms[J]. Jfe Technical Report, 2011.

http://sc.tamu.edu/systems/eos/nehalem.pdf

4. Simultaneous multithreading

5. Nehalem (microarchitecture)P6 (microarchitecture)Intel Core (microarchitecture)

6. http://web.stanford.edu/class/ee380/Abstracts/100217-slides.pdf


我理解早期的超線程實際上執行指令的部件只有一套,實現超線程是利用了cpu執行時鐘比主頻快一倍的這個特性。實際上是分時復用。相當於一個勤快的人同時打兩份工。

後期的超線程就開始往上羅東西,比如說alu變成了兩個,這相當與一個人打的兩份工都是腦力型勞動,索性就給他安了兩個腦袋。


程序的角度看大概沒有區別,硬體實現肯定不一樣


推薦閱讀:

ARM彙編和X86彙編哪個難?
如何看待李楠《ARM vs X86 之爭塵埃落定》一文?
如何掌握Intel Intrinsic Instruction?
如果說 RISC 的性能不如 CISC,那為什麼很多超算是 RISC 架構的?
x86 結構會被 ARM 結構淘汰嗎?

TAG:英特爾Intel | x86 | 中央處理器CPU | 電腦硬體 | 處理器技術 |