如何解讀A12處理器5萬億次速度?

我感覺這個數怎麼這麼誇張呢


更新:之前的回答存在比較嚴重而且睿智的錯誤,更新一下……5T÷2=250G(捂臉逃


沒想到會有這麼多知友點贊,之前的回答有點草率,重新回答一下。

一句話結論:牛逼,但是和行業頂級水平相比,並無值得稱道之處。

牛逼就不展開說了,手機晶元達成5萬億次運算,吊打一眾競爭對手。主要說一下為什麼說「並無值得稱道之處」。

首先,5萬億次速度,來自於發布會上介紹神經網路引擎(NE)中所提到的性能,而非A12的CPU或者GPU性能。

可以看到,PPT用的性能衡量單位是每秒運算數(OPS,Operations per second),而非CPU/GPU通常使用的每秒浮點運算次數(Floating-point operations per second,FLOPS)。通常來說,說明一款晶元的計算性能的時候,會用FLOPS而不用OPS,除非:

  1. 這款晶元不支持浮點運算,只能用OPS數值來說明整數運算性能;或者
  2. 整數運算和浮點運算性能不同,需要分開來敘述。這種情況會同時分別列出OPS和FLOPS的數值。

其次,NE的數據精度低,合理的猜測為8bit整數。

A12的細節蘋果並未公布,但目前流行的卷積神經網路演算法,在推斷過程中對數據精度並不敏感,所以可以猜測不支持浮點的NE使用INT8(8位整數)進行推斷計算。例如谷歌第一代TPU,不支持浮點,使用INT8運算。例如nVIDIA的TensorRT,優化了INT8和FP16的性能。更具體的技術細節就不展開了,有興趣的可以看看TensorFlow的相關文檔。

那麼,在2018年,一款INT8運算性能達到5T OPS的計算晶元,在業內是什麼水平呢?

先看我們最熟悉的主流桌面CPU:i7-8700K。

i7-8700K是64位處理器,支持AVX2和FMA指令集,六個核心,基準頻率3.7 GHz。每個核心有3個整數向量運算單元。也就是說,理想狀態,8700K一個時鐘周期可以完成6(六個核心)×3(3個整數向量單元)×4(一個向量有4個數據)×2(FMA支持一個時鐘周期進行一次加法一次乘法,共計兩次運算)=144次運算。在3.7GHz的工作頻率下,性能為144*4.3=532.8G OPS。

8700的532G和NE的5T相比,弱爆了?

等等,8700K是64位CPU,單個數據64bit,大致上,計算8個INT數據和1個INT64數據所需要的晶體管數量是一致的,那麼就是8×532.8=4.26T OPS。是不是跟NE性能差不多了?

等等,8700K TDP 95W,答主你拿這麼一個CPU和NE比是不是太過分了?手機CPU不過3~4W的功耗,NE只不過是A12裡面的一個模塊。

被你發現了——那麼我們引入一個新的衡量單位:OPS/w,每瓦特運算性能。8700K按照95W算,只有可憐的44.8G OPS/w。A12不清楚,高通的845 TDP 大概是5W,我們就按照5W算,假設NE滿載的時候CPU、GPU功耗很低,NE佔用其中2W,那麼NE的每瓦運算性能大概是5T÷2=250G OPS/w,比Intel牛叉多了是吧?【更新:應該是2500G OPS/w】

Intel馬上不幹了,8700K是桌面CPU,能耗不是最重要的,要談能耗,我有4.5W TDP的i7-7Y75。看看7Y75的規格:核心和8700K一樣,3個整數向量單元,設計功耗4.5W,雙核,基準頻率1.3GHz,同樣支持AVX2和FMA。重新算一下:

2×3×4×2×1.3G×8÷4.5=110.9G OPS/w

還是不行啊。

Intel又說,7Y75是通用處理器,除了整數,還要計算浮點數。為了兼容性,要有解碼器翻譯40年前老舊的x86指令,要有各種處理單元處理40年來的各種增加的指令集;因為內存速度跟不上,7Y75每個核心有128KB 一級緩存,512KB 二級緩存,兩個核心共享4MB 三級緩存;為了適應各種程序同時儘可能發揮性能,有分支預測、亂序執行單元;為了和周邊各種配件通訊,集成了雙通道內存控制器,16通道PCI-E 3.0控制器,這麼比我很吃虧啊。

於是Intel扔出來這麼一張圖:

雖然是老舊的SandyBridge的CPU功耗分布圖,先湊合看吧。如果只是普通的整數運算,運算單元功耗不過佔6%,功耗都消耗在緩存、亂序執行上。如果是重浮點運算,浮點運算單元就佔了75%的功耗,整數單元不過2%。來來來,我不欺負你,砍掉浮點單元,其它運算單元的功耗消耗照算,畢竟NE也要從內存取數據,估計也少不了本地緩存神馬的。7Y75比SandyBridge增加了AVX2,FMA指令集,一次可以計算4個整數組成的向量,積和融合算雙倍功耗,整數功耗:2%×4×2=16%,砍掉浮點的整體功耗就是25-2+16=39%。7Y75功耗按照4.5×39%算不過是1.755W。重新算一次能效比:

2×3×4×2×1.3G×8÷1.755=284.4G OPS/w

emmm……是不是比A12 NE的250G OPS/w還要高一點?別忘了,A12是7nm製程,7Y75還是14nm製程。

【更新:事實上這麼粗算是得不出回答的結論的——起碼對Intel的CPU來說是這樣】

284.4G比NE的2500G還是低的多,我們需要加上這麼一張圖,然後重新計算:

這張圖中,Uncore部分主要就是三級緩存、內存控制器、PCI-E控制器、QPI控制器等。這些部件佔用了40%的功耗,也就是核心部分只佔用60%功耗。另外,AVX2的整數向量比傳統ALU增加四倍功率大體上是對的,但FMA的積和熔合是不會導致功耗翻倍的。所以AVX2的64位整數向量功耗的估算應該大致為4.5W×60%×2%×4=0.054W。因此不考慮取指、解碼、亂序執行、分支預測、以及各級緩存的「純運算」單元,能耗比是2×3×4×2×1.3G×8÷0.054=9244G OPS/w。

加上其它單元,如果這些單元總的功耗佔比為運算單元的3倍。也就是功耗提高4倍,那麼能耗比大概是9244÷4=2311G OPS/w。對於CPU來說,這個會非常困難甚至可以說不現實。但對於GPU/TPU/NE/NPU這一類純粹靠堆核心提升運算性能,並且無需處理各種複雜流程的專用晶元來說,應該是可以做到的。

【/更新】

如果說Intel的是CPU,這麼硬比不合適的話,看看谷歌的第一代TPU:

單個Die,TDP 75W,實測功耗40W,92T OPS的INT8性能,1226G~2300G OPS/w,比NE的250G OPS/w高了不知道多少。而且谷歌第一代TPU,用的還是老掉牙的28nm製程。【更新:應該是實測2300G OPS/w,已經非常接近NE的2500G OPS/w了,而且這是用28nm製程工藝】

當然,也許實際上NE的滿載功耗並沒有2W那麼高,但沒有更多的細節之前,我這麼算似乎也沒什麼錯。

所以,A12 NE的5T OPS,在半導體行業中不是什麼多牛逼的事情。


也不算很誇張。

兩年前Google初代TPU就有45萬億次,那還是28nm工藝。如今是7nm。

不過有兩個細節:

1. 它只能做8位整數乘加,單次運算功耗不到雙精度浮點的百分之一。

2. 更重要的,只有非常特殊的計算才能利用其峰值性能的哪怕10%

蘋果的這個也類似,魔鬼都在細節里。


是可以有這麼多的。就一個asic,做到這樣很容易。



從這幅圖裡就能窺探出一二來,蘋果A系列處理器的強大之處


推薦閱讀:

TAG:蘋果產品 | iPhone | 處理器 | SoC | 手機處理器 |