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

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

更多学习资源

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

相关推荐
YY_D_S_6 天前
【机组】概述精炼考点(冯诺依曼、层次结构、翻译语言、执行程序的过程、基本工作原理、运算器、控制器、存储器)
计算机组成原理·机组
驱动小百科8 天前
NPU是什么?电脑NPU和CPU、GPU区别介绍
电脑·cpu·gpu·npu·电脑硬件
superiony9 天前
【计算机组成原理】实验二:通用寄存器单元实验
计算机组成原理·通用寄存器
青春pig头少年15 天前
《计算机组成原理》(408大题)
学习笔记·408·计算机组成原理
moonless022216 天前
【GISer精英计划_00】从二进制到协议、到计算机通信、到服务器
网络协议·gis·计算机组成原理
和码说17 天前
编程考古-CPU(上)
cpu·计算机科学·编程考古
运维小文17 天前
linux的磁盘管理
linux·运维·网络·磁盘·计算机组成原理·硬件
Bio Coder1 个月前
shell查看服务器的内存和CPU总量
运维·服务器·内存·cpu
shengjk11 个月前
从零开发操作系统-聊一下GDT 和 IDT
人工智能·后端·计算机组成原理
rs勿忘初心1 个月前
linux常见资源查询命令(持续更新)
linux·内存·cpu·资源查询