同时多线程

細節

名稱中的「多執行緒」有些曖昧，因為它不僅可以在一個CPU核心上同時執行多個執行緒，也可以是多個任務（哪怕不同分頁表、不同任務狀態段、不同分級保護域、不同I/O權限等等）。儘管執行在同一個核心，它們彼此間完全分離。多執行緒在概念上類似搶占式多工處理，但在現代的超純量處理器中以執行緒級執行來實現。
同時多執行緒（SMT）是多執行緒的兩個主要實現之一，另一個是時間多執行緒（也稱超執行緒）。在時間多執行緒中，同一時間只有一個執行緒的指令可以在任何指定流水線階段中執行。在同時多執行緒中，多於一個執行緒的指令可以在任何指定的流水線階段中同時執行。完成它在基本的處理器架構上沒有太多改變：所需的主要添加是在一個周期中從多個執行緒取得指令的能力，以及一個更大的暫存器檔案來儲存來自多個執行緒的資料。並行執行緒的數量可以由晶片設計者決定。常見模式是每個CPU核心有兩個並行執行緒，但一些處理器的每個核心支援最多八個並行執行緒。
因為該技術實則是一種效率解決方案，並且不可避免地增加了共享資源的衝突，所以測量或認同該解決方案的有效性可能有困難。但是，使用並列的本機和受管理的工作負載在傳統130 nm到32 nm的Intel SMT（超執行緒）實現上測量SMT的能效發現，在45 nm和32 nm實現中，SMT極為節能，即使使用了inorder Atom處理器[ASPLOS'11]。在現代系統中，SMT有效使用非常少的額外動態功率達成並行。也就是說，即使在效能增益最小時，功率的節省也是可觀的。
一些研究人員已經表明，額外的執行緒可用來主動為快取記憶體等提供共享資源，從而提高另一個單執行緒的效能，並稱這表明SMT不只是一個效率解決方案。SMT的其他用法還有提供冗餘計算，以用於某種程度的錯誤檢測和恢復。
但在大多數情況下，SMT是有關隱藏記憶體延遲、提高效率，以及增加每個所用硬體的計算吞吐量。

歷史上的實現

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

現代的商用實現

英特爾奔騰4是首個實現同時多執行緒的現代桌面處理器，它自2002年發布的3.06 GHz型號開始陸續推出了許多處理器。英特爾將其稱之為超執行緒（Hyper-threading），並提供了一個基本的雙執行緒SMT引擎。英特爾宣稱這比其他參數完全相同但非SMT的奔騰4速度提高30％。可觀察到的效能改進非常取決於應用；但是，當超執行緒開啟並同時執行兩個需要處理器全力關注的程式時，它實際上似乎會稍慢一些。這是由於奔騰4的重放系統占用了寶貴的執行資源，增加了對資源（例如頻寬、快取記憶體、TLB、重排序緩衝區項）的爭用，均衡兩個程式之間的處理器資源增加了耗費的執行時間。奔騰4 Prescott核心獲得了一個重放佇列，減少了重放系統所需的執行時間。這足以完全克服效能下降。
最新的MIPS架構設計包括一個稱為「MIPS MT」的SMT系統。MIPS MT提供重量級虛擬處理元件和輕量級的硬體微執行緒。RMI是一家基於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的每個核心（SMT8）有8個智慧型並行執行緒。
IBM z13在每個核心（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（時間復用多執行緒），基於硬體的執行緒不能像常規超執行緒一樣被禁用。
發布於2008年的英特爾Atom是英特爾首個實現雙路SMT特性（市場名「超執行緒」）而不支援指令重排序、推測執行和暫存器重新命名的產品。在超執行緒於「酷睿」微架構上缺席後，英特爾隨Nehalem微架構重新推出超執行緒。
AMD Bulldozer微架構FlexFPU和共享二級快取記憶體為多執行緒，但模組中的整數核心為單執行緒，因此它是一個SMT的部分實現。
AMD Zen微架構有兩路SMT。
VISC架構使用虛擬軟體層（翻譯層）以向全局前端分發單個指令執行緒，該全局前端將指令分割成虛擬硬體執行緒，然後將虛擬硬體執行緒分派到單獨的虛擬核心。這些虛擬核心可以將它們傳送到任何物理核心上的可用資源。多個虛擬核心可以將執行緒推入單個物理核心的重排序緩衝區中，其可以同時通過執行埠從多個執行緒拆分部分指令和資料。每個虛擬核心保持跟蹤相對輸出的位置。這種形式的多執行緒可以借允許單個執行緒使用CPU的所有資源來增加單執行緒效能。資源的分配在接近單個周期的延遲級別上是動態的（1-4個周期取決於分配的變化，這取決於各個應用的需要）。因此，如果兩個虛擬核心競爭資源，則有適當的演算法來確定在哪裡分配什麼資源。

缺點

根據處理器的設計和架構，如果任何共享資源是效能的瓶頸，同時多執行緒可能會降低效能。批評者認為這讓軟體開發人員承擔很大的負擔，他們必須測試同時多執行緒是否適合其應用程式的各種情況，並插入額外的邏輯以在效能降低時將其關閉。目前的作業系統缺乏適合此目的的API呼叫，並會防止不同優先級的行程取得彼此的資源。
某些同時多執行緒的實現還存有安全問題。英特爾的超執行緒實現就有一個漏洞，通過該漏洞，一個應用程式可能通過監視其快取記憶體的使用竊取在同一處理器中執行的另一應用程式的加密金鑰。