苹果的M1芯片在执行任务时有哪些优势? 苹果是从2004年起把自家笔记本的CPU从IBM的Power系列换到了Intel的酷睿系列,原因是Intel的CPU的性能功耗比远超过IBM。 而2020年,苹果又完全舍弃了Intel,用上了自己的CPU。其实理由也和当初一样,因为自家研发的CPU在性能功耗上比Intel好一大截。 但实际上,苹果M1系列CPU和一直以来的Intel酷睿系列、AMD的Zen3系列,构架都是高度类似的。那么,为什么M1会强那么多呢? 接下来,我就用这三款当前典型的CPU做个对比。为了降低你收听的负担,Intel的酷睿和AMD的Zen3我就不再重复全称了,直接就说Intel和AMD。 这些CPU在执行任务的时候,都是按照取指令指令译码指令执行对内存的读取结果写回这5个步骤进行的。下面,我们说说在这些细节上的差异。 在执行指令之前,影响性能的环节就是把指令拿过来。这就对应了刚才说的取指令这个步骤。取来的指令会放在一级缓存里,所以如果一级缓存够大,就有利于CPU提高性能。 在这一步,M1就大幅超越了Intel和AMD。M1的一级缓存是192KB,比Intel和AMD的32KB大了5倍。 指令拿来之后,还需要对指令做一下解码。这是因为,所有的外部指令都要被翻译成CPU可以看懂的语言才行。在这里,M1设置了8个解码器,Intel是5个,AMD是4个。仅从数量上,我们就可以看出差距。 但其实,差距还不止是数量上的。因为实际上,这3款CPU内部可以读懂的指令都是一类叫作RISC的指令(精简指令集)。这种指令,每一条的长度、执行时间固定,只不过不能太复杂,如果要完成复杂动作,需要堆叠好多条RISC才可以。 为了和进入解码器之前的指令有所区分,经过解码器之后的每一条指令就叫它微指令了。 而输入进CPU的指令又是什么呢? 苹果的M1,输入进来的就是RISC指令。而对于Intel和AMD来说,都是X86指令。这是一种和RISC指令完全不同的指令,它们叫作CISC(复杂指令集)。这种指令长度不固定、执行时间也不固定,只不过可以用一条指令执行一些比较复杂的任务,而不用堆叠好多条。 RISC和CISC是两个截然不同的阵营。在Intel和AMD的CPU里,需要多一道手续把CISC翻译成RICS,于是翻译的过程自然就需要耗能、耗时间。而苹果的M1,输入进来的指令就是RISC,翻译器输出的也是RISC。 你可能想问,既然苹果输入输出都是RISC,还翻译干嘛呢?因为还需要标准化一下。但这样的标准化,有点类似于把繁体中文翻译成简体中文,比较简单。而Intel和AMD在这一步做的翻译,类似于古汉语翻译成简体中文,就费劲多了。于是在这一步上,M1就节省了大量能耗。 在执行之前,还有一个步骤是把翻译标准化的指令发射出去。在发射这一步上,M1一次能发出8个微指令,而AMD一次发出6个,Intel一次发出4个。也就是说,执行同样任务,同样频率下,M1发出去的微指令数正好大了Intel一倍。 在微指令被执行之前,还有一步是给它们排序。因为有些指令要执行,需要等待前序计算结果。 比如,除法中的借位就是一个典型。于是就存在一个现象,有些微指令的前后顺序不能变。而还有很多微指令的执行无所谓先后,只要尽快算出结果就好。 于是,那些需要等待前序计算结果的指令就容易淤积在队列里。这个排队等待区叫做缓冲区。由于这个缓冲区是给微指令排队用的,所以这里又叫做重排序缓冲区(ROB)。 这个区域当然是越大越好。而M1这里能排630条,Intel能排224条,AMD能排256条。M1比其他两款大了2倍多。 接下来,就到了执行的部分。执行指令的工人越多,速度越快,自然就更不容易成为整体性能的瓶颈。以浮点运算这个当今对性能影响最直接的指标来看,M1、Intel和AMD规划了一样多的资源,都是类似2个256bit的执行单元。 当然,除了浮点运算之外,这个单元也一样负责运行整数部分的运算。整数运算加浮点运算就是CPU的全部运算了。而临时存放整数和浮点部分的单元,M1也更强,是一个354384的结构,而Intel是180168,AMD是192168。 所以,虽然执行单元的执行力一样,但临时存放的部分(寄存器),M1更大,所以更有利于消除瓶颈。 执行部分说完。在二级缓存(L2)上,M1又规划了巨大的资源,每个核心都布设了3MB的二级缓存。这是处理器设计历史上最大的。Intel是每核心1。25MB,AMD是每核心0。5MB。 二级缓存大,在预测哪些指令将会被使用的时候,就可以提前预备好,于是接下来要使用的指令被提前放进来的机会就大。一旦用得上,从缓存里拿来用的速度,就远比从内存里拿来用更快。这就像紧急救援部队是从楼下赶来,还是从3条街以外赶来那样大的区别。 当然,从3条街以外赶来也很重要。因为毕竟所有需要用到的东西都是先存到内存、再挪到缓存、再送进CPU的。内存的带宽大,也能消除瓶颈。 但M1对内存的处理手法完全不同。在M1里,那些内存你是无法摸到的,因为它们布设在CPU的铁盖子下面,和CPU是一体的。而普通电脑的内存在哪儿呢?大约离CPU有510cm远,是一条一条可以拔插的、大家所说的内存条。内存条,就是这么来的。M1这么做的最大好处就是降低延迟,从传统电脑的70ns降低到了45ns。 而内存带宽上的差距就更大了。M1Ultra可以达到800GBs,哪怕是M1Pro和M1也有200GB,而Intel和AMD大约只能有50GBs60GBs。 于是,在高清视频剪辑这种每秒都有几十GB实时数据传递的任务里,苹果笔记本的处理效率就非常高。所以今天,绝大部分视频UP主只要经济状况允许,肯定是用苹果笔记本剪辑的。 CPU的性能是什么决定的? 其实,CPU的性能好不好,并不是靠在某个环节上猛堆料实现的。因为计算过程是一条流水线,线上任何一点的瓶颈都决定了CPU的最大性能。M1比传统CPU好就好在,它在任何环节都堆了猛料。 在一些典型的图像渲染任务(CinebenchR23)的处理上,全核心开足马力的M1是7800分,而Intel的i912900K是13500分。别看Intel这个台式机旗舰机CPU的性能是M1的170,但功耗却是M1的650。算在一起,同样性能下,M1构架的CPU只需要Intel的1413的功耗。 所以,使用M1构架的苹果笔记本可以不用带电源适配器,办公一整天也绝对保证续航。 而这一点目前在传统处理器上是越来越做不到了。因为Intel和AMD都在比拼最高性能,于是本来能耗比尚可的设计都不能悠着来了,必须要把最后一滴性能榨干,甚至有的时候不惜让功耗增加一倍换来性能10左右的提升。 这就导致了另外一件怪事的出现,如果你买的是传统处理器的笔记本,那插上交流电电源和不插电源的时候,性能会相差3040。 因为当你不插交流电源的时候,系统如果还按最大性能运行,会导致电池快速用完,用户体验就太差了。于是,只用电池续航的时候,系统会强制CPU和GPU以低频、低压运行。这时,性能就巨幅下降。 而苹果的CPU完全不存在这样的设定,用电池和用电源时的性能都完全一样。 为什么苹果的CPU这么贵? 说到这里,我们是一直围绕2020年发布的M1来说的。实际上,大家更关注的是3月8日晚上发布的M1Ultra。但是,理解M1对理解M1Ultra至关重要,因为: M18CPU8GPU M1Pro10CPU16GPU M1Max10CPU32GPU M1Ultra20CPU64GPU M1的晶体管数量是160亿,M1Ultra的晶体管数量是1140亿,是M1的7倍多,也是世界上第一枚晶体管数量超过1000亿的芯片。M1Ultra就是使用M1的基础构架搭积木搭出来的。 说回苹果的CPU为什么这么好。 首先,因为一分钱一分货。这颗CPU的成本要比Intel和AMD的贵上几倍到十几倍。业内分析,M1Ultra的制造成本在350美元左右,而Intel和AMD顶级CPU的成本也就只有几十美元。 苹果当然有技术优势,但如果把单颗CPU的成本也限定在和Intel与AMD类似的范围,苹果也只能做到Intel和AMD的水准而已。 但为什么苹果敢做这么贵的CPU呢? 原因就是,苹果不是卖CPU的,它是卖整机的。 如果像Intel和AMD那样靠卖CPU赚钱,仅制造成本就要350美元。如果按研发成本是50美元颗计算,总成本就是400美元,那售价至少要奔着2000美元去了。而今天,CPU销量最大的型号的售价普遍在200400美元之间。 所以,Intel和AMD都不会规划那么豪华的构架。苹果敢这么做,是因为它只卖整机,而且价格很高,50008000美元一台。那么,在最关键部件分配350美元成本是没问题的。 第二个原因是,苹果还能进一步压缩研发费用。 开发出的M1构架可以不断堆叠,堆2倍、堆3倍、堆7倍,就从移动端变到了笔记本再到台式机再到一体机,各种平台通用。而这样大幅度的使用一款基础产品,通过扩大规模来平移到各个产品之中,也只有苹果可以做到。因为苹果的每类产品都拥有过亿的用户,这些平台甚至连操作系统都是统一的。 当然,苹果的CPU也不是完美的。 比如,M1Ultra实际上已经牺牲了一部分能耗上的优势,有意地加大规模去追赶当前英特尔最新款的12代酷睿处理器。 再比如,和M1比起来,M1Ultra的单核性能几乎没有任何提升。CPU全核性能是M1的3。2倍,但实际晶体管的数量却是M1的7。1倍。 另外就是,苹果的电脑哪怕GPU规格极高,也几乎没法用来玩儿游戏。这是游戏软件不支持导致的,算是个历史原因。 但我们也可以预测,Ultra是M1构架最后一个版本,苹果下次再次更新CPU时,代号肯定会升级到M2,它也许会在2022年9月的发布会上露面。