神經網路加速器NVDLA頂層介面與工作流程
Nvidia的開源神經網路加速器NVDLA已經在GitHub上面存在兩個多月的時間了,而距離軟體Software Stack的開源也差不多提上了日程。近期,NVDLA的代碼庫中已經更新了System C平台和Verilator,為更為便捷快速的軟體模擬也提供了支撐。
對於NVDLA的Top層與外界的介面以及工作流程,這裡做一下總結。目前開源的軟體代碼和測試例都只是針對nv_large模式,目前已經更新為nv_full模式。NVDLA的頂層介面包括控制匯流排,數據匯流排以及時鐘複位和中斷信號,比較簡潔。控制匯流排CSB遵循簡單地握手協議,而數據匯流排則採用簡化版的AXI4.0協議。
控制匯流排CSB,即Configuration Space Bus,主要包括請求通道,讀數據通道和寫響應通道,包括12組信號線,具體信號線個數與所選擇的AXI匯流排位寬有關。
請求通道,Request Channel,主要完成CSB Master對NVDLA的讀寫操作。其支持簡單的valid/ready握手協議,地址位寬固定為16比特,數據位寬固定為32比特,且不支持burst操作,各個讀寫命令之間相互獨立,不支持亂序完成和發射。
讀數據通道,Read Data Channel,主要返回CSB Master讀請求命令的數據,valid為高時,數據有效。也不支持亂序響應。
寫響應通道,Write Response Channel,也遵循valid協議,針對no-posted模式,返回寫響應信號,同時也不支持亂序響應。
下圖是一個簡單的兩寫兩讀的時序圖,第二個寫操作為no-posted模式。
NVDLA提供的Testbench中CSB Mater支持的指令有7條(TPU一代支持12條指令),主要完成寄存器和存儲器的讀寫操作,以及大片數據的載入和卸載操作等,還有一條wait指令,等待NVDLA中斷的完成。
NVDLA的存儲器介面比較簡單,採用了簡化版的AXI4.0協議,比如支持的burst類型僅為Incr類型,且burstsize也與數據位寬對齊,保持一致等。
同時為了隱藏配置NVDLA寄存器帶來的延遲和增加的神經網路處理時間,NVDLA採用了ping-pong寄存器模式,在group0寄存器工作的同時,CSB Master可以配置下一層的group1寄存器。這裡需要注意的是,為了簡化硬體設計,NVDLA子模塊間的工作時序以及啟動的依賴關係,都是由軟體負責,這也與TPU相類似。可見,僅流片NVDLA,是沒有任何實際意義的。
這裡以一個簡單的全連接層測試例介紹一下NVDLA的工作流程以及所需要的文件。程序文件類似於普通的高級語言編寫的C代碼文件,輸入數據和權值,都是NVDLA的輸入,都需要從模塊外面導入到加速器內部。目前NVDLA沒有開源軟體框架,只提供了一個Perl腳本,將源程序文件轉換成可執行的二進位代碼,同時將dat數據文件轉換成word存儲形式。依次配置完成響應子模塊並使能,等待中斷返回。工作流程都還算直接,只是目前階段還無法自己設計程序和測試例。
NVDLA nv_large的功耗,MAC矩陣尺寸為64x32,大致可以作為參考,功耗的絕大部分在於時鐘網路,綜合結果是在40LP@200MHz下的典型庫單元獲得的,這裡只包括動態功耗。
目前只能等待NVDLA的軟體框架和工具鏈開源,sigh~~~。
歡迎討論交流
研究領域包括集成電路、無線通信等,涉及深度學習加速器、SoC設計空間探索、多核任務調度和新一代無線通信系統實現;具有65nm、40nm成功流片經驗,在研項目包括28nm、16nm等。
中國科學院自動化研究所國家專用集成設計工程技術研究中心
推薦閱讀:
※人工智慧晶元魚和熊掌終極難題 被清華大學IC男神解決了!
※想擊敗英偉達?可能得十家以上不同垂直領域的深鑒科技,這就是AI晶元的「行情」| 人物對話
※光子晶元橫空出世,28 歲 MIT 中國青年科學家直取 AI 算力霸業!AI 晶元賽局勝負未定 | 獨家
※ARM發布了兩款AI晶元設計,為機器學習而生