diannao系列的儲存的設計理念是**儲存,這樣有幾個好處:
diannao和dadiannao的儲存設計基本相同,區別在於dadiannao使用了片上edram增大了片上儲存的面積,下圖為dadiannao的儲存部分,diannao的儲存部分類似,可以參考整體架構中diannao的架構圖:
儲存被**為三個部分:
diannao和dadiannao的重用策略是重用輸入資料即nbin中的資料。當需要nbin參與的運算全部完成後,nbin才會被覆蓋。因此,在dadiannao中,所有運算單元共享edram實現的nbin和nbout(圖中edram router部分),但具有自己的sb快取(每個節點有4個edram)
shidiannao的儲存比較有特色,由於其特殊性,並未採用dadiannao的edram組成超大片上儲存。僅使用了288kb的sram,因此其儲存組織更值得研究,下圖為nbin快取及其控制器的設計:
可以發現,每個儲存器**為$2 \times p_y$個bank,每個bank的位寬是$p_x \times 16bit$。其中$p_y$為運算陣列的行數,$p_x$為計算陣列的列數,16bit為資料位寬。該儲存器支援的讀取方式有6種:
寫方面,採用快取-儲存的方式,即現先待寫入資料換存入output暫存器中,待全部運算單元完成運算後統一將資料從output暫存器中寫入儲存器。
pudiannao拋棄了按用途**儲存器的方法,改為按重用頻率**儲存器。且其設計方法更貼近通用處理器cpu,以實現通用機器學習處理器。pudiannao認為其能實現的7種機器學習演算法在儲存上分為兩種:
第一種與k-nn(k-鄰近演算法)類似,每個資料的重用間隔(這一次使用和下一次使用之間的間隔資料數量)明確的類聚為幾類。第二種與nb(樸素貝葉斯)類似,除了位置為1上的明顯類聚外,資料重用間隔在一段上均有分布。因此pudiannao實現三個片上儲存,分別為:
對映方法指現有硬體加速器如何實現神經網路中的運算,包括卷積,池化和全連線層等。
由於diannao和dadiannao的**中都沒有明確闡述這兩款加速器如何對映運算,因此以下內容均為個人推測
diannao和dadiannao的運算單元均為nfu,參考其設計,其功能描述如下:
$$mul: y_i = \sum\limits^ w_i \cdot x_i \
max:y_i = max}
$$無論是向量內積還是卷積,其最終都是對應位置元素相乘再相加。都可以使用運算核心的mul功能解決,即將nfu-2配置為加法樹。在儲存中,輸入資料按[高度,寬度,通道數]維度排列,即先儲存第乙個資料位置的所有通道資料,再儲存第二個資料位置的所有通道資料,以此類推。權值資料按[高度,寬度,輸出通道數,輸入通道數]排列。其實現圖如下所示:
上圖為乙個$t_n = 2$的例子,其中資料含義如下所示:
標記**
說明x000
輸入資料
資料位置(0,0),通道0資料
x001
輸入資料
資料位置(0,0),通道1資料
w0000
引數資料位置(0,0),通道0資料對應輸出通道0的引數
w0001
引數資料位置(0,0),通道1資料對應輸出通道0的引數
w0010
引數資料位置(0,0),通道0資料對應輸出通道1的引數
w0011
引數資料位置(0,0),通道1資料對應輸出通道1的引數
其實現的運算在卷積中如下所示:
實現池化層時,輸入資料按[通道數,高度,寬度]排列,nfu-2被配置為取最大值樹。
shidiannao由陣列實現卷積,池化,向量內積等操作,對映比較複雜。以下說明均使用$p_x=p_y=2$
shidiannao的每個節點的簡化圖形如下所示,以下說明將使用該圖示:
實現卷積的第一步是初始化,將資料讀入運算陣列,使用快取讀方式1或2:
隨後讀bank2和bank3的第乙個神經元,將其填充到運算陣列的右側,同時輸入資料右移,這等效的是標記參與運算的資料框向右擴充套件:
之後讀bank2和bank3的第二個神經元,將其填充到運算陣列右側,同時輸入資料右移,這等效的是標記參與運算的資料框向右擴充套件:
隨後讀bank1的兩個神經元,將其填充到底部,同時資料上移,這等效標記參與運算的資料框向下擴充套件:
下表表示了每乙個運算節點使用過的權值和資料:
座標引數=k00
引數=k10
引數=k20
引數=k01
0,0(左上)
x00x10
x20x01
0,1(右上)
x10x20
x30x11
1,0(左下)
x01x11
x21x02
1,1(右下)
x11x21
x31x12
注意上文中運算單元和sb的行為為原文中註明的,儲存器行為為個人推斷,此外,原文中的推斷到此為止,理由為保持簡潔,然而下一步的操作使用以上幾步無法完全推測,原文中說明該復用方法可以節約44.4%的頻寬,有$4 \times 9 \times 44.4% = 16$,所以一共讀了20次,影象中有16個資料,推測就是中心處被復用最多次的x11,x21,x12和x22。該部分說明的原圖如下圖所示:
池化的對映方法與卷積類似,且由於池化的stride一般不為1,因此需要注意的是fifo-h和fifo-v的深度不再是1。其中$s_x$和$s_y$分別是x方向和y方向的stride。
矩陣乘法中,每個計算節點代表乙個輸出神經元,除非乙個輸出神經元的計算全部完成,否則不會進行下乙個神經元的運算。與卷積不同的是,被廣播的資料是輸入資料而不是權值。因為在矩陣乘運算中,權值的數量多於資料且不被復用。每次運算分為以下幾個步驟:
pudiannao的對映方法比較簡單,由於較多的考慮了靈活性,因此使用類似軟體的方式控制整個晶元。推測方法為:
映象加速器
對於使用 systemd 的系統,請在 etc docker daemon.json中寫入如下內容 如果檔案不存在請新建該檔案 注意,一定要保證該檔案符合 json 規範,否則 docker 將不能啟動。之後重新啟動服務。sudo systemctl daemon reload sudo syste...
加速器知識
最常見的網遊加速器工作原理,是在全國各大網路節點架設伺服器,針對不同型別的網路使用者選取連線速度最快的節點,從而利用自身快速的轉接速度彌補使用者較慢的轉接速度的。因此可以說,一款網遊加速器的效能高低要看兩個因素 1 自身伺服器節點架設的合理程度 2 節點轉接速度快慢。伺服器架設合理廣泛 網易uu網遊...
2 安裝Docker和配置加速器
1.訪問 2.開啟這條url 1.1 安裝必要的一些系統工具 1.2 安裝gpg證書 注意 後面的 也是命令的一部分 1.3 寫入軟體源資訊 root ubuntu 18 sudo add apt repository deb arch amd64 lsb release cs stable 1.4...