什么是超线程技术
前几天的超线程文章引起了不少讨论,有些四驱两驱之类留言就不点出来了。今天咱们趁热打铁来聊下CPU超线程的实际用途。超线程的英文名是Hyper-Threading Technology,简称HT。超线程技术是Intel在奔腾4C处理器上开始投入的一种技术,从原理上来说就是在CPU内核里加入一套逻辑电路,将一颗物理核心模拟为两颗逻辑处理器。
对WINDOWS系统来说逻辑和物理核心都CPU,所以操作系统会把所需要的工作线程交给这些运算单元去工作。
10核20线程的10900K
超线程的出现目的是榨干CPU物理核心的全部闲置资源,简单来说就是让CPU物理核心一分为二去同时执行更多的操作指令与数据。
但由于是压榨闲置资源,所以这颗虚拟出来的逻辑处理器完全达不到物理处理器(内核)的性能。
打游戏用的上超线程吗
目前大多数游戏对CPU核心的依赖约4~6核心,对线程的依赖相当有限,甚至另外部分游戏关了超线程反而帧数更高。当然也有一些开放世界游戏会比较吃CPU。
原神团队混战,看似混乱,实际占用率只有16%,相当于3个多逻辑处理器的计算量。在些较新的游戏则会用到8核甚至更多,此时超线程技术可能对游戏帧数有所帮助。
那些软件用得上超线程
超线程技术目前更多的在一些专业应用上有性能体现,比如3D渲染,建模和视频编辑软件。
虽然有越来越多软件开始应用GPU加速技术,但CPU性能依然是不可或缺的一部分。
比如知名3D渲染软件KEYSHOT在官网上就宣称,该软件可充分利用所有可用的CPU内核,这意味着这款软件能调用CPU的全部内核与线程去执行3D渲染。
线程越多所耗费的等待时间自然也就越短了。而KEYSHOT的用户不少是那些制造业用户,产品渲染需要花费大量时间,一块高性能CPU搭配超线程技术可有效提升渲染效率。
超线程的现状
目前Intel平台的超线程技术并非Northwood上的老式HT,而是自Nehalem架构后启用的新技术,通过当时高效率的分支预测技术和短流水线设计,Nehalem架构超线程性能比奔腾4时代有了显著提升,特别是核心数量越来越多后超线程的效果也越来越好,比如在10900K上已经能模拟出12核+的运算速度。
这些年基本上Intel的超线程都属于小修小补每代还略微提升一些性能,且在售的第十代酷睿已经全面配置超线程。AMD方面SMT超线程技术效率很高,且除3500X在售的锐龙3/5/7/大多搭载该技术,并使入门型号也有不俗的性能和潜力。
不过现阶段大多数游戏和应用还是更依赖于处理器本身的单核效率,在核心调用相同的情况下单核性能越强对程序和游戏的帮助就越大,这也是为什么近期大家的关注点都在ZEN3平台的一大原因。当然如果明年RL提升巨大的话,也是非常值得期待的。
在了解超线程是什么之前我们要先知道线程是什么。
这部分很多同学都已经了解,就不再赘述了,需要复习的同学,请自行百度。
什么是多线程?
MultiThreading多线程这个概念有些暧昧,多线程可以指在一个CPU核心上同时执行多个线程,也可以是多个任务,尽管在同一个核心内执行,但是它们之间完全分离。
多线程在概念上类似抢占式多任务处理,但是在现在的超标量处理器中以线程级来实现。
多线程有两个主要实现方法:
- 一个是Temporal MultiThreading时间多线程,
- 另一个则是Simulate MultiThreading同步多线程
时间多线程还可以进一步分为:
- Fine-Grained MultiThreading细粒度多线程
- Coarse-Grained MultiThreading粗粒度多线程。
各种多线程技术
CMT粗粒度多线程是最简单的多线程技术,当单一执行线程遇到长时间的延迟,如Cache Missed时,就进行线程切换,直到原线程等待的操作完成,才切换回去。
FMT细粒度多线程比CMT粗粒度多线程复杂一些,它随时可以在每个时钟周期内切换多个线程,以追求最大的输出能力,当然,随时可以切换也是有代价的,它拉长了每个执行线程的平均执行时间。
CMT和FMT都没有在消费级处理器上面使用,Intel与AMD处理器上使用的都是SMT同步多线程,不过NVIDIA与AMD的GPU都有使用FMT技术。
SMT同步多线程具有多个执行单元,CMT和FMT都是在单个执行单元下的技术,不同的线程在指令级别上并不是真正的“并行”,而SMT则具有多个执行单元,同一时间内可以同时执行多个指令,可以充分发掘超标量处理器的潜力,因此SMT具有最大的灵活性和资源利用率,不过处理器也更复杂。
不过现在的消费级处理器都是超标量处理器,所以要支持SMT其实在架构上不用太多改变:所需的主要添加是在一个周期中从多个线程获取指令的能力,以及一个更大的寄存器文件来保存来自多个线程的数据。
并发线程的数量可以由芯片设计者决定。常见模式是每个CPU核心有两个并发线程,但一些处理器的每个核心支持最多八个并发线程。
工作原理
对于单一处理器核心来说来说,虽然也可以每秒钟处理成千上万条指令,但是在某一时刻,只能够对一条指令(单个线程)进行处理,超线程技术能够把一个物理处理器在软件层变成两个逻辑处理器,可以使处理器在某一时刻,同步并行处理更多指令和数据(多个线程),当然了实际效能不可实现双倍提升,毕竟干活的核心只有一个。
逻辑双核与物理双核
可以这样说,超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术,奔腾4 HT处理器多加入了一个逻辑处理单元,这让CPU可以同时执行多个程序而共享一颗CPU内的资源,如:ALU、FPU、缓存等,当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续,因此超线程的性能并不等于两颗CPU的性能。
四个框框(双核四线程)的奔腾EE 840在单核还是绝对主流的2005年看起来就夸张
在发布奔腾4 HT处理器的时候Intel说过,超线程技术只增加了5%的芯片面积,就可换来15%~30%的性能提升,而后来的Nehalem架构带来了全新的超线程技术,得益于指令集分制预测技术与较短的流水线。
它拥有比奔腾4好得多的效能,再加上整合了内存控制器让其拥有更大的内存带宽,还有更大的缓存,这样就更能够有效的发挥超线程的作用。
Nehalem的超线程可以在增加很少能耗的情况下,让性能提升20-30%,后续每一代虽然都有一些小修改,不过基本上都是Nehalem架构的延续。
超线程的作用
其实在Intel刚把超线程技术推向消费级市场的时候市场反应不怎么好,因为当时的操作系统和软件都没有对多线程技术进行优化,多数软件都是以单线程运行,超线程的优势非但显露不出来反而会因为另一个虚拟处理器抢占资源导致运行起来比没超线程的处理器更慢。
这些问题随着这些年来操作系统和软件逐步对多核多线程进行优化得到改变,特别是Windows 10系统对多线程优化相当好,操作系统的调度器设置更为科学,多核心多线程的负载更为平均。
你在Windows 10系统下打开任务管理器会发现,不论物理核心还逻辑核心的负载都相当平衡,除非是人为指定负载线程,否则很少会出现之前Windows 7那样单核负载多核围观的惨状。
Windows 10下CPU的负载相当平均
至于超线程的作用其实还是很明显的,之前我们对比测试过Core i7-6700K和Core i5-7600K,他们俩的四核与单核Boost频率是相同的,都是4.0GHz与4.2GHz,区别就在于超线程的有无和L3缓存的大小了,至于Skylake与Kaby Lake两者是没有性能上的差别的。
有超线程的Core i7-6700K多线程性能比Core i5-7600K好19%左右,然而超线程技术在提升处理器的利用率增大吞吐量的同时也稍微增加了单个线程的延时,如果只看单线程能力的话Core i5-7600K其实比Core i7-6700K还好2.8%左右,然而降低这么一点单线程性能让多线程性能提升这么多这其实是很划算的。
太长不看版:
简单地说,超线程技术是一个很好的提升核心利用率的东西,将闲置处理资源充分调动起来,增强核心并行运算性能,在操作系统中一颗物理CPU能当做多颗CPU来使用。
超线程有什么好处呢:
- 有效提升CPU利用率
- 改善计算机的性能
- 提高系统可靠性
比如奔腾G4560这种双核在拥有超线程之后性能暴增,在低端入门市场相对受欢迎,双核四线程的处理器能够对应大多数轻量级日常应用。
当然随着核心数目增多超线程的作用就越弱,特别是那些八核或者核心数更多的处理器,十六个框框看起来很爽然而实际上用起来很多线程都是空载的,大多数消费者与应用都没法很好的利用这么多线程的性能,目前只有视频和3D渲染软件和压缩软件有能做到,软件还是制约硬件性能的最大因素。
另外,超线程技术需要CPU支持,需要主板支持,需要操作系统支持,还需要应用软件支持,缺一不可,否则就玩不转了。