手机CPU为什么不采用超线程技术?

丘崇坛


前面的回答没有讲透,甚至有错误,所以我来补充一发。回答的过程中,难免有专业术语,我会尽力用类比的方式软化,并加入生活场景以便易于理解。下面正式开车。

先讲什么是超线程技术。

超线程(Hyper-Threading,简称HT)技术最早是英特尔提出并应用,它的原理是这样的:在单个核心处理单元中集成两个逻辑处理单元,从而可以在单位时间内处理两个分别进行整数核浮点运算的线程,模拟双内核运作。

一个拥有超线程技术的CPU,可以模拟成2个CPU。

打个比方,如果一个核心处理单元(CPU内核)相当于生产车间,那么逻辑处理单元就相当于生产线上的工人。过去的CPU是一个核心处理单元集成一个逻辑处理单元,相当于一个生产车间配一组工人,每个工人都工作在最大负荷下。运用超线程技术的CPU,则相当于一个生产车间配两组工人,人手增加一倍。

超线程技术的工作原理是这样的:程序的一个进程可以分成多个线程,超线程技术可以在单位时间内,让两个逻辑处理单元同时处理两个线程,一个进行密集运算,一个处理输入输出、人机交互等,行话叫“并发异步执行”。没有运用超线程技术的CPU一次只能处理一个线程,先处理密集运算,再处理输入输出、人机交互,让线程排队等待,行话叫“线程堵塞”。

我们假设一个程序可分为两个进程ABCD和EFGH,CPU无超线程技术时,需要先执行完ABCD,再执行EFGH,共耗费8个时间单位。CPU有超线程技术的话,一个逻辑单元执行ABCD,同时,另一个逻辑单元执行EFGH,共耗时4个时间单位,这样就节省了一半的时间。


可以看出,超线程技术可以省一半的程序执行时间。

这种线程处理上的效率差别可以打个比方,组装电视可以简单分成运料、装配两个大的步骤,有两组工人的车间(有超线程技术的CPU内核),可以让一组工人运料,另一组工人装配,单位时间内完成两个步骤;只有一组工人的车间(没有超线程技术的CPU内核),只能让工人先运料,运完料再装配,单位时间内只能完成一个步骤。

小结一下超线程技术的特点:

  1. 一个CPU内核集成两个逻辑处理单元,运行时模拟成两个CPU;

  2. 每个逻辑单元共享执行单元、寄存器,类似于上面说的两组工人共享一条生产线;

  3. 可同时执行两个线程,节省一半时间;

但超线程技术也有短板:

  1. 当两个线程不同时,可以提高效率,当两个线程相同时,线程也需要排队,好比来了两倍的电视机装配任务,但装配生产线只有一条,即使有两组工人,也只能等待,因此超线程要发挥优势,必须软件优化到位;

  2. 超线程技术提高的是程序执行效率,不是提高整个CPU内核的性能,提高性能还是离不开频率提升,相当于让生产线加速运转,“工人”手脚动作加快;


  3. 超线程技术对复杂应用(3D建模等)效率提升明显,一般简单应用体验不明显;

说完什么是超线程以及超线程的优缺点后,接着回答题主的问题:手机CPU为什么不采用超线程技术?

因为手机的APP绝大多数都不是复杂应用,根本用不到超线程技术。更重要的是,超线程技术采用的是两个逻辑单元,可以理解成是两个“软核”CPU,和多核CPU这种通过硬核提升程序执行效率的设计理念相比,优势并不突出。

此外,手机CPU设计满足的是在减少能耗的前提下提升性能的需求,因此“大核+小核”的多核模式比超线程技术更适合。

结果就是,满足重度应用的高性能电脑CPU会采用超线程技术,而满足轻度应用的手机采用能效比更出色的多核设计。



魔铁的世界


CPU的超线程技术可以大幅度提升CPU的多核性能,尽管本身占用的晶体管数量比纯粹的物理核心少得多,但是超线程技术的开启也需要消耗不少额外的晶体管和功耗的,像电脑CPU,没有超线程技术的i7-9700功耗发热就比i9-9900少得多。

因此对于目前的手机CPU来说,8核心已经完全够用了,不管是几个高性能核心与几个低功耗核心结合,都可以在性能与功耗之间取得平衡,如果再加上超线程技术的话,那么手机CPU将达到16个线程,这样势必会带来功耗发热的大幅度提升,而对于手机这样的产品来说显然并不需要这么强的性能。

另外就是目前的手机APP大部分还没有对多核心CPU进行优化,因为多核优化本身就是很复杂的工作,所以这几年手机CPU发展到8核心之后已经减缓了发展速度,说明手机CPU目前还不需要超线程技术,毕竟功耗和续航往往更重要,手机本身也不是电脑那样的生产力工具,所以对性能的需求也不迫切。


嘟嘟聊数码


超线程带来的功耗发热也是个问题,现在手机不用超线程发热都是问题了,再用超线程,我估计手机得烧了!而且超线程是让处理器没有闲置空间不停工作,手机发热严重,手机处理器要做到最佳功耗,电池也就那么大点,超线程会加大手机功耗,待机时间变短,不如一个处理器核心配一个任务处理起来游刃有余,还有超线程技术要建立在处理器单核心性能强劲的情况下使用,如果本身核心不够强劲,使用超线程反而会拖累手机性能!


我爱新月


手机cpu超线程以前英特尔干过,不过好像现在英特尔也不做手机cpu了。除开英特尔好像其它都是基于arm构架的,而arm也没做过超线程(可能觉得没必要吧)


色让酒做媒


1.手机cpu的散热和电池,不支持长时间高功耗运行;

2.手机系统的运行机制,软件切换到后台后,ios会杀掉后台程序,安卓一般也就是运行后台推送,不需要很多cpu的并行计算,所以没有这个场景;


大哥你虎啊


1. 是否选择超线程,在于权衡利弊。2. 超线程在之前优势很明显,但随着异构计算(尤其是非对称通用处理器)的出现和普及,很难适应新的环境。

加速处理器的很重要的两个方法:ILP(Instruction Level Parallelism,指令级并行,加速单核性能),TLP(Thread Level Parallelism,线程级并行,用多核提升性能)

整个处理器界最开始尝试的一直是加速单核,后来发现单核性能提升是有极限的,所以转向了多核发展。但是在发展单核性能的时候留下了一个精美的设计,并且一直被多核结构继承(乱序核心),那就是Tomasolo算法。

用T算法的乱序核心并不是只有一个单一的线形的流水线,而是有很多组流水线。这就导致一个问题,那就是单进程很多时候可以完全利用所有计算资源,但是大多数时候都无法完全利用计算资源。这种浪费对于性能和能耗比来说都是致命的。

Arm设计过超线程的小核,Cortex-A65,是Armv8.2A的指令集和微架构,网上可能数据不多。要看结论的话,那就是,可以,不过要有15-20%单线程性能牺牲。

要用A65替代A55,在手机上,最主要的是确定几件事:

运行在单线程的时候,漏电是不是一致,动态功耗是不是一致,能跑到多少频率,SPECINT2K性能如何。

运行在双线程的时候,多线程性能比单线程提升多少,面积密度是不是更小。

那比较结果如何?

答案是,A65比A55,频率低10%(SSG),动态功耗能效一样(功耗高30%,性能高30%),漏电高了50%。如果用些方法提升A65频率,可能漏电要高100%。

单看这些,A65其实就不太适合手机,手机芯片的漏电要求很高。但是反过来,如果可以接受A65频率低些,那漏电是可以做到一致的。

再看多线程,A65双线程整数性能除以面积,密度是A55的1.8倍,这很好,但是不能消除漏电大对手机的负面影响。当然,此时的漏电如果除以两个核,那是持平或者更小。从这个角度看,就需要统计手机到底有多少时间是一个小核在运行的。

A65用在哪?Arm给了明确的定义,一个是网络处理器数据面的小核,一个是汽车自动驾驶芯片的高能效比核,这两个场景对漏电都不敏感,且很多读写操作。此时,超线程能很好的隐藏访存延迟。

另外,Arm在V9的小核上,用了不同的‘多线程’策略。A65是加入一组寄存器给第二个线程,两个线程共享执行单元。而V9的小核是共享TLB/NEON等不常用的单元,只开启一个核的话,同样条件下,漏电基本不变。


分享到:


相關文章: