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