24

djygrdzh · 2020年04月28日

ARM攒机指南-开篇

作者:djygrdzh
来源:https://zhuanlan.zhihu.com/p/32365343

经常有人说,现在做手机芯片就像搭积木,买点IP,连一下,后端外包。等芯片回来,上电,起操作系统,大功告成。这么简单,要不我们也来动手攒一颗吧。不过在攒机之前,我们还是先要把基础概念捋顺了。
评价一颗芯片,着眼点主要是功能,性能,功耗和价格。功能,是看芯片内部有什么运算模块,比如处理器,浮点器,编解码器,数字信号处理器,图形加速器,网络加速器等,还要看提供了什么接口,比如闪存,内存,PCIe,USB,SATA,以太网等。



性能,对CPU来说就是基准测试程序能跑多少分,比如Dhrystone,Coremark,SPEC2000/2006等。针对不同的应用,比如手机,还会看图形处理器的跑分,而对网络处理器,会看包转发率。当然,还需要跑一些特定的应用程序,来得到更准确的性能评估。

功耗,就是在跑某个程序的时候,芯片的功率是多少瓦。通常,这时候处理器会跑在最高频率,但这并不意味着所有的晶体管都在工作,由于power gating和clock gating的存在,有些没有被用到的逻辑和片上内存块并没在耗电。芯片公司给出的处理器功耗,通常都是在跑Dhrystone。这个程序有个特点,它只在一级缓存之上运行,不会访问二级缓存,更不会访问内存。这样得出的功耗,其实并不是包含了内存访问的真实功耗,也不是最大功耗。为得到处理器最大功耗,需要运行于一级缓存之上的向量和浮点指令,其结果通常是Dhrystone功耗的2-3倍。但是从实际经验看,普通的应用程序并不能让处理器消耗更高的能量,所以用Dhrysone测量也没什么问题。当然,要准确衡量整体的芯片功耗,还得考虑各种加速器,总线和接口,并不仅仅是处理器。

在芯片设计阶段,功能,性能,功耗和价格就转换成了PPA。PPA指的是性能,功耗和面积。其中,性能有两层含义。在前端设计上,它表示的是每赫兹能够跑多少标准测试程序分。设计处理器的和时候,会有多少级流水线的说法。通常来说,流水线级数越多,芯片能跑到的最高频率越高。可是并不是频率越高,性能就越高。这和处理器构架有很大关系。典型的反例就是Intel的奔腾4,30多级流水,最高频率高达3G赫兹,可是由于流水线太长,一旦指令预测错误,重新抓取的指令要重走这几十级流水线,代价是很大的。而它的指令又非常依赖于编译器来优化,当时编译器又没跟上,导致总体性能低下。而MIPS或者PowerPC的处理器频率都不高,但是每赫兹性能相对来说还不错,总体性能就会提高一些。所以性能要看总体跑分,而不是每赫兹跑分。

性能的另外一个含义就是指最高频率,这是从后端设计角度来说的。通常后端的人并不关心每赫兹能达到多少跑分,只看芯片能跑到多少频率。频率越高,在每赫兹跑分一定的情况下,总体性能就越高。请注意对于那些跑在一级缓存的程序,处理器每赫兹跑分不会随着频率的变化而变化。而如果考虑到多级缓存,总线和外围接口,那肯定就不是随处理器频率线性增加了。

哪些因素会影响频率?就算只从后端角度考虑,因素也很多,以下方面仅供参考。

首先,受工艺的影响。现在先进的半导体工厂就那么几家,Intel,台积电,三星,格芯,联电等。拿台积电来说,它之前提供16纳米的工艺,其中还分了很多小结点,比如FFLL++和FFC。每个小节点各有特点,有些能跑到更高频率,有些功耗低,有些成本低。在不同的工艺上,芯片能跑的最高频率不同,功耗和面积也不同。

其次,受后端库的影响。工厂会把工艺中晶体管的参数抽象出来,做成一个物理层开发包,提供给工具厂商,IP厂商和芯片厂商。而这些厂商的后端工程师,就会拿着这个物理层开发包,做自己的物理库。物理库一般包含逻辑和内存两大块。根据晶体管参数的不同,会有不同特性,适合于不同的用途。而怎么把这些不同特性的的库,合理的用到各个前端设计模块,就是一门大学问。一般来说,源极和漏极通道越短,电子漂移距离越短,能跑的频率就越高。可是,频率越高,动态功耗就越大,并且可能是按指数级上升。除此之外,还会有Track这种说法,指的是的标准单元的宽度。宽度越大,电流越大,越容易做到高频,面积也越大。还有一个可调的参数就是阈值电压,决定了栅极的电压门限,门限越低,频率能冲的越高,静态功耗也越大,按对数级上升。手机芯片一般会使用正常电压的库,而矿机就需要全定制的库,0.4V电压甚至更低。

接下来,受布局和布线的影响。芯片里面和主板一样,也是需要多层布线的,每一层都有个利用率。总体面积越小,利用率越高,布线就越困难。而层数越多,利用率越低,成本就越高。在给出一些初始和限制条件后,EDA软件会自己去不停的计算,最后给出一个可行的频率和面积。

再次,受前后端协同设计的影响。处理器的关键路径直接决定了最高频率。ARM的大核,A73之后,由于采用了虚地址索引VIPT,免去了查MMU,关键路径已经集中到一级缓存的访问时间延迟上了。

从功耗角度,同样是前后端协同设计,某个访问片上内存的操作,如果知道处理器会花多少时间,用哪些资源,就可以让内存的空闲块关闭,从而达到省电的目的。这种技巧可能有上千处,只有自己做处理器才会很清楚。

再往上,就是动态电压频率缩放DVFS。这里需要引入功耗的组成概念。芯片功耗分成动态和静态两部分,静态就是晶体管漏电造成的,大小和芯片工艺,晶体管数,电压相关,而动态是开关切换造成的,所以和晶体管数,频率,电压相关。控制动态功耗的方法是clock gating,频率变小,自然动态功耗就小。控制静态功耗的方法是power gating,关掉电源,那么静态和动态功耗都没了。还可以降低电压,那么动态功耗和静态功耗自然都小。可是电压不能无限降低,否则电子没法漂移,晶体管就不工作了。并且,晶体管跑在不同的频率,所需要的电压是不一样的,拿16纳米来说,往下可以从0.9V变成0.72V,往上可以变成1V或者更高。别小看了这一点点的电压变化,动态功耗的变化,是和电压成2次方关系,和频率成线性关系的。而频率的上升,同样是依赖于电压提升的。所以,1.05V和0.72V,电压差了45%,动态功耗可以差3倍。

再往上,就是软件电源管理了。芯片设计者把每个大模块的clock gating和power gating进行组合,形成不同的休眠状态,软件可以根据温度和运行的任务,动态的告诉处理器每个模块进入不同的休眠状态,从而在任务不忙的时候降低功耗。

从上面我们可以看到,功耗和性能其实是相辅相成的。芯片设计者可以用不同的工艺和物理库,在给定功耗下,设计出最高可运行频率,然后用软件动态控制芯片运行频率和电压,优化功耗。

频率和面积其实也是互相影响的。给定一个目标频率,选用了不同的物理库,不同的track,不同的利用率,形成的芯片面积就会不一样。通常来说,越是需要跑高频的芯片,所需的面积越大。频率差一倍,面积可能有百分之几十的差别。别小看这百分之几十,对晶体管来说,面积就是成本,晶圆的总面积一定,价钱一定,那单颗芯片的面积越小,成本越低,并且此时良率也越高。

芯片成本除了流片,晶圆和封测费,还来自于授权费,工具费,运营开销等,通常手机处理器这样复杂的芯片,没有几千万美元是不可能做出来的。就算做出来,没有卖掉几百万片,也肯定是亏本的。

这里再提下ARM的大小核设计。其最初的目的是想设计两组核,小核每赫兹性能低,面积小,跑在低频;大核每赫兹性能高,面积大,跑在高频。运行简单任务,大核关闭,小核在低频,动态和静态功耗都低,而大核用高频运行复杂任务。小核在低功耗场景下,通常只需要大核一半的面积和五分之一的功耗。这和不区分大小核,单纯调节电压频率比,有显著优势。

那为什么不让小核跑在高频运行复杂任务呢?理论上,由于每赫兹性能低,对于相同的任务,小核必须跑在比大核更高的频率才能完成,这就意味着更高的电压。此时,动态功耗占上风,并且和电压成三次方关系,最终的功耗会高出大核不少。此外,我们前面已经解释过,小核要跑在高频,面积会增大不少,可能比大核还要大。所以,这里存在一个平衡点。拿A53/A57在28纳米上举例,当它们跑在1.2Ghz的时候,功耗可能差两倍,性能却只差50%。而继续升频,功耗3次方上升,性能线性上升,最终可能在2Ghz达到平衡点。此时,A53的能效比反而不如A57。当然,这个平衡点在不同工艺上是不断变化的。再反过来考虑,在2Ghz之前,其实可以用高频A53做大核,能效比并不低于A57。事实上,很多手机芯片已经这么做了。

还有一个问题,既然小核能效比更高,那为什么不用多个小核来代替大核呢?这是因为手机上的很多应用,如果没有特别优化,都是单线程的,多线程编程向来容易出问题。此时,多个小核并不能代替一个大核,所以大核必须存在。而当应用适合分成多线程,也没有过多同步的开销时,毫无疑问,小核更具能效比。

从上面我们看到,设计芯片很大程度上就是在平衡。影响因素,或者说坑,来自于方方面面,IP提供商,工厂,市场定义,工程团队。水很深,坑很大,没有完美的芯片,只有完美的平衡。在这点上,苹果是一个很典型的例子。苹果A10的CPU频率不很高,但是Geekbench单核跑分却比 A73高了整整75%,接近Intel桌面处理器的性能。为什么?因为苹果用了大量的面积换取性能和功耗。首先,它使用了六发射,而A73只有双发射,流水线宽了整整三倍。当然,三倍的发射宽度并不表示性能就是三倍,由于数据相关性的存在,发射宽度的效益是递减的。再一点,苹果使用了整整6MB的缓存,而这个数字在别的手机芯片上通常是2MB。对一些标准跑分,比如SpecInt2000/2006,128KB到256KB二级缓存带来的性能提升仅仅是7%左右,而256KB到1MB带来的提升更小,缓存面积却是4倍。第三,除了一二三级缓存之外,苹果大量增加处理器在各个环节的缓冲,比如指令预测器等。当然,面积的提升同样带来了静态功耗的增加,不过相对于提升频率,造成动态功耗增加来说,还是小的。再次,苹果引入的复杂的电源,电压和时钟控制,虽然增加了面积,但由于系统软件都是自己的,可以从软件层面就进行很精细的优化,将整体功耗控制的非常好。举个例子,Wiki上面可以得知,A10上的大核Hurricane面积在TSMC的16nm上是4.18 平方毫米,而ARM的下一代大核,在2.4Ghz时,SPECINT2000跑分接近,面积少了70%。但是,也只有苹果能这么做,一般芯片公司绝对不会走苹果这样用大量面积换性能和功耗的路线,那样的话毛利就太低了。

推荐阅读

授权转自知乎,欢迎关注ARM攒机指南专栏,后续还有AI等相关篇章。
推荐阅读
关注数
10711
内容数
12
Arm相关芯片文章,涵盖AI,5G,自动驾驶等,欢迎关注。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息