• 超能网 >> 
  • 课堂 >> 
  • CPU >> 
  • 超能课堂(104):超线程/SMT多线程技术有什么用?

超能课堂(104):超线程/SMT多线程技术有什么用?

2017-8-31 15:54  |  作者:Strike   |  关键字:超线程,SMT,超能课堂

分享到:

现在的Core i7/i3、部分奔腾与Atom、还有移动版的双核Core i5与Core M处理器都有超线程技术,AMD最新推出的Ryzen系列除最低端的Ryzen 3外都带有SMT多线程技术,与Intel的超线程技术类似,今天就来介绍一下超线程。

本文约2744字,需5分钟阅读

说到超线程技术,大家应该都不陌生了,Intel早在2002年推出的Northwood奔腾4 HT处理器就把这一技术带入到消费级市场,虽然随后的酷睿2处理器超线程被抛弃,不过到了2008年推出的Nehalem架构Core i7处理器又把超线程技术带回到市场上,并一直沿用至今,现在的Core i7/i3、部分奔腾与Atom、还有移动版的双核Core i5与Core M处理器都有超线程技术,AMD最新推出的Ryzen系列除最低端的Ryzen 3外都带有SMT多线程技术,与Intel的超线程技术类似。

在了解超线程是什么鬼之前我们要先知道线程是什么,Thread线程是操作系统能够进行运算调动的最小单位,它被包含在进程之中,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

Intel Hyper-Threading Technology(超线程技术)的学术名字是Simulate MultiThreading(SMT,同步多线程技术),SMT是超线程技术的学术名称,这两个东西是完全一样的。这技术的引入是为了更好的利用CPU的空闲资源,Intel从奔腾处理器就开始引入超标量、乱序运行、大量的寄存器及寄存器重命名、多指令解码器、预测运行等特性,这些特性的原理是让CPU拥有大量资源,并可以预先运行及平行运行指令,以增加指令运行效率,可是在现实中这些资源经常闲置,为了有效利用这些资源,就干脆再增加一些资源来运行第二个线程,让这些闲置资源可运行另一个线程。

什么是多线程?

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支持,需要主板支持,需要操作系统支持,还需要应用软件支持,缺一不可,否则就玩不转了。

    ?
  • 游客  09-07 08:05

    其实就是偷工减料的技术。

    支持(0)  |   反对(5)  |   举报  |   回复

    30#

  • ?
  • 游客  09-05 09:48

    游客:

    4核4线程就足够玩游戏了 amd的r5 r7对于玩家毫无意义
    08-31 22:22 已有10次举报
  • 支持(4)  |   反对(7)  |   举报  |   回复
  • i7 也毫无意义

    支持(0)  |   反对(0)  |   举报  |   回复

    29#

  • ?
  • 游客  09-04 17:15

    游客:

    Simulate MultiThreading(SMT,同步多线程技术) Simulate 原来还有同步的意思
    09-02 08:48 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 小编你又错了,Simulate没有同步的意思,Simultaneous才是同步。 SMT 是Simultaneous Multi-threading

    支持(0)  |   反对(0)  |   举报  |   回复

    28#

  • ?
  • 游客  09-04 17:12

    游客:

    4核4线程就足够玩游戏了 amd的r5 r7对于玩家毫无意义
    08-31 22:22 已有10次举报
  • 支持(4)  |   反对(7)  |   举报  |   回复
  • 去玩玩看门狗2, 我的ryzen 1700oc3.8 cpu占用一直50%以上 最高70%+, 还有刺客信条大革命等

    支持(0)  |   反对(0)  |   举报  |   回复

    27#

  • ?
  • 游客  09-04 12:13

    游客:

    4核4线程就足够玩游戏了 amd的r5 r7对于玩家毫无意义
    08-31 22:22 已有10次举报
  • 支持(4)  |   反对(7)  |   举报  |   回复
  • 5厘米对于你已经就足够玩了,超过部分对于你毫无意义?

    支持(1)  |   反对(0)  |   举报  |   回复

    26#

  • ?
  • 游客  09-02 08:48

    Simulate MultiThreading(SMT,同步多线程技术) Simulate 原来还有同步的意思

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    25#

  • ?
  • 游客  09-02 08:17

    新的i3是四核,看来标题要写i3默秒全了吧?

    已有1次举报

    支持(1)  |   反对(0)  |   举报  |   回复

    24#

  • ?
  • Adonis大学生 09-02 08:10

    游客:

    是的。简单来说——

    Strike小编向老板交了一份提薪申请并等待回复,这时有两个选择:

    1、Strike小编在等待期间什么都不做,等老板“不准,回去继续搬砖”的批复下来,第一时间完成了“申请加薪”这1件事——这就是单线程。

    2、Strike小编并不想干等,于是趁老板签字的空隙偷偷去摸了alexallen的皮古,等摸完回来继续等。于是在同样的时间里,Strike小编同时完成了“申请加薪”和“摸皮古”2件事(但是若摸的期间老板提前签完字的话,就不能第一时间完成“申请加薪”事件了)——这就是超线程。


    我学富五车起来连我自己都怕。 ...
    08-31 23:11 已有2次举报
  • 支持(152)  |   反对(1)  |   举报  |   回复
  • alexallen 编辑 :

    09-01 09:18 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 游客:

    win10负载平均? 我安装过无数win10系统了 给客户 感觉流畅度和win7没的比啊 点开软件到安装界面 不如win7流畅
    发这评论的时候我在给客户装苹果双系统 装的是win10 要我选的话 能win7还是尽量7的好 感觉安装流畅度根本不一样唉
    09-01 12:14 已有2次举报
  • 支持(1)  |   反对(4)  |   举报  |   回复
  • Win10系统穿越火线打僵尸不怎么掉血

    已有2次举报

    支持(0)  |   反对(1)  |   举报  |   回复

    23#

  • ?
  • 游客  09-01 12:14

    游客:

    是的。简单来说——

    Strike小编向老板交了一份提薪申请并等待回复,这时有两个选择:

    1、Strike小编在等待期间什么都不做,等老板“不准,回去继续搬砖”的批复下来,第一时间完成了“申请加薪”这1件事——这就是单线程。

    2、Strike小编并不想干等,于是趁老板签字的空隙偷偷去摸了alexallen的皮古,等摸完回来继续等。于是在同样的时间里,Strike小编同时完成了“申请加薪”和“摸皮古”2件事(但是若摸的期间老板提前签完字的话,就不能第一时间完成“申请加薪”事件了)——这就是超线程。


    我学富五车起来连我自己都怕。 ...
    08-31 23:11 已有2次举报
  • 支持(152)  |   反对(1)  |   举报  |   回复
  • alexallen 编辑 :

    09-01 09:18 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • win10负载平均? 我安装过无数win10系统了 给客户 感觉流畅度和win7没的比啊 点开软件到安装界面 不如win7流畅
    发这评论的时候我在给客户装苹果双系统 装的是win10 要我选的话 能win7还是尽量7的好 感觉安装流畅度根本不一样唉

    已有2次举报

    支持(1)  |   反对(4)  |   举报  |   回复

    22#

  • ?
  • alexallen编辑 09-01 09:18

    游客:

    是的。简单来说——

    Strike小编向老板交了一份提薪申请并等待回复,这时有两个选择:

    1、Strike小编在等待期间什么都不做,等老板“不准,回去继续搬砖”的批复下来,第一时间完成了“申请加薪”这1件事——这就是单线程。

    2、Strike小编并不想干等,于是趁老板签字的空隙偷偷去摸了alexallen的皮古,等摸完回来继续等。于是在同样的时间里,Strike小编同时完成了“申请加薪”和“摸皮古”2件事(但是若摸的期间老板提前签完字的话,就不能第一时间完成“申请加薪”事件了)——这就是超线程。


    我学富五车起来连我自己都怕。 ...
    08-31 23:11 已有2次举报
  • 支持(152)  |   反对(1)  |   举报  |   回复
  • 已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    21#

  • ?
  • 游客  09-01 02:01

    跑虚拟机的,无论有多少C多少T,全都可以吃满

    已有1次举报

    支持(1)  |   反对(1)  |   举报  |   回复

    20#

  • ?
  • 游客  08-31 23:33

    所以说win10是不是存在cpu无法满载的问题,就算已经非常努力滴在加载了,可是还是假死,任务管理器显示没有一颗核心是满载的,总负载不到cpu的一半,用起来感觉就是一个慢。真蛋疼...

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    19#

  • ?
  • 游客  08-31 23:11

    是的。简单来说——

    Strike小编向老板交了一份提薪申请并等待回复,这时有两个选择:

    1、Strike小编在等待期间什么都不做,等老板“不准,回去继续搬砖”的批复下来,第一时间完成了“申请加薪”这1件事——这就是单线程。

    2、Strike小编并不想干等,于是趁老板签字的空隙偷偷去摸了alexallen的皮古,等摸完回来继续等。于是在同样的时间里,Strike小编同时完成了“申请加薪”和“摸皮古”2件事(但是若摸的期间老板提前签完字的话,就不能第一时间完成“申请加薪”事件了)——这就是超线程。


    我学富五车起来连我自己都怕。 ...

    已有2次举报

    支持(152)  |   反对(1)  |   举报  |   回复

    18#

  • ?
  • 游客  08-31 22:54

    游客:

    4核4线程就足够玩游戏了 amd的r5 r7对于玩家毫无意义
    08-31 22:22 已有10次举报
  • 支持(4)  |   反对(7)  |   举报  |   回复
  • 穷逼又开始自我安慰了

    已有1次举报

    支持(6)  |   反对(1)  |   举报  |   回复

    17#

  • ?
  • 游客  08-31 22:22

    4核4线程就足够玩游戏了 amd的r5 r7对于玩家毫无意义

    已有10次举报

    支持(4)  |   反对(7)  |   举报  |   回复

    16#

  • ?
  • 游客  08-31 21:59

    游客:

    超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术-----------相对而言,如果CPU满负荷,超线程反倒降低性能,比如某些游戏。
    08-31 17:08 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 游客:

    错了,并不是CPU满载超线程就降低性能了,因为如果开了超线程还能让CPU满载,说明这是充分多线程优化的程序,不存在性能反而降低的情况。
    其实文章里说了超线程会延长单一线程的任务执行时间,这就会降低一种场景的性能,就是对延迟敏感但运算量不大的程序,这种场景最常见的就是游戏,游戏需要的CPU运算量不大,但对延迟极其敏感。
    顺带提一下现在ryzen的游戏性能还是比7代酷睿差一些,个人猜测很大一部分原因就是ryzen的1-3级缓存延迟以及内存延迟都大幅落后7代酷睿,不光是主频高低的问题。 ...
    08-31 20:33 已有1次举报
  • 支持(1)  |   反对(1)  |   举报  |   回复
  • 游客:

    同core两个线程互相evict对方的cache block问题就来了,这不是性能降低?
    08-31 21:44 已有3次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 除非程序设计本身有问题,否则不存在降低。
    SMT有点像分组交换一样。其目的是占用空闲资源。而CPU执行的绝大部分任务,不是100%正确,并且要求连续独占CPU资源。

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    15#

  • ?
  • 游客  08-31 21:55

    游客:

    超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术-----------相对而言,如果CPU满负荷,超线程反倒降低性能,比如某些游戏。
    08-31 17:08 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 游客:

    错了,并不是CPU满载超线程就降低性能了,因为如果开了超线程还能让CPU满载,说明这是充分多线程优化的程序,不存在性能反而降低的情况。
    其实文章里说了超线程会延长单一线程的任务执行时间,这就会降低一种场景的性能,就是对延迟敏感但运算量不大的程序,这种场景最常见的就是游戏,游戏需要的CPU运算量不大,但对延迟极其敏感。
    顺带提一下现在ryzen的游戏性能还是比7代酷睿差一些,个人猜测很大一部分原因就是ryzen的1-3级缓存延迟以及内存延迟都大幅落后7代酷睿,不光是主频高低的问题。 ...
    08-31 20:33 已有1次举报
  • 支持(1)  |   反对(1)  |   举报  |   回复
  • 游客:

    同core两个线程互相evict对方的cache block问题就来了,这不是性能降低?
    08-31 21:44 已有3次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 不过想了想的确也是延迟问题。原文的说法非常不严谨,按现在的调度模式满载降低性能应该大部分情况下是能避免的

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    14#

  • ?
  • 游客  08-31 21:44

    游客:

    超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术-----------相对而言,如果CPU满负荷,超线程反倒降低性能,比如某些游戏。
    08-31 17:08 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 游客:

    错了,并不是CPU满载超线程就降低性能了,因为如果开了超线程还能让CPU满载,说明这是充分多线程优化的程序,不存在性能反而降低的情况。
    其实文章里说了超线程会延长单一线程的任务执行时间,这就会降低一种场景的性能,就是对延迟敏感但运算量不大的程序,这种场景最常见的就是游戏,游戏需要的CPU运算量不大,但对延迟极其敏感。
    顺带提一下现在ryzen的游戏性能还是比7代酷睿差一些,个人猜测很大一部分原因就是ryzen的1-3级缓存延迟以及内存延迟都大幅落后7代酷睿,不光是主频高低的问题。 ...
    08-31 20:33 已有1次举报
  • 支持(1)  |   反对(1)  |   举报  |   回复
  • 同core两个线程互相evict对方的cache block问题就来了,这不是性能降低?

    已有3次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    13#

  • ?
  • 游客  08-31 21:42

    游客:

    然而现代处理器采用同步多线程的意义早就不是这些了,主要是为了起到屏蔽中断和缺失的作用,牵扯的东西太多了,不是三言两语能说完的。虽然看起来一样但是实际上这个世纪的处理器在同步多线程上变化还是很大的。
    这图我记得David Patterson的软硬件接口那本里的,都是给本科生看着玩的书。后面量化方法里介绍就详细一点了
    08-31 16:06 已有1次举报
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • …………这张是Joel Emer的图啊

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    12#

  • ?
  • 游客  08-31 21:22

    评测里居然没有游戏

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    11#

新葡京官网:编辑:朱琪关键词:人大代表;李海燕;留守儿童

查看全部评论(29)

回复