超线程_Hyper Thread超线程的种种

说起HT技术,这早就是15年以前的技术了,当下主流的X86 CPU大多数都支持HT技术。简而言之,HT技术就是一个把物理CPU core虚拟成多个逻辑CPU并允许并行执行指令的功能。之所以写这篇文章主要是回答几个常见的问题:

  • 为什么有HT技术,为什么HT只有单核心双线程?
  • HT和真实的core到底有什么区别?

首先第一个问题:X86到底属于复杂指令集CPU CISC(Complex Instruction Set Computer)还是精简指令集CPU RISC(Reduced Instruction Set Computer)?

这个问题还是有点“意识形态”的味道。RISC的指令集简单精练,比较容易提升CPU频率从而提升性能。这是一把双刃剑,一方面过于简单的指令意味着更高的开发、调优成本,没有足够经验丰富工程师支持的CPU平台注定吸引力不足。反观CISC这边,一切都是相反的——难以快速地提升硬件性能,却有大(lian)量(jia)的足够经验的工程师。

于是当今的X86搞定了一个相对骑墙的做法:用户层面依然保留着CISC那冗长且强大的指令集,增加了一个Front-end,将CISC翻译成RISC跑在底层电路上。这种方法一方面降低了软件工程师的门槛,另一方面也同时保持住了x86沿用至今40多年的向下兼容指令集或者说历史包袱。用户层的代码通过编译器譬如C/C++得到的CISC指令集代码称为机器码,而内部的RISC指令集则称为微码。这里要指出的是,“升级微码”事实上只是升级了从机器码到微码的编译器,并不是直接字面意义上修改什么指令。
一句题外话,跟X86作为CISC的扛把子一样,ARM作为RISC界的扛把子也在RISC之上实现了部分的CISC的指令集,殊途同归。——可笑的是这两家还是市场上的冤家,只是因为现在实在找不出其他家的产品可以达到这个市场占有量了。

说了半天,貌似这些指令集的事情跟HT一点关系也没有,其实不然。

CISC的指令比RISC重很多,借鉴了工业化流水线的思路,一条CISC可以被翻译成若干RISC指令。于是CPU内部处于加速指CISC速度的原因采用了多种技术:

  • 集成了多个处理单元执行不同的RISC,达到了并行化RISC的目的。
  • RISC微码经过解耦之后,支持乱序执行,执行时间规划,分支预测等时间统筹方法。

835b5670f70779a7497596a83611cc73.png

上图是某代X86平台执行引擎的示意图。 scheduler是负责时间规划的调度器,相当于企业的销售部门。有0-7总共8个端口并发执行微码,端口在这里可以理解为工厂的车间。如果留意到端口之后的处理单元的话,你会发现不同的处理单元的数量是不一样的。不同配置的处理单元可以理解为各个车间职责的不同。比如INT ALU整数加减单元就大于INT MUL整数乘单元,这是综合了实现复杂度、处理时间、指令统计占比等多重考虑的结果。同时,理论上多条指令只要没有依赖性,存在空闲的执行模块就可以并行操作。这就好比一个流水线上生产的某一个通用螺丝,它本身并不在意会被用在产品A还是产品B上。

在OS层面上,线程的实现本身就是软件上降低依赖性,提升并发度的方法。而“假装自己是两个处理器”是最简单的硬件解耦,于是HT技术就这么产生了。首先解码逻辑核心1的机器码,送入执行单元,等待结果的同时解码逻辑核心2的机器码,如果出现的空闲的执行单元恰好是逻辑核心2的微码需要的,就直接送入执行单元不必一定要等待逻辑核心1的代码完全执行完毕。这一来一去,两个逻辑核心变得相对独立了。

回答另一个问题,决定一个物理核心的HT数量有几个限制条件:

执行单元的限制,从上面的介绍你应该有这个概念。假设一个物理核心上的两个逻辑核心都抢占某个处理单元,那逻辑上的“并发”就无从谈起。

执行时间的长短,即便是等价于RISC指令的微码,每个微码的执行时间也是长短不一的,比如ALU加减法和MUL乘法的门电路实现就比DIV除法的门电路实现简单的多,一条除法运算的时间足够做几条加法计算的。并发在这个时候就是有意义的,如果所有微码的执行时间都是一致的,“共线生产”的方式就变得低效率,执行时间规划和分支预测就意义不大了。

还有就是,当前2HT的设定还考虑到了Front-end的解码能力和CPU的占空比,这是相对宏观的设定。即便在当下的L1缓存下,CPU访存照样还有3个cycles左右的时延,这个过程中完全可以执行多条其他逻辑核心的指令。

以上可知,HT的初衷是“不让RISC执行单元空闲下来”,而讽刺的是为了提升HT性能,近几年冗余的RISC执行单元却越来越多。这似乎成了x86平台历来的诅咒。从ALU的数量上以及当前指令中front-end耗时占比来看(推荐我的另一篇帖子),HTx4 似乎也不具备实现上的难度,1 phy-core = 2 logical-core 更多的像是一个妥协下的产物。

牛顿:我能看的更远,是因为我站在巨人的肩膀上! X86 CPU架构师:我看的不远,是因为巨人站在我肩膀上……

--原文2019/02/22 发布于开源小站

Hyper Thread超线程的种种​www.litrin.net
5ca85de4301482bef721c20aa6512c96.png

---

20190312 update:

补充农企这边的架构,与牙膏不同的是dispatch是包含在front-end里的,而且划分为整数单元和浮点数单元两个大部分。万变不离其宗,CISC转RISC以及,不让RISC执行单元闲置的哲学是一致的。

5e0e39b42b2bd85bcb39ac977d0693c3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个能实现类似超线程功能的软件Process Tamer,电脑防死机专家,能让CPU拥有超线程能力的软件。 超线程技术让Intel处理器获得性能提升,同时让CPU工作效率更快。但是只有部分Intel用户才能享受这一功能,对于AMD以及Intel非超线程CPU而言,超线程技术对他们似乎就无缘了。事实上,超线程技术不仅提升了性能,同时也具有资源分配功能,该功能可以带来更快的程序执行效率。这因为如此我们才有幸借助Process Tamer这款软件,让非超线程CPU摇身一变为超线程CPU。 实现原理 在赛扬D、低端P4以及AMD处理器上,并没有采用超线程技术,这样用户就享受不到超线程技术带来的好处,但Process Tamer软件可以成全这些用户。该软件的工作原理是自动调节进程优先级,并自动判断应用程序对处理器的占用率,再由占用率进而自动调整软件的执行优先权,并将适当的资源分配给其他正在同时执行的应用程序;等到该其他软件执行结束或是不再一直占用CPU资源后,就会自动调回CPU使用率,这样的工作原理正类似超线程技术。 实现方法 运行Process Tamer软件后,软件会以最小化的方式运行在任务栏托盘,当检测到CPU资源占用过高时,会自动降低对应程序的优先级,同时显示如图1所示的弹出消息。当对应程序占用过高的CPU资源被释放后,软件会还原程序运行的优先级,这样就充分利用了CPU的资源,让CPU工作的效率更快。 但有时进行一些更复杂的工作时,比如3D游戏、图形处理软件、视频电影播放以及DVD光盘刻录等,此时我们不希望软件进行自动调整程序优先级,那么可以手动进行设置,用鼠标有键点任务栏右小角的“Process Tamer”图标,然后选择“Configure”进入软件主界面 进入“Process”选项卡,首先可以看到目前正在运行的程序进程,同时显示了各程序所占用CPU资源的情况,如果你不希望某个程序进行自动调整程序优先级,可以鼠标左键点“Priority”旁边的三角箭头,然后在下拉菜单下选择对应程序的优先程度,其中“IGNORE”表示忽略该程序,不调整该程序的优先级;“HIGH”表示高优先级;“IDLE”表示低优先级;“KILL”表示关闭应用程序。 如果你希望预设某个特殊软件,比如你经常用Realplay播放网上电影,希望对Realplay进行特殊性能优化以获得更流畅的播放速度,那么可以进入“Configuration”选项卡,然后点“浏览”图标选择Realplay安装目录下的Realplay.exe执行文件,接着按自己的需要设置好参数,最后点选“Start with Windows”让每次开机时自动运行 Process Tamer,正如其名,“进程驯服手”,大概作者的原意就是把不驯服的进程当野兽一样驯服,所以称 Process Tamer。网络上一直流传 Process Tamer 是(HT)超线程能力的软件,其实这是以讹传讹,Process Tamer 离超线程差得有十万八千里,不知这“超线程”一说从何而来。不过话又说回来,Process Tamer 确实有其独到之处,它独到在哪里呢?独到在它会自动调整进程的优先级,在某些进程狂吃 CPU 的时候把它降低,在不足的时候又把它调高,这样,就把电脑死机的可能性降到了最低,再也不会出现打开一个软件直接让电脑重启的情况了。基于这一点,把 Process Tamer 称为“电脑防死机专家”。有了 Process Tamer,会大大降低你的电脑死机的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值