同时多线程(Simultaneous Multithreading,缩写 SMT)是一类处理器硬件多线程技术,允许同一个物理核心保存多个线程的执行状态,并在每个时钟周期内从多个线程中挑选指令发射执行[1]。它针对的问题是:单个线程常因等待内存或数据依赖而停顿,使核心内部的执行单元大量闲置,而多个线程共用一套执行资源恰好可以互相填补这些空档[2]。英特尔把自家实现命名为超线程(Hyper-Threading),这是该技术最为人熟知的商业形态[3]。
定义
同时多线程是硬件多线程的两种主要实现方式之一,另一种是时间片多线程,也称超级线程。二者的分界在于同一周期内单个流水级能容纳几个线程的指令:时间片多线程只允许一个,同时多线程则允许一个以上[1]。
在开启该技术的核心中,操作系统所见到的是多个逻辑处理器。每个逻辑处理器各自持有一套架构状态,包括程序计数器与通用寄存器,但它们共同使用执行单元、各级缓存、分支预测逻辑、控制电路与总线等物理资源[2]。正因多个线程共用同一套执行资源,当核上只有一个线程在跑时,其余线程可以利用闲置部分,从而改善整体性能与系统响应[2]。
业界通常用每核心可承载的线程数来描述同时多线程的开启程度。英特尔与 AMD 的处理器一般在每个核心上提供 2 个硬件执行线程,因此常能见到 4 核 8 线程一类的规格标注[4]。
原理
现代超标量处理器每个周期可以发射多条指令,提升单核性能的思路之一是让彼此不依赖的指令并发执行,即指令级并行。但指令之间的依赖与资源冲突使后端执行端口难以被均匀填满,随着执行资源不断加宽,闲置情况反而更明显,于是一种做法是引入更多线程来填补这些空档[5]。
实现同时多线程对基本处理器结构的改动并不算大,主要需要增加两项能力:在一个周期内从多个线程取指,以及容量更大的寄存器堆以存放来自多个线程的数据[1]。并发线程的数量由芯片设计者决定,每核心 2 个线程较为常见,也有处理器支持每核心最多 8 个线程[1]。
该技术与多核处理器不是一回事:多核依靠增加相互独立的物理核心来获得并行能力,同时多线程则是在单个物理核心内部做文章,挖掘已被占用资源的剩余空间[6]。也正因如此,它的收益不能按逻辑线程数等比例放大。
发展历程
1995 年,华盛顿大学的迪恩·图尔森、苏珊·埃格斯与亨利·利维发表论文《同时多线程:最大化片内并行》,为这一概念正式定名。该项目始于 1994 年初,当时的商用微处理器虽已能每周期发射多条指令,却因指令依赖和较长的访存延迟而很少真正达到这一发射宽度[7]。该文发表于 1995 年 6 月 22 日至 24 日举行的第 22 届国际计算机体系结构研讨会[8]。
20 世纪 90 年代末,IBM 的 AS/400e“NorthStar”处理器是较早具备同时多线程能力的精简指令集处理器之一[9]。此后 IBM 的 POWER5 首次支持每核心 2 个线程,POWER7 提高到每核心 4 个,2014 年发布的 POWER8 则实现每核心 8 个线程[10]。
英特尔在 2002 年 2 月把超线程首先用于至强服务器处理器,同年 11 月扩展到奔腾 4 桌面处理器,其后又出现在安腾、凌动和酷睿系列中[3]。不过超线程所依据的构想,此前已由太阳微系统公司取得专利[3]。
AMD 在其 Zen 系列处理器中也引入了每核心 2 线程的同时多线程方案,此后该技术逐渐成为个人计算机与服务器处理器的常见配置[5]。
应用
同时多线程如今见于通用处理器与服务器平台,是家用与服务器中央处理器上较为普遍的一项配置[5]。在 IBM Power 平台上,每个核心可以配置为 SMT 级别 1、2、4 或 8,不同级别对应的虚拟处理器数量也不同[11]。
在云与虚拟化环境下,服务商可以把一个物理核心上的多条硬件线程分别作为虚拟处理器分配给用户;而关闭多线程后每核只允许一个线程运行,对某些负载能提供更高或更可预期的性能[4]。
用户通常可以在固件设置中自行启用或停用 SMT,多家整机厂商也为此提供了相应的 BIOS 更新[12]。在服务器一侧,操作系统与硬件还能随负载在单线程与多线程模式之间动态切换,以兼顾吞吐与单线程表现[13]。
局限
同时多线程的性能收益与负载高度相关。常见的提升幅度约为 10% 至 30%,远达不到核心数翻倍的效果[6]。当两个线程争抢同一批缓存与执行单元时,单线程性能可能出现下滑,实测结果的区间大致在下降一成到提升三成之间[14]。
由于多个执行单元被更充分地占用,支持超线程的处理器通常比不开启时消耗更多电力,这对以电池供电的移动设备等对功耗敏感的场合构成约束[15]。共享资源必然带来冲突,这也使得该技术实际效果的衡量与评估本身存在困难[1]。
在安全层面,同一核心上多个线程共用执行端口等资源会形成时间侧信道。2018 年 11 月 2 日公开的 PortSmash(编号 CVE-2018-5407)由坦佩雷理工大学与哈瓦那大学的研究者提出,他们借助 SMT 造成的资源争用建立侧信道,演示中从 OpenSSL 中提取到私钥[16]。英特尔认为该方法与早先已知的执行时间侧信道属于同类,与 Spectre、Meltdown、L1TF 等推测执行类问题不同,并主张以编程层面的手段缓解,而不建议为此关闭超线程[16]。
尽管如此,仍有系统选择在系统软件层面停用该功能,OpenBSD 即于 2018 年 6 月在内核中关闭了 SMT[12]。同年出现的 TLBleed 同属这一类利用共享资源的攻击,但发现者之一认为它并不构成新一代 Spectre 级别的威胁[12]。
参见
参考资料
- epfl.ch 上的网页 . epfl.ch [引用日期2026-09-29]
- google.com 上的网页 . google.com [引用日期2026-09-29]
- epfl.ch 上的网页 . epfl.ch [引用日期2026-09-29]
- Class AmdVmUpdateInstancePlatformConfig . oracle.com [引用日期2026-09-29]
- 说一说超线程/同步多线程(HT/SMT)技术那些事儿 . zhihu.com [引用日期2026-09-29]
- Multithreading 与 Hyperthreading:详解与对比 . baeldung-cn.com [引用日期2026-09-29]
- JavaScript disabled - RETROSPECTIVE: . acm.org [引用日期2026-09-29]
- acm.org 上的网页 . acm.org [引用日期2026-09-29]
- Threading The Needle Of Power8 Performance . itjungle.com [引用日期2026-09-29]
- IBM i環境でのSMTサポートについて . ibm.com [引用日期2026-09-29]
- IBM Fusion . ibm.com [引用日期2026-09-29]
- techrepublic.com 上的网页 . techrepublic.com [引用日期2026-09-29]
- Use POWER7 Features with IBM i 6.1.1 - Dawn May Consulting . dawnmayi.com [引用日期2026-09-29]
- stackoverflow.com 上的网页 . stackoverflow.com [引用日期2026-09-29]
- google.com 上的网页 . google.com [引用日期2026-09-29]
- More Information on PortSmash . intel.com [引用日期2026-09-29]
浏览次数:0 次
阅读量:0 次 · 阅读完成量:0 次
最近更新:2026-09-29T12:48:58Z
完成率 = 阅读完成量 ÷ 阅读量,分母是阅读量不是浏览次数 —— 关了 JS 的、秒退的都在浏览次数里、不在阅读量里。 详细口径在后台的「数据统计」页。