刨根问底:为什么玩游戏会让手机变得更热?

news/2024/11/20 4:21:01/

看到这个问题的第一瞬间,我想你可能会多多少少有点诧异。诧异的倒不是这个问题原来并不那么简单,甚至还有点复杂呢;而是诧异有人竟然问这么弱智的问题。地球人都知道,玩一会游戏手机就会发烫,这还用问为什么吗?就像苹果熟了就是要落地的。当然这个问题还不至于扣上这么大的帽子,不过还是值得我们好好思考一下的。

接着上面的问题,如果你再追问一下,了解一点原理的人可能就会告诉你,游戏是比较吃或者说消耗CPU的,所以CPU会变热,这导致手机发烫。大部分人对这个问题可能就思考到这一步。

如果我们再追问,为啥玩游戏CPU会更热?仅仅就是我们感觉的游戏会比较消耗CPU资源吗?那怎么样才算是消耗CPU资源?你可能会说,游戏会让CPU更加忙碌或者说不得闲。那这时候就要灵魂拷问,难道微信聊天的时候CPU不忙吗?如何定义这里的忙或者是更忙?显然,我们应该给一个闲的对比。CPU什么时候闲呢?

这就逐步涉及到专业内部领域了。学过操作系统的人可能会说,CPU没有任务的时候,就闲下来了。因为玩游戏要一直跑,所以CPU不得闲。而微信聊天,虽然宏观上CPU也是忙碌的,但是到微观层面,就没有处理游戏功能那么繁忙了,甚至更深入一点,因为聊天存在等待的过程,所以从微观层面上看,CPU可能大部分时间处在等待IO,而并没有处于持续运算状态。

当然,回答到这一点,就需要一些专业知识的辅助了。慢慢的,我们就会发现,这个问题,相对而言,可能并不那么简单呢。让我们继续来探讨。

我们还是回到忙的对立面闲上面来。的确,我们系统中运行的任务是有差别的。对于游戏、音视频处理这类任务,通常都会认为是计算消耗型的,就是完成这些任务,需要CPU处理大量的运算。有些任务,则被认为是IO消耗型的,比如鼠标键盘、聊天软件等,这类任务需要的是及时响应,其本身需要运算处理的信息量并不大,时间也不长,因为现代的CPU速度很快。很多时候CPU都是等待IO的状态。早期,linux的任务调度设计,还考虑了任务的这类特性而做了针对性的设计呢。

我们姑且可以将上面的CPU等待IO的状态认为是CPU得闲的时候。这个时候CPU在干嘛呢?是在睡眠吗?显然不是。此时,睡眠的是任务,而不是CPU。继续深挖操作系统实现,比如就linux而言,你可能知道这时候CPU会调度执行idle任务。我们就从这个切入点来看。Idle本身就是空闲的意思,说明这个时候CPU闲下来了,没事可做,就到idle任务上待着吧。等到有任务到来了,就继续去干活。所以,运行idle,就被认为是CPU在休息了。

那么,我们看看,idle中CPU处于什么状态?从linux的实现来看,idle本质上是一个死循环,CPU执行idle,就是说CPU无限循环在idle中。等等。什么?CPU在idle中死循环?如果有编程经验和经历,很多人都会有切实感受,应用程序里的死循环反而会让CPU更忙碌。如此来看,所谓的idle,名不符实啊。如果CPU在这里死循环,那应该更忙了,发热更严重了才对。为啥实际不是这样呢?

好了,我们慢慢接近这个问题的本质了。这个时候,你如果再诧异,那就只能诧异开头所述的第一点上了,否则就说不过去了。

再继续讨论之前,我们先简单总结一下:从最底层的CPU来讲,无论跑在哪个任务上,其自身都没有闲下来。也就是说,我们并没有告诉CPU,你休息一会吧,一会再起来忙。无论是不是在idle任务中。

现在我们就继续分析,为啥运行idle任务的时候,CPU的发热会比较小,而运行游戏或者音视频任务的时候,CPU发热会比较大。

其实,这个时候,就触及物理学中的基本概念了。热是什么?搜索相关的定义,可以看到,热是与温度相关的一个概念,CPU发热,更准确的说,是释放了热量,也就是转移了能量。因为CPU比周围空气包括我们的皮肤温度更高,所以你会感觉到热。那么,热的本质是什么?虽然博主在这里无法给你一个精确的描述,但是,以大家都能交流的中学物理来讲,就是分子运动。参与的分子越多,运动越激烈,释放的热量就越多。因为CPU处于一个电磁系统中,所以,我们更常见的是以电功率来描述,也就是电流做功来衡量。下面以一个极简单的例子来说明,如下图的中学物理中经典的电灯泡实验:

我们可以从不同层面来做一下对比:

先从宏观层面来看。CPU就可以看做图中的电灯泡。这本质上就是一个等效电阻模型,只不过这个CPU的等效电阻并不固定。从功率的计算公式来看,P = UI = I2R = U2/R,可以看到,电功率与电压、电流和电阻都有关系。一般,我们认为上述电路中电压是固定的,所以电阻越小,电流越大,相应的功率应该也增大。因此,在CPU空闲的时候,等效电阻就是增大的情况,而忙的时候,等效电阻是降低的情况。

电流的大小反映了电子的数量,电流的通路反映了电子的运动。大量电子的运动,对电阻做功,产生了发热现象。所以,CPU发热大的时候,流经CPU的电流就应该是更大,进一步的,就是CPU内部参与运动的电子数量更多。

单单通过上面宏观的描述,并没有解答我们的疑问。除非能够解释清楚为啥CPU空闲的时候,等效电阻是增大的,电子是减少的。所以,为了更好的说明问题,我们还是继续从微观上来分析。

大家都知道,CPU内部是由大量的晶体管构成的。这些基本的晶体管就是我们常听到的二极管、三极管。通过二极管和三极管的组合,就能够组合出复杂的电路来。二极管实现电路的单向导通,三极管实现电路的放大作用,这些就类似线性代数中的线性无关概念,是底层的基本构成元素。

构成CPU的晶体管就如同构建CPU功能大厦的静态结构,要让CPU工作起来,还需要一个外部时钟。时钟流过这些基础器件,就能产生我们所需的各种复杂功能。这个时钟就是时序电路的驱动源,或者说是动力源。其实,时钟不仅是驱动源,更是整个系统工作的基准。还是以上面的灯泡实验为例。如果只是像上图的灯泡点亮,虽然也处于工作的动态状态,但是并不能表达复杂的逻辑。但是如果上面的灯泡变成了闪烁,那么就可以表达比较复杂的信息了。举个不恰当的例子,我们可以通过闪烁的不同变化来表示不同的含义;还可以通过闪烁的变化,表示信息的传输。闪烁的越快,就表示传输的越快。

其实,CPU内部的二极管、三极管也可以类比成电灯泡。只不过这些二极管、三极管并不是像灯泡一样处于常亮的工作状态,而是处于闪烁的工作状态,这是由周期变化的时钟来驱动的。但是,我们可以简单的算出,如果一个二极管在一个工作周期中产生一次通断,那么它有一半的时间是处于连通的状态,电流就会做功。对比与电灯泡,就好比灯泡一半时间亮着,一半时间灭着。

现在,我们就可以来分析前面提到的CPU忙闲和发热的关系了。

前面已提及,CPU内部有大量的晶体管,最近的苹果A16处理器宣城集成了接近160亿个晶体管。如下图所示:(图片来自苹果官网www.apple.com)

CPU内部虽然有这么多晶体管,但是并不是所有的晶体管都处于工作状态,这要根据CPU的架构设计和工作状态来看。现代CPU内部的设计相当复杂,如下图所示ARM的一款CPU内核框图:(https://en.wikichip.org/wiki/arm_holdings/microarchitectures/cortex-a77)

从上图可以看到,CPU内部有很多功能单元。注意,图中只是CPU的ARM核心。现在手机上的CPU,跟桌面CPU不同的一点在于,这种平台上的CPU一般都称作SOC,也就是片上系统。物理CPU内部除了传统CPU功能单元外,还集成了很多其他功能单元,比如GPU、神经网络单元、音视频编解码模块,另外还集成了各种的接口,比如串口、网口、图形图像显示接口、各种串行、并行外设接口等。这样一种设计方案,大大简化了外围电路,可以最大程度的减小电路板大小,使得产品的手持化变得可行。如下图所示瑞星微一款CPU的功能框图:

基于上面这些讨论,我们再来看CPU的忙和闲。首先,对于物理CPU,严格来讲是SOC,这种忙和闲,体现在不同功能单元和接口之间。比如,如果当前没有其他事务处理,那么idle状态的SOC,物理CPU内部很多其他部件可能处于非工作状态,自然,整体的做功就比较小。更进一步,如果通过软件设计能够断开或者关闭部门功能单元的时钟,那么这些单元就处于阻断状态,类似电灯泡的灭状态,这样发热源就会少很多。虽然CPU仍然在运转中,但是跟调动其他模块进行图形、网络等功能处理相比,工作部件大大减少,自然发热就少很多。所以,此时的忙和闲,指代了整个SOC的忙和闲。

其次,对于SOC内部的CPU核心来讲,(其实对其他模块来讲,原理也是一样的),idle状态的CPU核心,虽然也在不停的执行指令,但是这类指令很简单(比如Nop这类空操作指令),只是占用了一个指令周期而已。CPU内部的一小部分逻辑电路就能处理这类指令,不涉及的电路部分同样可以不用工作。比如,其他很多外部取值、译码、运算、访存等功能单元,都可能不用执行或者不用全部执行。显然,这也是一种忙和闲的差异状态,只不过这种差异状态主要涉及CPU核心内部的功能单元之间。

现在,我们回过头来看,所谓的CPU忙和闲,并不是说CPU是工作还是睡眠,而是即使是工作中的CPU,也会因为处理的任务的不同,存在轻松和累的区别。反映到做功上,就是发热了。

就跟我们一个人一样,同样是清醒的一天,躺在床上发呆一小时跟考试一小时,消耗的能量是不一样的。我们可以将发呆看做idle,而将考试看做busy。

到此,我们基本就完成了对标题中问题的解答。

搞清楚了上面的内容,当我们要节省设备功耗时,就能充分思考,做自己的设计了。

其实,对手机来讲,发热是一个复杂的问题。在电池技术无法取得突破的情况下,如何优化设计,降低功耗,就成了一门艺术。从数学的本质上来讲,我们进行优化,就是要找到每一个最佳路径,或者线性无关的组合。比如,对于CPU指令来讲,如何设计,使得使用最少的周期完成最复杂的功能,这就是一个类似最优路径的问题。好的设计,可以不断逼近这个路径,从而降低产品的功耗,这就是同样是硬件CPU,不同厂家设计的功耗表现不同,甚至是差异巨大。软件层面也是这样的道理。

对于开头的问题,我们只是重点讨论了CPU。可以想象到,CPU访问内存和访问内部cache,电子走的路径长短不一样,做的功也不一样。屏幕显示相对固定的画面跟不断变化的画面,从能量守恒的角度来看,消耗的资源也是不一样的。进一步扩展开来,同样表达一个状态,比如开和关,用一个电灯泡和一个二极管,耗电是不一样的;驱动少量电子和大量电子,耗电是不一样的。这就是为啥要不断改进CPU的工艺,使用更低的电压,更小的制程来完成更加复杂的功能,而且耗电还更少。最终其实是提升了单位面积的能效。回归到电灯泡,节能灯为啥可以更省电而且更亮,从哲学的角度来看,跟CPU的这个道理是一样的。

上面,我们主要通过宏观、微观以及开关状态分析了CPU的发热原因。其实CPU内部的发热来源是比较复杂的,远远超出上述分析所覆盖的范围。举个简单例子,为啥频率越高越耗电。频率越高,说明时钟变化周期越短,切换越频繁。如果以开关状态来分析,可能等效的通断时间并没有变化。但是,实际上每一次切换都可能产生耗电,这包括器件的漏电。相反,电压的保持状态可能因为阻断,反而是不那么耗电的。抛开理想状态,整个电路还有漏电功耗和短路功耗。耗电产生发热,发热又会影响器件特性,进一步增加漏电功耗等。所以,说功耗的控制是一门复杂的艺术绝对不为过。感兴趣的读者可以查找专业的资料学习。

最后,我们发散一下思维,考虑这样一个问题:摩尔定律逼近极限,一方面是制程和器件原因,另外一方面是高频导致的发热不能很好解决。假设,如果这两个问题能够解决,那么,你手机中的CPU,其极限频率可以达到多少?


http://www.ppmy.cn/news/615697.html

相关文章

【无标题】手机电脑被木马病毒感染,私生活被全面监控

电脑感染木马病毒,任何市面上的杀毒软件无效,系统最高权限被剥夺,TrustedInstaller,于凌晨3:27,第三图意味任何人都可以通过这个端口连接你的电脑就是0.0.0.0的意思,目前我并无好办法应对&#…

手机index.php病毒,出现这些现象,可能手机中了病毒

现在手机行业进步的是非常的快,品牌的型号以及功能也是非常的多,而且功能也是比较强大的,相信伙伴们都是人手一部手机的,手机对我们来说也是比较重要的,可能对于很多人来说比较头疼的事件那就是手机用着用着就会变得非…

感染了恶意软件怎么办?

近日,研究人员披露了一种恶意软件,这种恶意软件已经感染了一系列广泛的 Linux 和 Windows 设备。恶意软件攻击事件的频繁发生,除了黑客的恶意攻击外,还有企业内部自身的问题,下面列举了7种容易感染恶意软件的途径和解决…

手机感染“僵尸病毒”怎么办 如何处理手机僵尸病毒?

2019独角兽企业重金招聘Python工程师标准>>> 如果发现自己的手机被僵尸病毒感染该怎么办? 发现手机话费或短信话费异常后,请立即查询话费清单,搞清自己的手机是不是被僵尸附体。如果手机中毒,用户可以将手机拿到手机的…

电脑中毒该怎么办?电脑中病毒后的处理步骤!电脑感染病毒怎么办?电脑中病毒的症状!怎么知道电脑中毒了

大家的计算机每天都要连接在网络上,现在网络中的木马病毒数不胜数,难免有一天就会中病毒。那么中病毒后该如何处理呢?正确的处理方法可以避免更大的损失,也能够把病毒带来的危害降低到最小的程度,我们一起来看看吧。 …

在线计算机手机中病毒 提示,手机中病毒怎么办 手机中病毒解决方法【详细介绍】...

现在手机中毒愈来愈多,一般只出现在安卓手机上。如果万一手机中毒,无论是中勒索、恶意软件抑或是木马,都会很绝望。下面我就来教大家几招手机中毒自救方法,快来看看吧! 方法一:安装杀毒软件 若果所中的是木马程序或一些…

【数据结构导论】第 2 章:线性表

目录 一、线性表的基本概念 (1)线性表的基本概念 (2)线性表的逻辑结构特征 (3)线性表的基本运算 二、线性表的顺序存储 (1)线性表顺序存储的类型定义 (2&…

【C#】并行编程实战:实现数据并行(1)

本教程对应学习工程:魔术师Dix / HandsOnParallelProgramming GitCode 到目前为止,我们已经掌握了并行编程、任务和任务并行的基础知识。本章将讨论并行编程的另一个重要方面,即数据并行。 任务并行可以为每个参与线程创建一个单独的…