在達(dá)芬奇架構(gòu)下,控制單元為整個(gè)計(jì)算過程提供了指令控制,相當(dāng)于AI Core的司令部,負(fù)責(zé)整個(gè)AI Core的運(yùn)行,起到了至關(guān)重要的作用。 控制單元的主要組成部分為系統(tǒng)控制模塊、指令緩存、標(biāo)量指令處理隊(duì)列、指令發(fā)射模塊、矩陣運(yùn)算隊(duì)列、向量運(yùn)算隊(duì)列、存儲(chǔ)轉(zhuǎn)換隊(duì)列和事件同步模塊,如圖3-13中加粗所示。 在指令執(zhí)行過程中,可以提前預(yù)取后續(xù)指令,并一次讀入多條指令進(jìn)入緩存,提升指令執(zhí)行效率。
01 DaVinci架構(gòu)(總覽)
不同于傳統(tǒng)的支持通用計(jì)算的CPU和GPU,也不同于專用于某種特定算法的專用芯片ASIC,達(dá)芬奇架構(gòu)本質(zhì)上是為了適應(yīng)某個(gè)特定領(lǐng)域中的常見的應(yīng)用和算法,通常稱之為“特定域架構(gòu)(Domain Specific Architecture,DSA)”芯片。
昇騰AI芯片的計(jì)算核心主要由AI Core構(gòu)成,負(fù)責(zé)執(zhí)行標(biāo)量、向量和張量相關(guān)的計(jì)算密集型算子。 AI Core采用了達(dá)芬奇架構(gòu),其基本結(jié)構(gòu)如圖3-2所示,從控制上可以看成是一個(gè)相對(duì)簡化的現(xiàn)代微處理器的基本架構(gòu)。 它包括了三種基礎(chǔ)計(jì)算資源:矩陣計(jì)算單元(Cube Unit)、向量計(jì)算單元(Vector Unit)和標(biāo)量計(jì)算單元(Scalar Unit)。 這三種計(jì)算單元分別對(duì)應(yīng)了張量、向量和標(biāo)量三種常見的計(jì)算模式,在實(shí)際的計(jì)算過程中各司其職,形成了三條獨(dú)立的執(zhí)行流水線,在系統(tǒng)軟件的統(tǒng)一調(diào)度下互相配合達(dá)到優(yōu)化的計(jì)算效率。 此外在矩陣計(jì)算單元和向量計(jì)算單元內(nèi)部還提供了不同精度、不同類型的計(jì)算模式。 AI Core中的矩陣計(jì)算單元目前可以支持INT8、INT4和FP16的計(jì)算; 向量計(jì)算單元目前可以支持FP16和FP32的計(jì)算。
為了配合AI Core中數(shù)據(jù)的傳輸和搬運(yùn),圍繞著三種計(jì)算資源還分布式的設(shè)置了一系列的片上緩沖區(qū),比如用來放置整體圖像特征數(shù)據(jù)、網(wǎng)絡(luò)參數(shù)以及中間結(jié)果的輸入緩沖區(qū)(Input Buffer,IB)和輸出緩沖區(qū)(Output Buffer,OB),以及提供一些臨時(shí)變量的高速寄存器單元,這些寄存器單元位于各個(gè)計(jì)算單元中。 這些存儲(chǔ)資源的設(shè)計(jì)架構(gòu)和組織方式不盡相同,但目的都是為了更好的適應(yīng)不同計(jì)算模式下格式、精度和數(shù)據(jù)排布的需求。 這些存儲(chǔ)資源和相關(guān)聯(lián)的計(jì)算資源相連,或者和總線接口單元(Bus Interface Unit,BIU)相連從而可以獲得外部總線上的數(shù)據(jù)。
在AI Core中,輸入緩沖區(qū)之后設(shè)置了一個(gè)存儲(chǔ)轉(zhuǎn)換單元(Memory Transfer Unit,MTE)。 這是達(dá)芬奇架構(gòu)的特色之一,主要的目的是為了以極高的效率實(shí)現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換。 比如前面提到GPU要通過矩陣計(jì)算來實(shí)現(xiàn)卷積,首先要通過Im2Col的方法把輸入的網(wǎng)絡(luò)和特征數(shù)據(jù)重新以一定的格式排列起來。 這一步在GPU當(dāng)中是通過軟件來實(shí)現(xiàn)的,效率比較低下。 達(dá)芬奇架構(gòu)采用了一個(gè)專用的存儲(chǔ)轉(zhuǎn)換單元來完成這一過程,將這一步完全固化在硬件電路中,可以在很短的時(shí)間之內(nèi)完成整個(gè)轉(zhuǎn)置過程。 由于類似轉(zhuǎn)置的計(jì)算在深度神經(jīng)網(wǎng)絡(luò)中出現(xiàn)的極為頻繁,這樣定制化電路模塊的設(shè)計(jì)可以提升AI Core的執(zhí)行效率,從而能夠?qū)崿F(xiàn)不間斷的卷積計(jì)算。
AI Core中的控制單元主要包括系統(tǒng)控制模塊、標(biāo)量指令處理隊(duì)列、指令發(fā)射模塊、矩陣運(yùn)算隊(duì)列、向量運(yùn)算隊(duì)列、存儲(chǔ)轉(zhuǎn)換隊(duì)列和事件同步模塊。 系統(tǒng)控制模塊負(fù)責(zé)指揮和協(xié)調(diào)AI Core的整體運(yùn)行模式,配置參數(shù)和實(shí)現(xiàn)功耗控制等。
在AI Core中,存儲(chǔ)單元為各個(gè)計(jì)算單元提供轉(zhuǎn)置過并符合要求的數(shù)據(jù),計(jì)算單元返回運(yùn)算的結(jié)果給存儲(chǔ)單元,控制單元為計(jì)算單元和存儲(chǔ)單元提供指令控制,三者相互協(xié)調(diào)合作完成計(jì)算任務(wù)。
02 DaVinci架構(gòu)(控制單元)
在達(dá)芬奇架構(gòu)下,控制單元為整個(gè)計(jì)算過程提供了指令控制,相當(dāng)于AI Core的司令部,負(fù)責(zé)整個(gè)AI Core的運(yùn)行,起到了至關(guān)重要的作用。 控制單元的主要組成部分為系統(tǒng)控制模塊、指令緩存、標(biāo)量指令處理隊(duì)列、指令發(fā)射模塊、矩陣運(yùn)算隊(duì)列、向量運(yùn)算隊(duì)列、存儲(chǔ)轉(zhuǎn)換隊(duì)列和事件同步模塊,如圖3-13中加粗所示。
在指令執(zhí)行過程中,可以提前預(yù)取后續(xù)指令,并一次讀入多條指令進(jìn)入緩存,提升指令執(zhí)行效率。 多條指令從系統(tǒng)內(nèi)存通過總線接口進(jìn)入到AI Core的指令緩存中并等待后續(xù)硬件快速自動(dòng)解碼或運(yùn)算。 指令被解碼后便會(huì)被導(dǎo)入標(biāo)量隊(duì)列中,實(shí)現(xiàn)地址解碼與運(yùn)算控制。 這些指令包括矩陣計(jì)算指令、向量計(jì)算指令以及存儲(chǔ)轉(zhuǎn)換指令等。 在進(jìn)入指令發(fā)射模塊之前,所有指令都作為普通標(biāo)量指令被逐條順次處理。 標(biāo)量隊(duì)列將這些指令的地址和參數(shù)解碼配置好后,由指令發(fā)射模塊根據(jù)指令的類型分別發(fā)送到對(duì)應(yīng)的指令執(zhí)行隊(duì)列中,而標(biāo)量指令會(huì)駐留在標(biāo)量指令處理隊(duì)列中進(jìn)行后續(xù)執(zhí)行,如圖所示。
指令執(zhí)行隊(duì)列由矩陣運(yùn)算隊(duì)列、向量運(yùn)算隊(duì)列和存儲(chǔ)轉(zhuǎn)換隊(duì)列組成。 矩陣計(jì)算指令進(jìn)入矩陣運(yùn)算隊(duì)列,向量計(jì)算指令進(jìn)入向量運(yùn)算隊(duì),存儲(chǔ)轉(zhuǎn)換指令進(jìn)入存儲(chǔ)轉(zhuǎn)換隊(duì)列,同一個(gè)指令執(zhí)行隊(duì)列中的指令是按照進(jìn)入隊(duì)列的順序進(jìn)行執(zhí)行的,不同指令執(zhí)行隊(duì)列之間可以并行執(zhí)行,通過多個(gè)指令執(zhí)行隊(duì)列的并行執(zhí)行可以提升整體執(zhí)行效率。
當(dāng)指令執(zhí)行隊(duì)列中的指令到達(dá)隊(duì)列頭部時(shí)就進(jìn)入真正的指令執(zhí)行環(huán)節(jié),并被分發(fā)到相應(yīng)的執(zhí)行單元中,如矩陣計(jì)算指令會(huì)發(fā)送到矩陣計(jì)算單元,存儲(chǔ)轉(zhuǎn)換指令會(huì)發(fā)送到存儲(chǔ)轉(zhuǎn)換單元。 不同的執(zhí)行單元可以并行的按照指令來進(jìn)行計(jì)算或處理數(shù)據(jù),同一個(gè)指令隊(duì)列中指令執(zhí)行的流程被稱作為指令流水線。
對(duì)于指令流水線之間可能出現(xiàn)的數(shù)據(jù)依賴,達(dá)芬奇架構(gòu)的解決方案是通過設(shè)置事件同步模塊來統(tǒng)一協(xié)調(diào)各個(gè)流水線的進(jìn)程。 事件同步模塊時(shí)刻控制每條流水線的執(zhí)行狀態(tài),并分析不同流水線的依賴關(guān)系,從而解決數(shù)據(jù)依賴和同步的問題。 比如矩陣運(yùn)算隊(duì)列的當(dāng)前指令需要依賴向量計(jì)算單元的結(jié)果,在執(zhí)行過程中,事件同步控制模塊會(huì)暫停矩陣運(yùn)算隊(duì)列執(zhí)行流程,要求其等待向量計(jì)算單元的結(jié)果。 而當(dāng)向量計(jì)算單元完成計(jì)算并輸出結(jié)果后,此時(shí)事件同步模塊則通知矩陣運(yùn)算隊(duì)列需要的數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以繼續(xù)執(zhí)行。 在事件同步模塊準(zhǔn)許放行之后矩陣運(yùn)算隊(duì)列才會(huì)發(fā)射當(dāng)前指令。 在達(dá)芬奇架構(gòu)中,無論是流水線內(nèi)部的同步還是流水線之間的同步,都是通過事件同步模塊利用軟件控制來實(shí)現(xiàn)的。
在控制單元中還存在一個(gè)系統(tǒng)控制模塊。 在AI Core運(yùn)行之前,需要外部的任務(wù)調(diào)度器來控制和初始化AI Core的各種配置接口,如指令信息、參數(shù)信息以及任務(wù)塊信息等。 這里的任務(wù)塊是指AI Core中的最小的計(jì)算任務(wù)粒度。 在配置完成后,系統(tǒng)控制模塊會(huì)控制任務(wù)塊的執(zhí)行進(jìn)程,同時(shí)在任務(wù)塊執(zhí)行完成后,系統(tǒng)控制模塊會(huì)進(jìn)行中斷處理和狀態(tài)申報(bào)。 如果在執(zhí)行過程中出現(xiàn)了錯(cuò)誤,系統(tǒng)控制模塊將會(huì)把執(zhí)行的錯(cuò)誤狀態(tài)報(bào)告給任務(wù)調(diào)度器,進(jìn)而反饋當(dāng)前AI Core的狀態(tài)信息給整個(gè)昇騰AI芯片系統(tǒng)。
03 DaVinci架構(gòu)(計(jì)算單元)
計(jì)算單元是AI Core中提供強(qiáng)大算力的核心單元,相當(dāng)于AI Core的主力軍。 AI Core計(jì)算單元主要包含矩陣計(jì)算單元、向量計(jì)算單元、標(biāo)量計(jì)算單元和累加器,矩陣計(jì)算單元和累加器主要完成與矩陣相關(guān)的運(yùn)算,向量計(jì)算單元負(fù)責(zé)執(zhí)行向量運(yùn)算,標(biāo)量計(jì)算單元主要負(fù)責(zé)各類型的標(biāo)量數(shù)據(jù)運(yùn)算和程序的流程控制。
1、矩陣計(jì)算單元
上圖表示一個(gè)矩陣A和另一個(gè)矩陣B之間的乘法運(yùn)算C=A*B,其中M表示矩陣A的行數(shù),K表示矩陣A的列數(shù)以及矩陣B的行數(shù),N表示矩陣B的列數(shù)。 這個(gè)矩陣乘法在CPU如何實(shí)現(xiàn)?
該程序需要用到3個(gè)循環(huán)進(jìn)行一次完整的矩陣相乘計(jì)算,如果在一個(gè)單發(fā)射的CPU上執(zhí)行至少需要M?K?N個(gè)時(shí)鐘周期才能完成,當(dāng)矩陣非常龐大時(shí)執(zhí)行過程極為耗時(shí)。
由于常見的深度神經(jīng)網(wǎng)絡(luò)算法中大量的使用了矩陣計(jì)算,達(dá)芬奇架構(gòu)中特意對(duì)矩陣計(jì)算進(jìn)行了深度的優(yōu)化并定制了相應(yīng)的矩陣計(jì)算單元來支持高吞吐量的矩陣處理。 通過精巧設(shè)計(jì)的定制電路和極致的后端優(yōu)化手段,矩陣計(jì)算單元可以用一條指令完成兩個(gè)16*16矩陣的相乘運(yùn)算(標(biāo)記為16^3,也是Cube這一名稱的來歷),等同于在極短時(shí)間內(nèi)進(jìn)行了16^3=4096個(gè)乘加運(yùn)算,并且可以實(shí)現(xiàn)FP16的運(yùn)算精度。 如圖3-7所示,矩陣計(jì)算單元在完成A?B=C的矩陣運(yùn)算時(shí),會(huì)事先將矩陣A按行存放在輸入緩沖區(qū)中,同時(shí)將矩陣B按列存放在輸入緩沖區(qū)中,通過矩陣計(jì)算單元計(jì)算后得到的結(jié)果矩陣C按行存放在輸出緩沖區(qū)中。 在矩陣相乘運(yùn)算中,如圖3-7所示,矩陣C的第一元素由矩陣A的第一行的16個(gè)元素和矩陣B的第一列的16個(gè)元素由矩陣計(jì)算單元子電路進(jìn)行16次乘法和15次加法運(yùn)算得出。 矩陣計(jì)算單元中存在256個(gè)矩陣計(jì)算子電路組成,可以由一條指令并行完成矩陣C的256個(gè)元素計(jì)算。
2、向量計(jì)算單元
AI Core中的向量計(jì)算單元主要負(fù)責(zé)完成和向量相關(guān)的運(yùn)算,能夠?qū)崿F(xiàn)向量和標(biāo)量,或雙向量之間的計(jì)算,功能覆蓋各種基本和多種定制的計(jì)算類型,主要包括FP32、FP16、INT32和INT8等數(shù)據(jù)類型的計(jì)算。
如上圖所示,向量計(jì)算單元可以快速完成兩個(gè)FP16類型的向量相加或者相乘。 向量計(jì)算單元的源操作數(shù)和目的操作數(shù)通常都保存在輸出緩沖器中。 對(duì)向量計(jì)算單元而言,輸入的數(shù)據(jù)可以不連續(xù),這取決于輸入數(shù)據(jù)的尋址模式。
向量計(jì)算單元可以作為矩陣計(jì)算單元和輸出緩沖區(qū)之間的數(shù)據(jù)通路和橋梁。 矩陣運(yùn)算完成后的結(jié)果在向輸出緩沖區(qū)傳遞的過程中,向量計(jì)算單元可以順便完成在深度神經(jīng)網(wǎng)絡(luò)尤其是卷積神經(jīng)網(wǎng)絡(luò)計(jì)算中常用的ReLU激活函數(shù)、池化等功能并實(shí)現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換。 經(jīng)過向量計(jì)算單元處理后的數(shù)據(jù)可以被寫回到輸出緩沖區(qū)或者矩陣計(jì)算單元中,以等待下一次運(yùn)算。 所有的這些操作都可以通過軟件配合相應(yīng)的向量單元指令來實(shí)現(xiàn)。 向量計(jì)算單元提供了豐富的計(jì)算功能,也可以實(shí)現(xiàn)很多特殊的計(jì)算函數(shù),從而和矩陣計(jì)算單元形成功能互補(bǔ),全面完善了AI Core對(duì)非矩陣類型數(shù)據(jù)計(jì)算的能力。
3、標(biāo)量計(jì)算單元
標(biāo)量計(jì)算單元負(fù)責(zé)完成AI Core中與標(biāo)量相關(guān)的運(yùn)算。 它相當(dāng)于一個(gè)微型CPU,控制整個(gè)AI Core的運(yùn)行。 標(biāo)量計(jì)算單元可以對(duì)程序中的循環(huán)進(jìn)行控制,可以實(shí)現(xiàn)分支判斷,其結(jié)果可以通過在事件同步模塊中插入同步符的方式來控制AI Core中其它功能性單元的執(zhí)行流水。 它還為矩陣計(jì)算單元或向量計(jì)算單元提供數(shù)據(jù)地址和相關(guān)參數(shù)的計(jì)算,并且能夠?qū)崿F(xiàn)基本的算術(shù)運(yùn)算。 其它復(fù)雜度較高的標(biāo)量運(yùn)算則由專門的AI CPU通過算子完成。
在標(biāo)量計(jì)算單元周圍配備了多個(gè)通用寄存器(General Purpose Register,GPR)和專用寄存器(Special Purpose Register,SPR)。 這些通用寄存器可以用于變量或地址的寄存,為算術(shù)邏輯運(yùn)算提供源操作數(shù)和存儲(chǔ)中間計(jì)算結(jié)果。 專用寄存器的設(shè)計(jì)是為了支持指令集中一些指令的特殊功能,一般不可以直接訪問,只有部分可以通過指令讀寫。
AI Core中具有代表性的專用寄存器包括Core ID(用于標(biāo)識(shí)不同的AI Core),VA(向量地址寄存器)以及STATUS(AI Core運(yùn)行狀態(tài)寄存器)等。 軟件可以通過監(jiān)視這些專用寄存器來控制和改變AI Core的運(yùn)行狀態(tài)和模式。
04 DaVinci架構(gòu)(存儲(chǔ)系統(tǒng))
AI Core的片上存儲(chǔ)單元和相應(yīng)的數(shù)據(jù)通路構(gòu)成了存儲(chǔ)系統(tǒng)。 眾所周知,幾乎所有的深度學(xué)習(xí)算法都是數(shù)據(jù)密集型的應(yīng)用。 對(duì)于昇騰AI芯片來說,合理設(shè)計(jì)的數(shù)據(jù)存儲(chǔ)和傳輸結(jié)構(gòu)對(duì)于最終系統(tǒng)運(yùn)行的性能至關(guān)重要。 不合理的設(shè)計(jì)往往成為性能瓶頸,從而白白浪費(fèi)了片上海量的計(jì)算資源。 AI Core通過各種類型分布式緩沖區(qū)之間的相互配合,為深度神經(jīng)網(wǎng)絡(luò)計(jì)算提供了大容量和及時(shí)的數(shù)據(jù)供應(yīng),為整體計(jì)算性能消除了數(shù)據(jù)流傳輸?shù)钠款i,從而支撐了深度學(xué)習(xí)計(jì)算中所需要的大規(guī)模、高并發(fā)數(shù)據(jù)的快速有效提取和傳輸。
1、存儲(chǔ)單元
芯片中的計(jì)算資源要想發(fā)揮強(qiáng)勁算力,必要條件是保證輸入數(shù)據(jù)能夠及時(shí)準(zhǔn)確的出現(xiàn)在計(jì)算單元里。 達(dá)芬奇架構(gòu)通過精心設(shè)計(jì)的存儲(chǔ)單元為計(jì)算資源保證了數(shù)據(jù)的供應(yīng),相當(dāng)于AI Core中的后勤系統(tǒng)。 AI Core中的存儲(chǔ)單元由存儲(chǔ)控制單元、緩沖區(qū)和寄存器組成,如圖3-11中的加粗顯示。 存儲(chǔ)控制單元通過總線接口可以直接訪問AI Core之外的更低層級(jí)的緩存,并且也可以直通到DDR或HBM從而可以直接訪問內(nèi)存。 存儲(chǔ)控制單元中還設(shè)置了存儲(chǔ)轉(zhuǎn)換單元,其目的是將輸入數(shù)據(jù)轉(zhuǎn)換成AI Core中各類型計(jì)算單元所兼容的數(shù)據(jù)格式。 緩沖區(qū)包括了用于暫存原始圖像特征數(shù)據(jù)的輸入緩沖區(qū),以及處于中心的輸出緩沖區(qū)來暫存各種形式的中間數(shù)據(jù)和輸出數(shù)據(jù)。 AI Core中的各類寄存器資源主要是標(biāo)量計(jì)算單元在使用。
所有的緩沖區(qū)和寄存器的讀寫都可以通過底層軟件顯式的控制,有經(jīng)驗(yàn)的程序員可以通過巧妙的編程方式來防止存儲(chǔ)單元中出現(xiàn)讀寫沖突而影響流水線的進(jìn)程。 對(duì)于類似卷積和矩陣這樣規(guī)律性強(qiáng)的計(jì)算模式,高度優(yōu)化的程序可以實(shí)現(xiàn)全程無阻塞的流水線執(zhí)行。
上圖中的總線接口單元作為AI Core的“大門”,是一個(gè)與系統(tǒng)總線交互的窗口,并以此通向外部世界。 AI Core通過總線接口從外部L2緩沖區(qū)、DDR或HBM中讀取或者寫回?cái)?shù)據(jù)。 總線接口在這個(gè)過程中可以將AI Core內(nèi)部發(fā)出的讀寫請(qǐng)求轉(zhuǎn)換為符合總線要求的外部讀寫請(qǐng)求,并完成協(xié)議的交互和轉(zhuǎn)換等工作。
輸入數(shù)據(jù)從總線接口讀入后就會(huì)經(jīng)由存儲(chǔ)轉(zhuǎn)換單元進(jìn)行處理。 存儲(chǔ)轉(zhuǎn)換單元作為AI Core內(nèi)部數(shù)據(jù)通路的傳輸控制器,負(fù)責(zé)AI Core內(nèi)部數(shù)據(jù)在不同緩沖區(qū)之間的讀寫管理,以及完成一系列的格式轉(zhuǎn)換操作,如補(bǔ)零,Img2Col,轉(zhuǎn)置、解壓縮等。 存儲(chǔ)轉(zhuǎn)換單元還可以控制AI Core內(nèi)部的輸入緩沖區(qū),從而實(shí)現(xiàn)局部數(shù)據(jù)的緩存。
在深度神經(jīng)網(wǎng)絡(luò)計(jì)算中,由于輸入圖像特征數(shù)據(jù)通道眾多且數(shù)據(jù)量龐大,往往會(huì)采用輸入緩沖區(qū)來暫時(shí)保留需要頻繁重復(fù)使用的數(shù)據(jù),以達(dá)到節(jié)省功耗、提高性能的效果。 當(dāng)輸入緩沖區(qū)被用來暫存使用率較高的數(shù)據(jù)時(shí),就不需要每次通過總線接口到AI Core的外部讀取,從而在減少總線上數(shù)據(jù)訪問頻次的同時(shí)也降低了總線上產(chǎn)生擁堵的風(fēng)險(xiǎn)。 另外,當(dāng)存儲(chǔ)轉(zhuǎn)換單元進(jìn)行數(shù)據(jù)的格式轉(zhuǎn)換操作時(shí),會(huì)產(chǎn)生巨大的帶寬需求,達(dá)芬奇架構(gòu)要求源數(shù)據(jù)必須被存放于輸入緩沖區(qū)中,才能夠進(jìn)行格式轉(zhuǎn)換,而輸入緩沖控制器負(fù)責(zé)控制數(shù)據(jù)流入輸入緩沖區(qū)中。 輸入緩沖區(qū)的存在有利于將大量用于矩陣計(jì)算的數(shù)據(jù)一次性的被搬移到AI Core內(nèi)部,同時(shí)利用固化的硬件極高的提升了數(shù)據(jù)格式轉(zhuǎn)換的速度,避免了矩陣計(jì)算單元的阻塞,消除了由于數(shù)據(jù)轉(zhuǎn)換過程緩慢而帶來的性能瓶頸。
在神經(jīng)網(wǎng)絡(luò)中往往可以把每層計(jì)算的中間結(jié)果放在輸出緩沖區(qū)中,從而在進(jìn)入下一層計(jì)算時(shí)方便的獲取數(shù)據(jù)。 由于通過總線讀取數(shù)據(jù)的帶寬低,延遲大,通過充分利用輸出緩沖區(qū)就可以大大提升計(jì)算效率。
在矩陣計(jì)算單元還包含有直接的供數(shù)寄存器,提供當(dāng)前正在進(jìn)行計(jì)算的大小為1616的左、右輸入矩陣。 在矩陣計(jì)算單元之后,累加器也含有結(jié)果寄存器,用于緩存當(dāng)前計(jì)算的大小為1616的結(jié)果矩陣。 在累加器配合下可以不斷的累積前次矩陣計(jì)算的結(jié)果,這在卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算過程中極為常見。 在軟件的控制下,當(dāng)累積的次數(shù)達(dá)到要求后,結(jié)果寄存器中的結(jié)果可以被一次性的傳輸?shù)捷敵鼍彌_區(qū)中。
AI Core中的存儲(chǔ)系統(tǒng)為計(jì)算單元提供源源不斷的數(shù)據(jù),高效適配計(jì)算單元的強(qiáng)大算力,綜合提升了AI Core的整體計(jì)算性能。 與谷歌TPU設(shè)計(jì)中的統(tǒng)一緩沖區(qū)設(shè)計(jì)理念相類似,AI Core采用了大容量的片上緩沖區(qū)設(shè)計(jì),通過增大的片上緩存數(shù)據(jù)量來減少數(shù)據(jù)從片外存儲(chǔ)系統(tǒng)搬運(yùn)到AI Core中的頻次,從而可以降低數(shù)據(jù)搬運(yùn)過程中所產(chǎn)生的功耗,有效控制了整體計(jì)算的能耗。
達(dá)芬奇架構(gòu)通過存儲(chǔ)轉(zhuǎn)換單元中內(nèi)置的定制電路,在進(jìn)行數(shù)據(jù)傳輸?shù)耐瑫r(shí),就可以實(shí)現(xiàn)諸如Im2Col或者其它類型的格式轉(zhuǎn)化操作,不光是節(jié)省了格式轉(zhuǎn)換過程中的消耗,同時(shí)也節(jié)省了數(shù)據(jù)轉(zhuǎn)換的指令開銷。 這種能將數(shù)據(jù)在傳輸?shù)耐瑫r(shí)進(jìn)行轉(zhuǎn)換的指令稱為隨路指令。 硬件單元對(duì)隨路指令的支持為程序設(shè)計(jì)提供了便捷性。
2、數(shù)據(jù)通路
數(shù)據(jù)通路指的是AI Core在完成一個(gè)計(jì)算任務(wù)時(shí),數(shù)據(jù)在AI Core中的流通路徑。 前文已經(jīng)以矩陣相乘為例簡單介紹了數(shù)據(jù)的搬運(yùn)路徑。 圖3-12展示了達(dá)芬奇架構(gòu)中一個(gè)AI Core內(nèi)完整的數(shù)據(jù)傳輸路徑。 這其中包含了DDR或HBM,以及L2緩沖區(qū),這些都屬于AI Core核外的數(shù)據(jù)存儲(chǔ)系統(tǒng)。 圖中其它各類型的數(shù)據(jù)緩沖區(qū)都屬于核內(nèi)存儲(chǔ)系統(tǒng)。
核外存儲(chǔ)系統(tǒng)中的數(shù)據(jù)可以通過LOAD指令被直接搬運(yùn)到矩陣計(jì)算單元中進(jìn)行計(jì)算,輸出的結(jié)果會(huì)被保存在輸出緩沖區(qū)中。 除了直接將數(shù)據(jù)通過LOAD指令發(fā)送到矩陣計(jì)算單元中,核外存儲(chǔ)系統(tǒng)中的數(shù)據(jù)也可以通過LOAD指令先行傳入輸入緩沖區(qū),再通過其它指令傳輸?shù)骄仃囉?jì)算單元中。 這樣做的好處是利用大容量的輸入緩沖區(qū)來暫存需要被矩陣計(jì)算單元反復(fù)使用的數(shù)據(jù)。
矩陣計(jì)算單元和輸出緩沖區(qū)之間是可以相互傳輸數(shù)據(jù)的。 由于矩陣計(jì)算單元容量較小,部分矩陣運(yùn)算結(jié)果可以寫入輸出緩沖區(qū)中,從而提供充裕的空間容納后續(xù)的矩陣計(jì)算。 當(dāng)然也可以將輸出緩沖區(qū)中的數(shù)據(jù)再次搬回矩陣計(jì)算單元作為后續(xù)計(jì)算的輸入。 輸出緩沖區(qū)和向量計(jì)算單元、標(biāo)量計(jì)算單元以及核外存儲(chǔ)系統(tǒng)之間都有一條獨(dú)立的雙向數(shù)據(jù)通路。 輸出緩沖區(qū)中的數(shù)據(jù)可以通過專用寄存器或通用寄存器進(jìn)出標(biāo)量計(jì)算單元。
值得注意的是,AI Core中的所有數(shù)據(jù)如果需要向外部傳輸,都必須經(jīng)過輸出緩沖區(qū),才能夠被寫回到核外存儲(chǔ)系統(tǒng)中。 例如輸入緩沖區(qū)中的圖像特征數(shù)據(jù)如果需要被輸出到系統(tǒng)內(nèi)存中,則需要先經(jīng)過矩陣計(jì)算單元處理后存入輸出緩沖區(qū)中,最終從輸出緩沖區(qū)寫回到核外存儲(chǔ)系統(tǒng)中。 在AI Core中并沒有一條從輸入緩沖區(qū)直接寫入到輸出緩沖區(qū)的數(shù)據(jù)通路。 因此輸出緩沖區(qū)作為AI Core數(shù)據(jù)流出的閘口,能夠統(tǒng)一的控制和協(xié)調(diào)所有核內(nèi)數(shù)據(jù)的輸出。
達(dá)芬奇架構(gòu)數(shù)據(jù)通路的特點(diǎn)是多進(jìn)單出,數(shù)據(jù)流入AI Core可以通過多條數(shù)據(jù)通路,可以從外部直接流入矩陣計(jì)算單元、輸入緩沖區(qū)和輸出緩沖區(qū)中的任何一個(gè),流入路徑的方式比較靈活,在軟件的控制下由不同數(shù)據(jù)流水線分別進(jìn)行管理。 而數(shù)據(jù)輸出則必須通過輸出緩沖區(qū),最終才能輸出到核外存儲(chǔ)系統(tǒng)中。
這樣設(shè)計(jì)的理由主要是考慮到了深度神經(jīng)網(wǎng)絡(luò)計(jì)算的特征。 神經(jīng)網(wǎng)絡(luò)在計(jì)算過程中,往往輸入的數(shù)據(jù)種類繁多并且數(shù)量巨大,比如多個(gè)通道、多個(gè)卷積核的權(quán)重和偏置值以及多個(gè)通道的特征值等,而AI Core中對(duì)應(yīng)這些數(shù)據(jù)的存儲(chǔ)單元可以相對(duì)獨(dú)立且固定,可以通過并行輸入的方式來提高數(shù)據(jù)流入的效率,滿足海量計(jì)算的需求。 AI Core中設(shè)計(jì)多個(gè)輸入數(shù)據(jù)通路的好處是對(duì)輸入數(shù)據(jù)流的限制少,能夠?yàn)橛?jì)算源源不斷的輸送源數(shù)據(jù)。 與此相反,深度神經(jīng)網(wǎng)絡(luò)計(jì)算將多種輸入數(shù)據(jù)處理完成后往往只生成輸出特征矩陣,數(shù)據(jù)種類相對(duì)單一。 根據(jù)神經(jīng)網(wǎng)絡(luò)輸出數(shù)據(jù)的特點(diǎn),在AI Core中設(shè)計(jì)了單輸出的數(shù)據(jù)通路,一方面節(jié)約了芯片硬件資源,另一方面可以統(tǒng)一管理輸出數(shù)據(jù),將數(shù)據(jù)輸出的控制硬件降到最低。
綜上,達(dá)芬奇架構(gòu)中的各個(gè)存儲(chǔ)單元之間的數(shù)據(jù)通路以及多進(jìn)單出的核內(nèi)外數(shù)據(jù)交換機(jī)制是在深入研究了以卷積神經(jīng)網(wǎng)絡(luò)為代表的主流深度學(xué)習(xí)算法后開發(fā)出來的,目的是在保障數(shù)據(jù)良好的流動(dòng)性前提下,減少芯片成本、提升計(jì)算性能、降低控制復(fù)雜度。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229842 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85846 -
AI
+關(guān)注
關(guān)注
87文章
30896瀏覽量
269086 -
控制單元
+關(guān)注
關(guān)注
0文章
74瀏覽量
12826 -
davinci
+關(guān)注
關(guān)注
0文章
33瀏覽量
12403
原文標(biāo)題:昇騰AI處理器:全面解密DaVinci架構(gòu)
文章出處:【微信號(hào):算力基建,微信公眾號(hào):算力基建】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論