超线程技术:历史、实现与影响

超线程技术,也被称为Hyper-Threading或者同时多线程技术(Simulate MultiThreading,简称SMT),可以让单个物理CPU核心看起来像两个或者多个独立的处理器。这样,处理器可以同时处理多个任务,大大提高了CPU的使用效率。

历史上很多的CPU都应用了超线程技术,比如我这里有个多核的Intel处理器,它的内核是6个,也就是有6个物理CPU核心,但是它的逻辑处理器有12个,这就是使用了超线程技术,将每个物理CPU核心虚拟成了两个逻辑CPU核心。大家可以打开自己的Windows任务管理器看看自己的CPU是不是超线程的。

本文将从超线程技术的历史谈起,然后介绍其实现方式和优缺点,让大家有个完整的认识。

历史

首先,我们来回顾一下超线程技术的历史。 早在1973年,Edward S. Davidson和Leonard. E. Shar就在一篇论文中首次描述了通用处理器中的超线程技术。

1982年,Denelcor公司在异构元素处理器(EHP)中引入了多线程技术,它允许当一个进程的指令阻塞时,另一个进程可以继续使用这个pipeline。

1994年,Sun公司的Kenneth Okin获得了超线程技术的美国专利,但由于当时的CMOS工艺技术还不够先进,所以无法经济高效地实现超线程。

2002年,Intel在Xeon和Pentium 4处理器上开始引入超线程技术,并逐步发扬光大。

然而2013年,英特尔在Silvermont处理器内核中放弃了SMT,转而支持无序执行,因为这种方式在处理器内核数量较少时,性能更好,能效更高。

2019年,随着Coffee Lake的出现,除了最高端的Core i9部件或Pentium Gold CPU,Intel开始不再在主流Core i7桌面处理器中使用超线程技术。同时,由于新的CPU漏洞攻击的出现,Intel建议在多租户或者高安全要求的情况下禁用超线程技术。

实现方式

那么,超线程技术是如何实现的呢?

在超线程技术中,一个物理CPU核心被伪装成两个以上的逻辑CPU核心,看起来就像多个CPU在同时执行任务。这是通过在一个物理核心中创建多个线程实现的,每个线程都有自己的PC寄存器、指令寄存器和条件码寄存器。当线程A的指令停顿的时候,物理CPU核心的译码器和算术逻辑单元(ALU)就会空出来,这时线程B就可以运行自己的指令。这样就可以提高CPU的利用效率。

就像下面这条路,很笔直,但是总是空荡荡的,我们给它引入两个入口,把更大范围的车辆引入进来,提到了道路的使用效率。

图片来源:pixabay.com/zh/photos/f...

需要注意的是,如果译码器和ALU也是双份的,那么这就是真正的多个CPU核心了,不能称为超线程技术。

注意超线程技术与编程语言中的线程是不同层面上的两个东西。本文主要讲解的超线程技术是CPU硬件层面上的概念。而编程中的线程,是操作系统级别的概念,是软件层面上的概念。

编程中的线程技术,是通过编程语言的API创建和管理线程,让一个程序可以同时执行多个任务。此时,操作系统负责调度各个线程的执行,当一个线程阻塞时,可以切换到另一个线程继续执行,从而提高程序的响应性和并发性。

CPU超线程技术与操作系统线程技术一起工作,可以使计算机系统在硬件和软件两个层面上都实现并行处理,进一步提高计算性能。

优缺点

超线程技术的效果如何呢?

首先,它非常适合运行内存IO密集而非计算密集的应用程序,因为IO操作会有更多的等待时间可以被利用。大多数的业务服务程序都属于IO密集型程序,因为这种程序中主要的逻辑就是读写数据库、访问远程接口,所以服务器一般都会启用CPU超线程。

据Intel称,Pentium 4应用超线程技术后,虽然CPU多使用了5%的芯片面积,但性能却提高了15%-30%。

然而,超线程也有其弊端,例如,它会导致总体延迟的增加、能耗的增加以及CPU缓存的抖动。吞吐量能否提升和应用程序的计算类型密切相关。

此外,超线程技术还存在安全风险。比如恶意程序可以通过测量自己的执行时间,实现监视同一个核心上其他线程的内存访问情况,从而达到窃取加密信息的目的。


总的来说,超线程技术是一种提高计算机处理能力的有效手段,但它也有可能带来性能下降、能耗增加和安全风险等问题,同时随着其它优化技术的发展,我们也有了更多的选择来提升CPU等使用效率。因此,我们在使用超线程技术时,需要根据实际情况进行权衡。

更多学习资源

我注册了一个微/信/公/众/号:萤火架构,后续会分享很多架构方面的真实经验和认知,欢迎关注,以免错过精彩内容。

相关推荐
遇见火星6 小时前
Linux性能调优:理解CPU中的平均负载和使用率
linux·运维·服务器·cpu
MZWeiei2 天前
并行乘法器:原码阵列乘法器vs补码阵列乘法器的理解
计算机组成原理·原码阵列乘法器和补码阵列乘法器
阿昭L5 天前
计算机的性能
计算机组成原理
阿昭L7 天前
RISC-V指令简介
risc-v·计算机组成原理
云雾J视界7 天前
多Stream并发实战:用流水线技术将AIGC服务P99延迟压降63%
aigc·api·cpu·stream·gpu·cuda·多并发
liulilittle8 天前
C++ SSE/AVX/SHA/AES指令集检查,用于程序定向优化。
开发语言·c++·cpu·asm·detect·il·features
bloglin999998 天前
虚拟机配置CPU数量和每个CPU内核数量
cpu
Molesidy9 天前
【Embedded Development】CPU-MCU-MPU-SoC-DSP-FPGA-GPU-ECU的区别
cpu
REDcker10 天前
软件开发者需要关注CPU指令集差异吗?
linux·c++·操作系统·c·cpu·指令集·加密算法
茶杯67512 天前
玩游戏CPU高性价比推荐:i5-14600K深度解析——2K高帧率+直播推流全搞定的全能U
cpu·玩游戏cpu高性价比