同时多线程技术(Hyperthreading)是否属于“真正”的多核处理技术?
关于SMT(超线程)底层运行逻辑的解答
首先直接给结论:SMT既不是操作系统层面模拟的假核心,也不等同于完全独立的物理核心,是硬件层面实现的细粒度并行技术,日常场景下确实能带来接近额外物理核心的使用体验。
核心逻辑和传统线程切换的本质区别
- 无SMT的单核CPU运行多线程时,同一时间只能执行一个线程的指令,线程切换需要操作系统介入,把当前线程的上下文寄存器数据写回内存,再加载下一个线程的上下文,整体开销在几百个时钟周期,属于时间片轮转的“伪并行”。
- 支持SMT的物理核心,会在硬件层面单独配置多套独立的上下文寄存器(英特尔超线程是每个物理核配2套):包括通用寄存器、控制寄存器、中断寄存器全都是独立硬件资源,直接向操作系统暴露为2个可调度的逻辑核心,整个过程完全不需要操作系统做额外的模拟工作。
- 执行阶段SMT可以在同一个时钟周期内,从多个线程中取互不冲突的指令,分别调度到物理核心里闲置的执行单元(整数运算单元、浮点运算单元、加载存储单元等)同时运行:比如一个线程等待缓存命中的间隙,核心就可以直接调度另一个线程的指令跑在空闲执行单元上,完全没有软件切换的开销。
和物理核心的性能差异
SMT和独立物理核心的核心区别是,它共享物理核心的执行单元、各级缓存、总线带宽等核心资源:
- 如果运行的多线程资源需求不冲突(比如一个做整数运算、一个做IO等待),SMT带来的性能提升非常接近额外的物理核心,日常办公、网页浏览、后台多开这类场景几乎感受不到和物理核心的差异。
- 如果运行的多线程都要抢占同一种执行资源(比如两个线程都跑满浮点运算单元),就会出现资源竞争,这时候SMT的性能提升就会降到10%以下,极端场景甚至可能出现负优化。
通常消费级CPU的超线程技术,在通用多线程负载下能给每个物理核心带来30%50%左右的额外性能,比如4核8线程的CPU多线程性能大致相当于56核的无超线程CPU,完全不是“模拟核心的假象”。
内容的提问来源于stack exchange,提问作者Kaptain
相关产品推荐
相关产品推荐

