ISSCC 2017論文導讀 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine

A 28nm SoC with a 1.2GHz 568nJ/Prediction Sparse Deep-Neural-Network Engine with >0.1 Timing Error Rate Tolerance for IoT Applicationsmarkdown

單位:Harvard(哈佛大學)session

這是一篇專門爲DNN加速設計的芯片,在CNN加速芯片設計當道的今天也算是很是另類了~~不過能在ISSCC上發表,天然也有它的innovation,下面講一講。架構

就我當前的能夠理解部分(知識結構不足哈,Razor timing violation detection這一塊暫時不是特別清楚,留着之後再補),我以爲本文的創新點有:(1)稀疏計算,數據0不會參與運算;(2)採用sign-magnitude number format保存參數和計算;ide

DNN計算(就是一個向量*矩陣)是存在SIMD窗口的,一個輸入同時能夠計算多個節點。可是很容易想到,若是SIMD窗口太大,數據是重用了,可是參數一次要讀太多會使得帶寬變大。函數

這裏寫圖片描述

所以,做者分析了數據和參數讀取的相對比例,如圖,能夠看出,8通道的SIMD其效率是較高的,帶寬也在合理範圍內,同時能夠在128b位寬的AXI總線下運行得到10x的數據有效重用率。spa

這裏寫圖片描述

下面是總體架構圖,是一個5階段的SIMD流水架構,流程基本上是:
一、Host Processor將配置和輸入數據載入CFG和IPBUF
二、乘累加器進行計算,數據由IPBUF讀入,權重由W-MEM讀入
三、在Activation步驟,進行偏置、激活操做,隨後將數據寫回XBUF(隱藏層結果)
四、向host發起中斷請求,數據輸出設計

這裏寫圖片描述

分別對幾個點展開講一下:orm

XBUF:有兩份,使得同時能夠寫結果到XBUF,又能夠讀數據用於計算;圖片

Weight採用sign-magnitude number format:其實就是1bit符號位,後面是絕對值的原碼,這樣的好處是減小了補碼錶示帶來的bit翻轉率,既下降了功耗,也減小了出錯率;ci

這裏寫圖片描述

MAC Datapath:有8個並行的16bit MAC單元。由於採用SM,因此做者對同號和異號分開處理——其實就是同號乘結果累加,異號減去。

這裏寫圖片描述

重點還有sparse怎麼作。在MAC單元計算完(累加完成),而後要加上Bias,而後過RELU單元(也是由於RELU因此數據結果才稀疏,可是換其餘激活函數就不行了),對於0數據(以及小於閾值的比較小的值),是不會寫回XBUF的,同時Activation生產了SKIP信號存在臨時的NBUF中。NBUF(512B SRAM)中維護的是參數中非零的index,DMA階段會根據index來生成weight address,用於下個階段從W-MEM取參數;這樣就能夠避免0數據的計算cycle了。

這裏寫圖片描述

最後總結[1]:

DNN ENGINE——一款高能效的DNN加速器(568nj/pred@1.2GHz),時序容差>10^-1@MNIST 98.36%

-Parallelism:10x的數據重用@帶寬128b/cycle

-Sparcity:+4x吞吐,-4x能耗

-Resilience:+50%吞吐/-30%能耗(2/Razor)

[1] https://reconfigdeeplearning.com/2017/02/08/isscc-2017-session-14-slides14-3/ [2] ISSCC2017, A 28nm SoC with a 1.2GHz 568nJ/Prediction Sparse Deep-Neural-Network Engine with >0.1 Timing Error Rate Tolerance for IoT Applications

相關文章
相關標籤/搜索