CPU历来都是一个高大上的话题,普通吃瓜群众除了CPU越贵越好之外,可能就一无所知了。曾经小编对于CPU也是一头雾水,后来请教了很多大神,又查阅了很多资料,才粗略地搞明白了一点。在此,小编就按照自己的理解,尽量用最通俗的语言去撕开CPU神秘的面纱,让更多人能够明白CPU。
CPU的中文翻译叫中央处理器,好吧,这其实只是一句废话,不过为了这个牛逼的翻译,我们也给它一个牛逼的比喻,那我们就把CPU比喻成一个国家的中央机构,接下来我们一一对应打比喻讲解。
影响CPU性能的主要因素可以分为两大块:主频和架构。这里看不懂不要紧,接下来听小编为你一一解释就懂了。
主频我们可以理解为中央部门的工作能力,架构可以理解为国家的管理制度,主要用于协调中央机构各部门之间的工作。所以整个中央机构的工作效率(CPU性能)主要就是受到这两个方面的影响。工作能力越高各部门之间协调越好,整体工作效率自然就越高。反之,任何一方面不够好,都会对整体工作效率造成明显的影响。
我们知道市面上最大的PC处理器主要由两大品牌Intel和AMD垄断,而大部分时间里,Intel都是压着AMD打的,原因就是因为AMD的架构不行,虽然主频对比Intel不落下风甚至稍微领先,但是整体性能却被Intel彻底压制了。这就是因为AMD的中央机构各部门协调能力比Intel差多了,所以即使工作能力差不多,但协调不好,所以整体工作性能就比不过了。
说完了性能接下来我们就来说说CPU的结构和工作原理。
CPU的结构主要由运算器、控制器、寄存器三大块组成。
①运算器就是中央机构里负责执行任务的部门,也就是专门干活的;而控制器就是中央机构的领导小组,针对不同是需要,给运算器下达不同的命令;寄存器可以理解为控制器和运算器之间的联络小组,主要工作就是协调控制器和运算器。
运算器这个干活的部门,平日里整个中央机构要干点啥事就找这个部门。例如东边洪灾了,你去赈灾吧;西边发现金矿了,你去主导挖矿吧;北边下大雪了,你去送温暖吧;南边下暴雨了,你去疏导洪流吧……
②而控制器这个部门比较牛逼,他们是不用干活的,主要就是对国家(整部计算机)发生的各种情况,做出应对,然后让运算器去把活干好。在这里,我们会发现一个大问题:如果这个部门闲的蛋疼,乱下命令怎么办?这也好办,我们就制定出一套行为规范来限制他们,不让他们乱搞。而这套行为规范就是CPU的指令集。
指令集就是CPU的行为规范,所有的命令都必须严格按照这部行为规范来执行。在这里说明一下不同类型的CPU指令集也不一样,其中最常见的就是X86架构下的复杂指令集和ARM架构下的简单指令集。X86就是我们平常电脑CPU的架构,ARM就是手机CPU的架构。
由于电脑CPU这个中央机构所在的国家(电脑)面积大、人口多、国情复杂,啥事都会发生,所以规章制度就需要特别完善,考虑到方方面面的情况要怎么应对。而手机CPU这个中央机构国家小、人口少、面积窄,所以规章制度简单一点就可以了。这就是复杂指令集和简单指令集的区别。
③寄存器这个部门稍微复杂一点,因为它虽然没有运算器和控制器那么重要,但是它P事多,控制器平时总喜欢让寄存器去给运算器传达个命令。而运算器有时候也会担心数据太多一时处理不过来,就让寄存器帮它先记着,有时候工作需要些笔啊、纸啊、螺丝刀之类的小工具,也让寄存器帮它拿着。
了解完寄存器的功能后,又发现了一个问题,如果控制部门下达的命令太多,而运算部门又没那么快可以做完,又或者运算器让它记住的东西或者临时拿着的东西太多,寄存器部门太小,人太少,忙不过来怎么办?好办,扩招人员吧,可是这个部门的人员都是编制内的,没有在编名额了怎么办?也好办,那就招些编外人员吧,也就是我们常说的临时工。
招了临时工,总要给他个名号吧,那就再成立一个部门,叫高速缓存。为了体现亲疏有别,这个部门把临时工分为三个等级,分别是一级高速缓存、二级高速缓存、三级高速缓存。反正也是临时工,名号就这么随便叫吧。
在CPU这个中央机构可跟新闻上说的事给临时工做、锅给临时工背不同,在这里高速缓存这个临时工部门是作为寄存器替补而存在的,也是说,必须在寄存器完成不了工作量时,才能交给高速缓存来做。一开始交给一级高速缓存来做,一级也做不完再给二级,二级还做不完就给三级。这里又有一个问题出现了,那就是如果三级也做不完怎么办?
这完全没问题,交给中央机构的一个下属部门去办,这个部门就是内存。但是因为内存毕竟不属于中央机构,工作能力没有中央机构人员那么强,效率也没有那么高。
所以控制部门要下达命令或者运算部门要做事时,首先想到的就是寄存器,寄存器忙不过来了就找高速缓存帮忙,高速缓存也忙不过来就找内存帮忙。那么,内存也传达不过来呢?内存传达不过来那就没办法了,只能让电脑先卡着吧,等运算部门先把上一件事处理好再说。所以,买电脑,不能光看CPU牛不牛,内存容量也要跟上。
还有一个容易被大家忽略的问题,在这里也说一下吧,那就是晶体管。晶体管是构成CPU最基础的原件,可以理解为整个中央机构的工作人员。随着科技的进步,CPU生产工艺越来越精细,目前手机端CPU(ARM架构)制程已经提升到7nm,电脑端也达到了14nm。
制程的提升,我们可以理解为,缩减每个办公人员的办公面积,以前科技不发达每个办公人员必须配一个独立办公室,才能有效完成工作,现在技术进步了,每个办公人员只需要一张办公桌就能完成工作了。所以同样的一栋大楼,可以容纳的办公人员(晶体管)就多了,工作能力就上升了。
以前一个CPU由于制程落后,只能容纳几千万或者几亿个晶体管,现在制程进步了,一个同样体积的CPU可以容纳几十亿个晶体管,性能自然就提升了。
那么,为什么晶体管数量增加了,CPU的能耗却没有增加呢?我们可以这么理解,每个工作人员都需要吃饱了才有力气干活,以前的工作人员需要吃九菜一汤才够力气,现在改为营养配餐了,每个工作人员只需要吃一片营养药丸就可以工作了,所以工作人员虽然增加了,但是整体伙食成本(耗电量)并没有增加。
最后,我们说一下CPU的核心和进程又是什么呢?我们可以这么理解,在单核时代,每个CPU只有一个核心,也就是只有一个中央机构,但是国家那么大,事那么多,中央机构每天加班25个小时都忙不完了。那就没办法了,扩充中央机构吧。于是乎双核、四核、多核CPU就出来了。每一个核心都是一个独立的中央机构,都具有相同的工作能力。
这么多个中央机构成立了,那听谁的,有事情交给哪个中央机构去做,要知道它们的权利和功能都是一样的啊。这时候就要改变CPU架构了,也就是国家的管理制度了。以前国家只有一个中央机构,啥事都交给它去做准没错,现在突然变成好几个中央机构了,怎么办?
这个时候就需要为每个核心安排去负责不同的事务了,这套中央机构专门负责农业,那套负责工业,剩下的负责税收、财政等等之类的。
那什么是进程呢,进程其实可以理解为一个中央机构里面的人员组成。有时候事太多了,光这几个中央机构处理起来还是有点吃力,但是为了节约成本,我们不能再组建新的中央机构了,那就只好折中处理,不另外成立新的中央机构了,就在原有的基础上,每个中央机构组建两套完全一致的工作班子吧。
所以,4核CPU就是拥有四个独立的中央机构,都具备相同的工作能力和权限,但是每个核心都会负责不同的事务。4核8线程就是四个独立的中央机构,每一个中央机构都拥有两套完整的工作班子,每套工作班子权限也一样。
这时候问题又出现了,例如某个中央机构负责的事特别多,忙不过来,而其他的中央机构负责的事很少,闲的发慌,那怎么办?这时候,我们的架构又出现了,好办!今天你这个核心负责的事多,就你来主导,让其他事少的核心辅助你工作。明天另外一个核心负责的事多,就由它来主导,其他核心辅助它工作。
在这里小编想起来一个网上很火的段子:MTK的CPU一核有难九核围观。这就是架构落后造成的,它的管理制度不完善,没办法调节每个中央机构之间的互相配合,有事情要做,往死里用一个核心,其他九个核心啥事没有,只好吃瓜围观了。
有个人其实答的挺好,说架构=指令集,这个回答对非相关专业的人可能会带来另外一个疑问: 那指令集又是尼玛什么东东?
我举个例子吧:我们炒菜的时候,肯定要分步骤的,对吧。 那炒菜分什么流程呢? 从大的方面来说,起码要包含:买菜,择菜,洗菜,切菜,备调料,开火,热油,将菜放入锅中,翻炒(爆炒、煎、炸,等等),出锅,摆盘。
好,那我们来看,以上这些步骤,其实每一步又可以分为小的步骤,比如买菜,起码要分为:走到菜市场,挑选一家靠谱的菜摊,询价,称重,付钱,走回家。
所以,一个简单的炒菜,就是由一个个小步骤汇聚成的一个个大步骤所组成的。因此在执行“炒菜”这个动作的时候呢,只要按照每个步骤来,别管最后的菜好不好吃,起码能出来“菜”这个结果。
那我强调这些个步骤和步骤的细分,和我们要讨论的指令集又有什么关系呢? 有关系,关系大了! 其实炒菜的步骤,从概念上和CPU处理各种计算是类似的,CPU处理计算也是一个个小步骤汇聚成大步骤,完成大步骤即可以得到结果。而指令集就是CPU处理各种计算的步骤的细分,只不过它把各种步骤固定下来作为一个组合。
开个脑洞,假设存在一个“买菜指令集”,那这个指令集就是我上边说的这些具体步骤:买菜,择菜,洗菜,切菜,备调料,开火,热油,将菜放入锅中,翻炒(爆炒、煎、炸,等等),出锅,摆盘。当然,我说了,做菜的大致步骤如上,我并没有说你非要这么做。 根据喜好,你还可以调整顺序啊,或者你可以在网上买食材送上门啊,或者洗菜的过程中顺便摘菜啊,都可以的。 因此, 只要你的处理步骤不同,实际上你个人的“买菜指令集”就是不同的。
这个时候就要提到架构是什么了。 买菜你步骤不同没关系,得到同样一盘菜就好了;CPU处理计算,本来逻辑上说,只要结果正确步骤也没问题,可是,由于你必须要把你的指令集写死在芯片上,因此,不同的指令集,写在芯片上的电路自然也就有区别了;甚至由于指令集不同,每种指令集所需要的寄存器、数据带宽也都有所不同,那么制作出来的芯片自然区别比较大了。 这些不同的芯片设计和安排,就是所谓的“架构”。
所以,现在你就知道,x86的架构和ARM就不一样,他们的指令集不同,自然架构就不同了。这里顺口提一句什么是精简指令集(RISC),什么又是复杂指令集(CISC)。
精简指令集,就是把炒菜的步骤使劲分到最小,小到无法在细化,那么这时这个步骤就是通用的了,比如“买菜”的细分步骤“出门”,“出门”这个动作不光适用于买菜,买馒头,倒垃圾呀什么的,都可以使用“出门”这个细分步骤。 当这么多小到不能再小的步骤集合在一起,就是精简指令集了。
那复杂指令集则相反,它是不太细化的指令,比如“买菜”就是买菜,就是代表一整套买菜流程,而“倒垃圾”我就再来一整套倒垃圾流程。 因此复杂指令集就会比较个性化,设计起来也更困难,因为他每一个指令要完成的动作更复杂,但好处是效率高,时间快。而精简指令集虽然很好设计,但是每个动作被分为更多步,就会导致效率变低,执行慢,而如果你人为的加快时钟频率的话,能耗又会加大。
所以,二者兼有长短。 一般来说x86这种复杂指令集应用在个人电脑或者服务器上,而ARM这种精简指令集则用在移动设备上。