跳至內容

同時多執行緒

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

同時多執行緒(英語:Simultaneous multithreading,縮寫SMT)也稱同步多執行緒,是一種提高具有硬體多執行緒超純量CPU整體效率的技術。同時多執行緒允許多個獨立的執行執行緒更好地利用現代處理器架構提供的資源。

細節

[編輯]

名稱中的「多執行緒」有些曖昧,因為它不僅可以在一個CPU核心上同時執行多個執行緒,也可以是多個任務(哪怕不同分頁表、不同任務狀態段、不同分級保護域、不同I/O權限英語Task state segment#I.2FO port permissions等等)。儘管執行在同一個核心,它們彼此間完全分離。多執行緒在概念上類似搶占式多工處理,但在現代的超純量處理器中以執行緒級執行來實現。

同時多執行緒(SMT)是多執行緒的兩個主要實現之一,另一個是時間多執行緒英語Temporal multithreading(也稱超執行緒)。在時間多執行緒中,同一時間只有一個執行緒的指令可以在任何指定管線階段中執行。在同時多執行緒中,多於一個執行緒的指令可以在任何指定的管線階段中同時執行。完成它在基本的處理器架構上沒有太多改變:所需的主要添加是在一個周期中從多個執行緒取得指令的能力,以及一個更大的暫存器檔案來儲存來自多個執行緒的資料。並行執行緒的數量可以由晶片設計者決定。常見模式是每個CPU核心有兩個並行執行緒,但一些處理器的每個核心支援最多八個並行執行緒。

因為該技術實則是一種效率解決方案,並且不可避免地增加了共享資源的衝突,所以測量或認同該解決方案的有效性可能有困難。但是,使用並列的本機和受管理的工作負載在傳統130 nm到32 nm的Intel SMT(超執行緒)實現上測量SMT的能效發現,在45 nm和32 nm實現中,SMT極為節能,即使使用了inorder Atom處理器[ASPLOS'11]。在現代系統中,SMT有效使用非常少的額外動態功率達成並行。也就是說,即使在效能增益最小時,功率的節省也是可觀的。[來源請求]

一些研究人員已經表明,額外的執行緒可用來主動為高速緩衝記憶體等提供共享資源,從而提高另一個單執行緒的效能,並稱這表明SMT不只是一個效率解決方案。SMT的其他用法還有提供冗餘計算,以用於某種程度的錯誤檢測和恢復。

但在大多數情況下,SMT是有關隱藏主記憶體延遲、提高效率,以及增加每個所用硬體的計算吞吐量。

分類

[編輯]

在處理器設計中,有兩種方法以較少的資源需求來增加晶片並列性:一種是嘗試利用指令級並列性(ILP)的超純量技術;另一種是利用執行緒級並列性(TLP)的多執行緒方式。

超純量意味著在一個處理器晶片內以執行緒級並列性(TLP)同時執行多個執行緒的多個指令。有很多方法來支援晶片內的多個執行緒,即:

  • 交叉多執行緒:交錯發出不同執行緒的多個指令,也稱為時間多執行緒英語Temporal multithreading。它可以進一步分為細粒度多執行緒與粗粒度多執行緒,這取決於交錯發出的頻率。細粒度多執行緒——例如在一個桶處理器英語Barrel processor——在每個周期後發出不同執行緒的指令,而粗粒度多執行緒僅在當前執行執行緒導致一些長延遲事件(如頁錯誤等)時才切換到從另一執行緒的發出指令。粗粒度多執行緒對於執行緒之間較少的上下文交換是更常見的。例如,英特爾的Montecito英語Montecito (processor)處理器使用粗粒度多執行緒,而Sun的UltraSPARC T1使用細粒度多執行緒。對於每個核心只有一個管線的處理器,交叉多執行緒是唯一可能的方法,因為它在每個周期最多發出一條指令。
  • 同時多執行緒(SMT):在一個周期中發出多個執行緒的多個指令。處理器必須為超純量。
  • 晶片上多處理器(CMP或多核心處理器):將兩個或多個處理器整合到一個晶片,每個處理器獨立地執行執行緒。
  • 任何多執行緒/SMT/CMP的組合。

區分它們的關鍵因素是檢視處理器在一個周期中可以發出多少條指令以及指令來自哪些執行緒。例如,Sun Microsystems的UltraSPARC T1(2005年11月14日發布之前稱為「Niagara」)是一個多核處理器,它結合了細粒度多執行緒技術而不是同時多執行緒,因為每個核心一次只能發出一條指令。

歷史上的實現

[編輯]

雖然多執行緒CPU自1950年代以來一直存在,但是同時多執行緒在1968年才首次由IBM作為ACS-360專案的一部分進行了研究。[1]第一個採用SMT開發的主要商用微處理器是Alpha 21464英語Alpha 21464(EV8)。該微處理器由DEC與加利福尼亞大學聖地牙哥分校的Dean Tullsen和華盛頓大學的Susan Eggers和Henry Levy合作開發。微處理器從未發布,因為微處理器的Alpha系列在HP收購Compaq前不久就已停產,Compaq又收購了DEC。Dean Tullsen的成果也被用於開發英特爾奔騰4微處理器的超執行緒技術(Hyper-threading,或稱HTT)的版本,例如「Northwood」和「Prescott」。

現代的商用實現

[編輯]

英特爾奔騰4 HT是首個實現同時多執行緒的桌面處理器。英特爾將其稱之為超執行緒(Hyper-threading),並提供了一個基本的雙執行緒SMT引擎。英特爾宣稱這比其他參數完全相同但非SMT的奔騰4速度提高30%[2]。可觀察到的效能改進非常取決於應用;但是,當超執行緒打開並同時執行兩個需要處理器全力關注的程式時,它實際上似乎會稍慢一些。[3]這是由於奔騰4的重放系統英語Replay system占用了寶貴的執行資源,增加了對資源(例如頻寬、快取、TLB重排序緩衝區項)的爭用,均衡兩個程式之間的處理器資源增加了耗費的執行時間。奔騰4 Prescott核心獲得了一個重放佇列,減少了重放系統所需的執行時間。這足以完全克服效能下降。[4]

最新的MIPS架構設計包括一個稱為「MIPS MT」的SMT系統。[5]MIPS MT提供重量級虛擬處理元件和輕量級的硬體微執行緒。RMI英語RMI Corporation是一家基於Cupertino的初創公司,它是第一家提供八核心處理器SOC的MIPS供應商,其中每個核心執行四個執行緒。執行緒可以以細粒度模式執行,其中每個周期可以執行不同的執行緒。執行緒也可以分配優先級。Imagination Technologies的MIPS CPU的每個核心有兩個SMT執行緒。

IBM的Blue Gene/Q有四路SMT。

2004年5月宣布的IBM POWER5為雙核雙晶片模組(DCM),或者說四核或者八核多晶片模組(MCM),其每個核心包含一個雙執行緒SMT引擎。IBM的實現比以前更複雜,因為它可以為不同的執行緒分配不同的優先級,這更加細粒度,並且SMT引擎可以動態地開啟和關閉,從而更好地執行那些SMT處理器不能提高效能的工作負載。這是IBM通用可用硬體多執行緒的第二個實現。2010年,IBM發布了基於八核心的POWER7處理器的系統,每個核心具有四個智慧型並行執行緒。這切換執行緒模式為一個執行緒、兩個執行緒或四個執行緒,取決於當時排程的執行緒數量。這可以最佳化核心對最小回應時間或最大吞吐量的使用。IBM POWER8英語POWER8的每個核心(SMT8)有8個智慧型並行執行緒。

IBM z13英語IBM z13 (microprocessor)在每個核心(SMT-2)有兩個執行緒。

儘管許多人報告,昇陽電腦的UltraSPARC T1(在其於2005年11月14日發布前,它被稱為「Niagara」)和現在已經停用的代號Rock」(最早於2005年宣布,但在許多延誤後於2009年取消)的處理器是著眼於幾乎完全利用SMT和CMP技術的SPARC的實現,Niagara實際並不使用SMT。Sun將這些組合方法稱為「CMT」,並將整體概念稱為「吞吐量計算。Niagara有八個核心,但每個核心只有一個管道,因此實際上它使用細粒度多執行緒。不同於SMT,它的來自多個執行緒的指令在每個周期共享問題窗口{{fact}},處理器使用迴圈策略在每個周期發出下一個活動執行緒的指令。這使它更類似一個桶式處理器。Sun Microsystems的Rock處理器則不同,它有有多個管道的更複雜的核心。

甲骨文公司Sparc T3的每個核心有8個細粒度執行緒;Sparc T4、Sparc T5及Sparc M5、M6和M7的每個核心有8個細粒度執行緒,其中兩個可以同時執行。

富士通Sparc64 VI有粗粒度的垂直多執行緒(VMT),Sparc VII和更新版有雙向SMT。

英特爾安騰(Itanium)Montecito使用粗粒度多執行緒,Tukwila和更新版使用雙路SMT(雙域多執行緒)。

英特爾至強融核(Xeon Phi)有四路SMT(時間復用多執行緒),基於硬體的執行緒不能像常規超執行緒一樣被禁用。[6]

發布於2008年的英特爾Atom是英特爾首個實現雙路SMT特性(市場名「超執行緒」)而不支援指令重排序、推測執行和暫存器重新命名的產品。

英特爾酷睿2處理器不支援超執行緒,英特爾酷睿i3/i5/i7/i9部分型號支援超執行緒。

AMD Bulldozer微架構FlexFPU和共享二級高速緩衝記憶體為多執行緒,但模組中的整數核心為單執行緒,因此它是一個SMT的部分實現。[7]

AMD Ryzen有兩路SMT。

VISC架構[8][9][10]使用虛擬軟體層(翻譯層)以向全域前端分發單個指令執行緒,該全域前端將指令分割成虛擬硬體執行緒,然後將虛擬硬體執行緒分派到單獨的虛擬核心。這些虛擬核心可以將它們傳送到任何物理核心上的可用資源。多個虛擬核心可以將執行緒推入單個物理核心的重排序緩衝區中,其可以同時通過執行埠從多個執行緒拆分部分指令和資料。每個虛擬核心保持跟蹤相對輸出的位置。這種形式的多執行緒可以借允許單個執行緒使用CPU的所有資源來增加單執行緒效能。資源的分配在接近單個周期的延遲級別上是動態的(1-4個周期取決於分配的變化,這取決於各個應用的需要)。因此,如果兩個虛擬核心競爭資源,則有適當的演算法來確定在哪裡分配什麼資源。

缺點

[編輯]

根據處理器的設計和架構,如果任何共享資源是效能的瓶頸,同時多執行緒可能會降低效能。[4]批評者認為這讓軟體開發人員承擔很大的負擔,他們必須測試同時多執行緒是否適合其應用程式的各種情況,並插入額外的邏輯以在效能降低時將其關閉。目前的作業系統缺乏適合此目的的API呼叫,並會防止不同優先級的行程取得彼此的資源。[11]

某些同時多執行緒的實現還存有安全問題。英特爾的超執行緒實現就有一個漏洞,通過該漏洞,一個應用程式可能通過監視其高速緩衝記憶體的使用竊取在同一處理器中執行的另一應用程式的加密金鑰[12]

參見

[編輯]

參考資料

[編輯]
  1. ^ Mark Smotherman. End of IBM ACS Project. May 25, 2011 [January 19, 2013]. (原始內容存檔於2020-11-26). 
  2. ^ Marr, Deborah. Hyper-Threading Technology Architecture and Microarchitecture (PDF). Intel Technology Journal. February 14, 2002, 6 (1): 4 [25 September 2015]. doi:10.1535/itj. (原始內容 (PDF)存檔於2016-10-24). 
  3. ^ CPU performance evaluation Pentium 4 2.8 and 3.0. [2017-03-16]. (原始內容存檔於2021-02-24). 
  4. ^ 4.0 4.1 Replay: Unknown Features of the NetBurst Core. Page 15. Replay: Unknown Features of the NetBurst Core. xbitlabs.com. [24 April 2011]. (原始內容存檔於2011年5月14日). 
  5. ^ MIPS MT ASE description. [2017-03-16]. (原始內容存檔於2012-11-24). 
  6. ^ 存档副本. [2017-03-16]. (原始內容存檔於2017-05-03). 
  7. ^ 存档副本. [2017-03-16]. (原始內容存檔於2013-10-17). 
  8. ^ 存档副本. [2017-03-16]. (原始內容存檔於2020-11-29). 
  9. ^ 存档副本. [2017年3月16日]. (原始內容存檔於2017年5月12日). 
  10. ^ 存档副本. [2017-03-16]. (原始內容存檔於2017-03-29). 
  11. ^ How good is hyperthreading?. [2017-03-16]. (原始內容存檔於2011-10-09). 
  12. ^ Hyper-Threading Considered Harmful. [2017-03-16]. (原始內容存檔於2021-02-02). 
  • LE Shar and ES Davidson, "A Multiminiprocessor System Implemented through Pipelining", Computer Feb 1974
  • D.M. Tullsen, S.J. Eggers, and H.M. Levy, "Simultaneous Multithreading: Maximizing On-Chip Parallelism," In 22nd Annual International Symposium on Computer Architecture, June, 1995
  • D.M. Tullsen, S.J. Eggers, J.S. Emer, H.M. Levy, J.L. Lo, and R.L. Stamm, "Exploiting Choice: Instruction Fetch and Issue on an Implementable Simultaneous Multithreading Processor," In 23rd Annual International Symposium on Computer Architecture, May, 1996
  • H. Esmaeilzadeh, T. Cao, X. Yang, S.M. Blackburn, and K.S. McKinley, "Looking Back on the Language and Hardware Revolutions: Measured Power, Performance, and Scaling," In the ACM International Conference on Architectural Support for Programming Languages and Operating Systems, March 2011.

外部連結

[編輯]