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

超线程技术,也被称为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等使用效率。因此,我们在使用超线程技术时,需要根据实际情况进行权衡。

更多学习资源

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

相关推荐
christine-rr21 小时前
CPU架构的演进:从冯·诺依曼到未来计算
架构·arm·cpu
切糕师学AI2 天前
现代CPU设计哲学——加载/存储(Load-Store)架构
硬件架构·cpu·处理器
伟大的大威5 天前
K8s基于节点软亲和的高 CPU Pod 扩容与优先调度方案
k8s·cpu
zwhSunday6 天前
计组(2)CPU与指令
cpu·计算机组成原理
mu_guang_8 天前
计算机算术8-浮点加法
算法·cpu·计算机体系结构
小Lu的开源日常8 天前
为什么计算机用“补码”存储整数?
设计模式·面试·计算机组成原理
triticale9 天前
【计算机组成原理】LRU计数器问题
cache·计算机组成原理·lru
杰克逊的日记9 天前
gpu与cpu各厂商的优劣
运维·cpu·gpu
大模型铲屎官10 天前
【数据结构与算法-Day 20】从零到一掌握二叉树:定义、性质、特殊形态与存储结构全解析
人工智能·python·深度学习·二叉树·大模型·计算机组成原理·数据结构与算法
伊织code15 天前
PyTorch API 2
pytorch·api·cpu·cuda·微分·autograd