智能駕駛已經(jīng)逐漸成為汽車的標配。
智駕芯片當(dāng)然是智能駕駛的算力基石,而這玩意也常常被車企拿來宣傳。如今,已經(jīng)有車企開始宣傳研發(fā)了1000Tops的智駕芯片。智駕芯片就如同汽車的大腦,非常的重要。那么,開發(fā)一款智駕芯片也是非常具有極高的技術(shù)含量的。今天,本文手把手教大家從零設(shè)計一款算力1000Tops的智駕芯片。
一,煉氣期(L1)——算力的概念
那我們就先搞清楚這個智駕芯片算力1000Tops意味著什么
熟悉計算機的同學(xué)說這還不簡單,
OPS的意思就是Operations Per?Second。
每秒鐘操作多少次。
計算機每秒鐘算一次為1ops。
那么1T ops需要計算機算多少次?
1Tops
=1000Gops
=1000,000Mops
=1000,000,000Kops
=1000,000,000,000ops
計算完畢,每秒鐘操作10的十二次方次,也就是1Tops。
我們假設(shè)有一個單發(fā)射1Ghz的CPU,
如果要達到1Tops的話,基本上需要1000個這樣的CPU。
如果要是達到100Tops的處理性能,則需要100000個,
也就是10萬個這樣的CPU才行。
如果是達到1000Tops,則需要1,000,000,也就是100萬個1Ghz的處理器。
這意味著什么?
意味著,我們可以買100萬個處理器,將這么多CPU堆起來,實現(xiàn)1000Tops。
這么多處理器,至少需要一個火車車廂才能裝下。
也就是,通過CPU堆疊的方式實現(xiàn)1000Tops的算力,至少需要一個車廂。
看來,在普通汽車上,通過堆CPU的方式來實現(xiàn)這么大的算力不太可能。
那么就需要另外想辦法了。
二,筑基期(L2)——矩陣乘法
辦法從哪里開始考慮。
我們從最本質(zhì)的地方來考慮?
智駕芯片解決什么問題?
智駕芯片的本身是運行人工智能的算法。
人工智能算法最核心的操作就是矩陣乘法。
那么矩陣乘法的計算,就是智駕芯片要解決的核心問題。
我們用一點時間把矩陣乘法梳理一下。
例如,我們有兩個原始矩陣。
矩陣A,m行,n列。
矩陣B,n行,P列
然后,我們計算矩陣C=A*B;
C是矩陣A和矩陣B的乘法結(jié)果:m行,p列
也可以寫作:
我們舉一個例子
兩個2X2的矩陣相乘,可以如下所示。
對于一個N*N的矩陣,那么總共需要N*(N*N)次乘法和N*(N*(N-1))次加法。
所以,對于一個2*2的矩陣,里面一共用到了8次乘法,4次加法,才能得到答案。
三,金丹期(L3)——乘累加器
根據(jù)上面的分析,我們可以看到,矩陣相乘,需要的最小的算子單元就是乘法和加法。
所以你可以設(shè)計一種電路。
先做兩個值的乘法,例如a11與b11。
在上面的例子中,就是1X5=5;
然后開始算,a12*b21
在上面的例子中,就是2X7=14;
然后與上一次的乘法結(jié)果(5)加起來。
2X7 + 5 = 19
每次都可以把上一次的結(jié)果與當(dāng)次乘法的結(jié)果加起來,這樣就可以實現(xiàn)矩陣一行與一列的先相乘后求和的過程。
恭喜你,你就得到了一個乘累加器。
每個MAC就是一個乘累加器(Multiply Accumulate)。
但是,現(xiàn)在問題又來了。
一個乘累加器,只能計算一個點的。
如果要并行,一個NXN的矩陣,那么就需要NXN個乘累加器。
這樣可以并行來計算。
那如果計算這個2X2的矩陣,
我們可以用2X2,一共4個乘累加單元。
這樣可以并行來計算。
下圖就是這個乘累加矩陣,一共4個,可以同時進行計算。
通過上圖,眼尖的你,一定發(fā)現(xiàn)了規(guī)律。
矩陣A和矩陣B相乘。
如同矩陣A從左往后移動,先向左移動1,3,再移動2,4
而矩陣B從上往下移動,先往下移動5,6,再移動7,8
然后進行相乘。
那么根據(jù)這個規(guī)律,就可以采用另一種叫做脈動陣列的方式來計算。
這個脈動和某飲品沒有啥關(guān)系。
完全體現(xiàn)了數(shù)據(jù)的移動規(guī)律,如箭頭方向所示。
第一步,按照規(guī)律,往右移動移動1和以及往下移動5;
第二步,以此類推
第三步,
第四步,
第五步,
這樣我們就得到了最終的矩陣相乘的值。
通過累加器的脈動陣列,可以減少芯片內(nèi)部的連接,因為每個累加器的輸入只來自左邊和右邊。
這樣就可以放置很多的累加器,累加器比較容易做的很大。
于是,把累加器從2X2擴展一下,可以做的很大,如下圖所示:
到此,你就設(shè)計了一個矩陣乘法處理單元;
上面和左面的緩存中分為存儲了原始的數(shù)據(jù)矩陣A和B。
在人工智能算法中,一個一般代表了權(quán)重矩陣(weight fifo),另一個代表激活矩陣。
這樣你就設(shè)計了一個面向人工智能應(yīng)用的處理器(NPU)最核心的單元。
矩陣乘法以及存儲矩陣輸入和輸出的緩存。
四,元嬰期(L4)——NPU
那么這個矩陣的行和列分別設(shè)置為多少合適?
由于神經(jīng)網(wǎng)絡(luò)的每一層的計算都比較多。
那么可以把行和列都設(shè)置成8,16,32,64,96或者更大。
那我們就先把行和列設(shè)置成96。
那我們就得到了一個96X96=9216乘累加單元。
為了存儲要計算的矩陣數(shù)據(jù),給這些數(shù)據(jù)設(shè)計了一個緩存(例如32Mbyte)。
對于矩陣乘法后的數(shù)據(jù),還需要進行池化,激活函數(shù),歸一化等操作。
在矩陣完成運算后。
數(shù)據(jù)會被轉(zhuǎn)移到激活硬件、池化硬件,并最終進入寫入緩沖區(qū)以匯總結(jié)果。
還要支持多種激活函數(shù),包括修正線性單元(ReLU)、Sigmoid線性單元(SiLU)和TanH。
于是在矩陣的輸出結(jié)果后面又加上了SIMD單元可編程的處理以及池化,deconv等模塊。
這樣,恭喜你,你現(xiàn)在就設(shè)計完畢了一個NPU。
如下圖所示:
設(shè)計完畢后,馬老板就提出了一個問題,這個NPU的性能是多少?
有了前面的基礎(chǔ),這個問題就簡單了。
芯片的核心算力是這個96X96的矩陣計算單元(黃色部分)得來的。
總計9,216個MAC(乘累加)。
一次乘加算兩次操作。
乘+加,所以是兩次
所以,這個矩陣每次hz就是18,432次操作。
做成芯片,這個NPU運行頻率是2Ghz。
也就是2GX18432 = 36864Gops=36.864Tops。
是不是很簡單又清楚。
五,大乘期(L5)——智能駕駛芯片
這個時候,馬老板突然說了。
才37Tops性能,這性能也太差了。
你剛要解釋一下,功耗,面積,編程友好,利用率這些原因。
馬老板才不管那套。
性能至少翻倍,不能討價還價。
于是,你立馬想到了。
可以放兩個NPU,不就可以性能翻倍了嗎?
于是,你在一個SOC內(nèi)部,放上了兩個NPU(黃色部分),
這樣,這個芯片的性能一下子就能從76.86Tops到73.72Tops。
四舍五入,就是74Tops
當(dāng)然,除了提供核心算力的NPU之外。
還有系統(tǒng)控制作用的CPU,3個四核Cortex-A72集群,總共12個CPU,運行頻率為2.2GHz;
還有圖像處理作用的GPU,一個Mali G71 MP12 GPU,運行頻率為1GHz
至此,恭喜你,你設(shè)計了特斯拉的智駕芯片,F(xiàn)SD芯片。
然后,這個芯片采用了三星的14nm工藝,整個芯片260 mm2 die size(20 mm x 13 mm die size)
這是最后的芯片版圖。
可以看到,整個提供算力的NPU,幾乎占了芯片面積的50%左右。
這玩意占面積也占成本。
結(jié)果,芯片設(shè)計出來,馬老板立馬說,74Tops,這個性能指標還是太低。
出去不好吹牛。
至少要大于100Tops。
有了前面的經(jīng)驗,聰明的你立馬想到了。
直接在板子上放兩顆不就行了。
那么最后方案上,我們可以看到。
系統(tǒng)采用了兩顆FSD芯片,智駕系統(tǒng)的總的算力,也達到了148TOPS。
這樣,算力立馬達到了高階智駕的門檻。
即使是這樣,也沒有達到1000Tops的算力。
如果要達到1000Tops的算力。
根據(jù)上面的計算,增加算力,可以加多個NPU,也可以增加乘累加矩陣(MAC ?array)的面積。
更大的矩陣乘法單元帶來了更大的算力。
看來,只要是簡單的堆乘累加矩陣就可以了?
這個看起來很簡單。
例如,128*128個MAC的NPU,
單個NPU如果2Ghz處理能力,
其算力就能>64Tops。
一個芯片四個NPU,單芯片就能達到256T處理能力。
板載4個芯片就能達到1024Tops的處理能力。
所以,有了前面的基礎(chǔ),看起來不費勁。
不要笑,可能有人問?
算力怎么能這么粗暴的疊加。
要知道,某家車企就是用了四顆智駕芯片(orin-X),宣稱達到了1024Tops。
我很懷疑,他們是不是把算力都用上了,是不是扣到兩顆芯片發(fā)現(xiàn)智駕也能工作。
其實,即使大家沒有智駕軟件的基礎(chǔ)。
也能明白:
智駕軟件用到的算力不等于實際硬件提供的能力。
通過小學(xué)數(shù)學(xué)也能知道,無限擴大這個乘累加器矩陣,最終的利用率就會不斷降低。
例如,我們算一個96X96的矩陣,而用128X128的硬件單元算,或者256X256的矩陣單元算。
就有一大部分都空閑。
這個就是硬件利用率的問題。
所以,有句老話說的好,
算力不是萬能的。
但是光有算力也是萬萬不能的。
看的見是智駕芯片的算力,
看不見的是智駕芯片上跑的軟件和算法。
這些軟件和算法的能力,其實更是制約各家智駕水平的差異的地方。
所以說:
芯片的算力,
算法的智力,
系統(tǒng)的合力,
唯有三者形成合力,才能驅(qū)動智能駕駛突破現(xiàn)有邊界。
穿梭三界(全地形全天候)亦如履平地,至此方證“無人駕駛”天道。
后記:
本來,除了FSD還要寫另外兩款典型的智駕芯片英偉達的orin-x和華為的昇騰610,但是篇幅太長了,等下次再補上。
我是歪睿老哥,一個喜歡寫作的架構(gòu)師,如果你覺得本文還不錯,歡迎寫出你的觀點,點贊,在看,分享。