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

昇騰AI框架全棧深度介紹

評論