登录注册   忘记密码

为什么电脑CPU没通过单纯地增加硅晶片面积来加强性能?

朝钟暮鼓 | 2017/10/23 14:24:13

看到移动CPU,苹果堆料狂魔不就是狂堆晶片面积的吗,为什么电脑CPU没这样做呢?


  • 帝哲  |   2017/10/24 14:48:28

    经常有朋友问我:“Intel为什么不出个100核的CPU”,“AMD单核干不过Intel,怎么不堆出个巨无霸和Intel竞争呢?”。“质不够,量来凑”似乎是个好主意,顿时感觉摩尔定律有希望了,我们相关行业又可以混几年了。

    幻想美妙,现实残酷。CPU制程不变的情况下,堆砌内核必定造成CPU核心Die尺寸的增大,而其对于产品的良率有极大的影响。产品的良率影响到产品的价格,谁也不想看到自己的钱包缩水。下面我们来看一下Die的大小对于良率的影响。

    Die的大小与良率(yield)

    在前文(CPU制造的那些事之一:i7和i5其实是孪生兄弟!?)中我们介绍了CPU的制造过程,也顺便提到了晶圆Wafer。我们就以目前主流的300mm晶圆为例。先假设我们的晶圆出自上帝之手,没有任何缺陷(Defect)。因为Die一般是长方形或者正方形,所以圆形的Wafer边缘部分被浪费了,如下图:

    从图中我们可以看出随着Die的缩小,浪费的比例也从36%缩小成为12.6%。根据极限知识,我们知道如果Die的大小足够小,我们理论上可以100%用上所有的Wafer大小。

    从前文我们知道晶圆在制造过程中总有缺陷,就像撒芝麻粒

    如果考虑缺陷,Die的大小会严重影响良率:

    上图大家可以点开看(图比较大),其中不太清楚的红色小点是晶圆的缺陷,在Die很大时,有很大概率它的范围内会缺陷,而只要有缺陷该Die就报废了(简化处理);在Die比较小的时候,它含有缺陷的可能性就大大降低了。如图中,良率从第一个的35.7%提高到了95.2%!我们举个极端的例子,整个Wafer就一个Die,那么良率只有0%了,生产一个报废一个。谁还干这么傻的事!

    制程、Die的大小与良率

    22nm->14nm->10nm,每一步前进都会消耗大量的投资,芯片生产厂家还乐此不疲,有很大的原因就是制程提高了,Die也小了(或者可以塞入更多的晶体管),良率提高了,也就省钱了。制程提高还能带来另外的好处,譬如更加省电了,性能更好了等等。

    但是更好的制程在最初往往会让晶圆的缺陷更容易造成严重问题,反过来会降低良率。频率也可能上不去,不等不binned到低频。同时漏电流的增加会让待机功耗增加,这也是为什么最初的14nmCPU比22nm待机功耗更高的原因。

    结论

    100个内核的CPU是行不通的,至少目前行不通。现在Die尺寸最大的据我所知就是Intel的Knight系列和N的人工智能板卡,成本非常高。而它们能做那么多核是因为每个核都很简单,占地很小。

    也有同学好奇为什么不采用更大的Wafer呢?那将我们下一篇的内容。

    补充

    AMD在猪队友工艺落后Intel的前提下,又想要堆核怒怼。另辟蹊径,采取一个Package封装4个独立Die的做法,推出了EPYC服务器芯片,即不影响良率,又可以核心数目好看,可谓一举两得。

    并在刚不久发布了ThreadRipper

    可惜连接四个Die的片外总线终归没有片内总线效率高,在好些benchmark中败下阵来,可见没有免费的午餐。他也似乎忘记了自己在2005年双核口水大战中调侃Intel是“胶水粘”的双核,自己这次可是“拼积木”式的,为了数据好看也够“拼”的了。

    有些同学不认为四个Die是个问题,那么我们来看看四个Die是怎么连接的。我们来看一个双路EPYC服务器:

    注意这里的双路之间互联和每个CPU Package(MCM)里面4个Zeppelin Die都是Infinity Fabric连接的,本质上Package的四个Die和四路CPU没有什么不同。是四个NUMA的Node(NUMA与UEFI)。

    而Intel的Pakcage内部是一个Die, Core直接原来是Ring Bus,在Skylake后改为Mesh:

    而与Infinity Fabric对应的QPI和KTI/UPI只用到了socket互联:

    v2-424aacf72af926d43d48fe55ac76de77_r.png

    它们的延迟不在一个数量级上。

    AMD这样做,在增加灵活性之外,主要的目的是:省钱!!AMD每个Zeppelin Die都比Intel的小,这对良品率提高很大,节约了生产费用。



  • ken  |   2017/10/25 16:51:18

    桌面处理器,比如酷睿或者锐龙,每个核心的面积都比A10大,总的面积更是大了很多。在堆处理器面积这个事情上,桌面处理器走得远远比移动处理器要远,遇到了各种各样的障碍。苹果大牛很多,处理器各种亮点也很多,但至少在堆面积这个事情上完全没法让领先者借鉴。


  • 迪迦奥特曼  |   2017/10/26 9:26:47

    看看AMD的线程撕裂者:

    和Ryzen、某颗LGA2011-v3 i7的基板大小对比:

    Ryzen开盖

    LGA-2066的i9 7920X开盖

    不止是AMD,Intel也是这个路数:

    左边是8代的8700K,右边是7代的7700K。

    Intel家同样是14nm工艺,横向对比:六代双核:98.57mm2,六代四核:122.40mm2,增加24%多点;七代双核98.68mm2,七代四核126.15,增加将近28%;就算是纵向对比,也稍有提升。


    从原理上来说,现代CPU性能提升不外乎几个途径:

    1、提升主频。这个很好理解,问题是在限定功耗的前提下,这个真的是一步一个脚印。以Intel为例,每一代大概能提升0.2G左右。

    这个跟晶片面积无关。


    2、增加指令集。这个说起来比较复杂,但简单来说就是同一个时钟周期干更多的活。有的是通过增加寄存器位宽,同时处理多个数据(SIMD);有的是把原来N个独立的指令组合成一个新的指令,吧原来N个时钟周期的计算在一个或者两个时钟周期内完成。问题是如果程序需要的指令不是这样组合的话,对提升性能没用;就算是这样组合的,也要重新编译才能发挥出新指令集的性能。以现代CPU指令集和程序的复杂程度,新增单个指令,纯粹从这种计算的性能来看也许能提升200%甚至1000%,但整个程序不止这么一个指令,平均下来能提升0.5%就牛叉的不行了。通常来说新增一组指令集,目标应用优化后能提升20~30%,整体要看目标应用的占比。

    每增加一个指令集,都需要更多的晶体管,自然会增加晶片面积。


    3、增加运算单元。这个很好理解,而且不需要程序做特殊优化,不过需要配套的指令发射器、分支预测、乱序执行等模块配套,而且通常来说会有不少时间会有一两个运算单元闲置(这也是提出超线程的根本原因,超线程的i7比没有超线程的i5性能超出25%~30%左右——但超线程需要程序进行优化)。

    每增加一个运算单元,都需要更多的晶体管,自然会增加晶片面积。


    4、增加核心数量。这个也很好理解,但需要程序是多线程的。对于无法多线程的应用无效,某些应用的虽然可以多线程,但不同线程间需要等待交换数据,也无法完全发挥多核性能。

    每增加一个核心,都需要更多的晶体管,自然会增加晶片面积。


    5、提升周边设备接口速度。例如内存从DDR3升级到DDR4,单通道升级到双/三/四通道;显卡接口从PCIE 2.0升级到3.0等。这个严格来说并不能提升CPU的性能,只是减少CPU等待外部数据的时间而已。

    是否增加晶片面积,要看实际情况。


    6、增加缓存。5提到CPU要等待外部数据,那么除了提升周边设备性能和接口速度外,还有一个中间方式,就是在CPU使用数据前就把数据放到一个高速设备上。现代CPU通常分有两到三级缓存,缓存越大,命中率越高,CPU等待的时间越少。

    命中率是算法层面的事情,但增加缓存也是需要增加晶体管的,也会增加晶片面积。


    实际上,现代CPU的缓存会占用相当多的晶片面积,看下面i7 5960X的CPU 模组划分:

    ===============================分割线===============================

    PS:当然晶片面积不会无限增加,晶圆是圆形的,CPU晶片是正方形或者长方形的,面积越大,边长越大,浪费的晶圆面积就越多;而且单个晶片面积越大,晶体管越多,良品率就越低。这也是为何Intel在Ryzen发布前一直没有在桌面平台进入更多核心的重要原因之一。

    PS2:最后一张图中间部分就是共享的三级缓存,每个CPU核心还有自己的一级和二级缓存。

    PS3:评论有知友提到缓存共享的问题,自从原生双核的CPU出现以来,一般单个Die的最后一级缓存都是共享的(就PC处理器来说,印象中只有Athlon64 X2例外,没有L3,L2是独占的),例如Core 2 Due只有L1和L2,双核共享L2;Core iX是L1-L2-L3,共享L3。但注意的是,胶水双核/四核的L2/L3是不能跨Die共享的,例如Core 2 Quad是2xL2,Ryzen是2xL3,4*2Die(屏蔽2组)的ThreadRipper是4*L3,这多少会带来一定的性能损失。


  • Evan172  |   2017/10/27 9:34:00

    集成电路芯片指甲盖大小,上面堆满了上亿的三极管二极管和连接线路,大家做个除法,知道这些三极管有多小。

    到今天这技术,大致也就100多个原子那么大吧。

    做芯片的硅片。不论怎么是单晶体,不论怎么改变工艺,那也不会是完美无瑕的。微电子器件里面的缺陷我们不讲,你就想想,到了100多原子这个精细度,硅片上随便一个灰尘一个坑,那这二极管三极管和连接线就死掉了,接下来这块芯片也死掉了。

    应对的办法,是在一个大片子上做上几百个同样的芯片,一个一个的测,遇到有坑的坏的扔掉,好的留下。

    那大片子上的坑是到处都有的,你单个的小片子越大,遇到坑的几率就越大,大到一定程度,坏的几率太高,这生产,也就不用搞了。