為什麼電腦 CPU 沒通過單純地增加硅晶片面積來加強性能?

看到移動CPU,蘋果堆料狂魔不就是狂堆晶片面積的嗎,為什麼電腦CPU沒這樣做呢?


10/18更新

謝邀,這個問題我的一片專欄文章剛好回答這個問題。答案就是增加晶元面積會顯著降低良品率,往往得不償失。我把專欄文章貼在這裡。

經常有朋友問我:「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互聯:

它們的延遲不在一個數量級上。

AMD這樣做,在增加靈活性之外,主要的目的是:省錢!!AMD每個Zeppelin Die都比Intel的小,這對良品率提高很大,節約了生產費用。

其他更多文章,大家可以關注我的專欄UEFI和BIOS探秘,和微信公眾號"UEFIBlog",在那裡有最新的文章。

用微信掃描二維碼加入UEFIBlog公眾號


謝邀

知乎慣例:先問是不是。

看看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核心還有自己的一級和二級緩存,謝謝評論區 @Steve Liu 補充。

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,這多少會帶來一定的性能損失。


前面的人都說良品率問題,但我記得:

貌似做超大核心就要考慮一個核心內電子速度的問題了?

另外,現代處理器有相當一部分晶體管是為了降低功耗存在的而不是提升性能。

一整塊晶圓能不能用做CPU?


前本專業人員來簡單點的回答。

集成電路晶元指甲蓋大小,上面堆滿了上億的三極體二極體和連接線路,大家做個除法,知道這些三極體有多小。

到今天這技術,大致也就100多個原子那麼大吧。

做晶元的矽片。不論怎麼是單晶體,不論怎麼改變工藝,那也不會是完美無瑕的。微電子器件裡面的缺陷我們不講,你就想想,到了100多原子這個精細度,矽片上隨便一個灰塵一個坑,那這二極體三極體和連接線就死掉了,接下來這塊晶元也死掉了。

應對的辦法,是在一個大片子上做上幾百個同樣的晶元,一個一個的測,遇到有坑的壞的扔掉,好的留下。

那大片子上的坑是到處都有的,你單個的小片子越大,遇到坑的幾率就越大,大到一定程度,壞的幾率太高,這生產,也就不用搞了。


有一種說法是快到物理極限了,舉一個3GHz的處理器為例,電磁波的傳輸速度是光速也就是3.0e8m,那麼一個周期指令走的距離就是0.1m,如果晶元過大就要考慮數據同步的問題了。


GPU這種高度並行的架構,兩倍的規格基本可以換來兩倍的性能,所以堆料可以簡單粗暴的提高性能。

CPU堆料能做到的就是增加核心,但是兩倍的CPU核心根本無法換來接近兩倍的性能,核心數越多遞減效應越明顯。

而要提高單核性能那就複雜了,牙膏廠每代產品的IPC只有5%-10%的提升(IPC ( Instruction Per Clock, 即 CPU 每一時鐘周期內所執行的指令多少) IPC代表了一款處理器的設計架構,一旦該處理器設計完成之後,IPC值就不會再改變了。在這裡,IPC值的高低起到了決定性的作用,而頻率似乎不再高於一切。)。作為反例,ryzen相對於上代產品IPC提升了52%。

想要做到GPU性能提升(同工藝下),就像蓋房子一樣,多蓋多少間就能獲得多少倍的居住面積。

而要做到CPU性能提升(同工藝下),就像改裝車一樣,你要更強的發動機(沒得買必須自己設計)、配合的傳動系統(自研)、配合的變速箱(自研)……所有組件都要配合才行。

專業一點說,CPU設計的時候你要設計 發射埠(理論上發射數越大越強) 流水線(理論上越長越好) 緩存(理論上越大越好),但是CPU是一種串列的架構,打個比方就相當於一條生產線,任何一個環節出了問題,整個生產線的效率馬上就大幅下降。設計的複雜度並不是樓主想像中那麼簡單的,面多了加水、水多了加面是設計不出來CPU的。


水果堆料也沒Intel的核大。

另外這裡的增大面積是指怎麼增大?單核還是整個處理器?

單個die的面積大了之後,供電,散熱啥的設計難度會變大,良品率也會下降,參考epyc,amd用了多die的方式來做多核,成本和良品率都高了,你要看用的die面積,其實也是增大的。這個是多核的情況。

單核往大做是能提高性能的,問題是得考慮功耗之類的問題,另外對於單核性能來說,把規模往大做的性能收益不是線性的,不是說各種結構做大了一倍,性能就能提升一倍,另外做大了還會影響頻率,所以在一定工藝下根據需求找到最合適的頻率,面積,功耗才是最重要的。

水果的核看起來比arm公版大了不止一倍,不過性能沒到一倍,但是對於蘋果來說,配合他的ios系統,就有很好的體驗。而安卓的後台機制和ios有所不同,需求就不一定一樣了。所以能和軟體的需求相符合,才是有意義的。


就像一個大餅,上面有一些芝麻

要求在大餅上切出一個長方形,上面沒有芝麻

你可以把晶圓上有瑕疵的部分理解為芝麻。


其實不只是 @木頭龍 說的那些,也要考慮架構問題。

我們可以看到其實tr1950x就是塞了4組*2die的結果(然後屏蔽兩組),其實amd ryzen的架構決定了只要內存頻率夠高(每組間的通信頻頻率和內存頻率正相關),疊加組造成的性能衰減不大,自然可以瘋狂堆核(epyc 4組不屏蔽,32核)。蘋果的soc也是同理。

反例就是intel當年的膠水內核,因為架構導致的每組之間通信延遲極高,堆核心性能反而更差。


簡單的來說,做的大,器件就多,就容易有壞的器件,然後就廢掉了。。。


能耗和散熱吧


散熱跟不上


all about cost


你說的只是一種辦法,俗稱堆料,但在這個高新科技不斷發展的時代下,各家硬體廠商,為了突出自己的實力,都喜歡搞出自己的殺手鐧,堆料相對比較容易,但是也有它的壞處,比如就像大家所說的,想在的CPU更多的是注重核心優化和合理的布局設計,來達到實現性能上的突破,這個每家廠商的技術手段都不一樣,所以才有了現在電腦CPU也好手機CPU也好,各家不斷的廝殺。


更熱,更貴,功耗更大


有,E5就比i7大


你可以看看功耗值,另外那麼大die壞的部分也會更大


為什麼硬碟沒通過單純地增加碟片數來擴大容量?


推薦閱讀:

為什麼礦機除了asic用的都是amd顯卡而不是nvidia顯卡?
到底 CPU 的 64 位技術指的是什麼?64 位系統是否是指對此的支持?
個人電腦領域:為什麼現在AMD CPU主頻高、核心多,而實際性能卻低於intel CPU呢?
如何評價AMD織女星(Vega)新顯卡?
怎麼看待 AMD 在北美的 Ryzen 7 發布會?接下來AMD的CPU市場趨勢會如何?

TAG:蘋果公司AppleInc | 英特爾Intel | 中央處理器CPU | AMD | 電腦硬體 |