陸春帆,劉 爽,周 洲2,
(1.重慶郵電大學,重慶 400000;2.電子科技大學重慶微電子產業技術研究院,重慶 400000;3.電子科技大學,四川 成都 610000)
隨著人工智能近些年在自動駕駛、智能機器人、航空航天等領域不斷地高速高進度發展,卷積神經網絡機器學習算法更是非常廣泛使用,正是因為該算法在認知和決策任務方面卓越性能。卷積神經網絡優勢很突出,以下三點是處理器處理數據要求:(1) 網絡相互連接十分復雜;(2) 將進行超大量卷積運算;(3) 神經網絡數據隨著神經網絡的規模不斷擴大呈現指數級現象增長。市場上常見CPU 和GPU 都是使用至今馮·諾依曼結構,而傳統馮·諾依曼結構處理數據方式是將數據存儲在某個存儲模塊單元中,在需要進行數據加工時將其取出,在完成數據加工以后再次存入另外一個存儲模塊中。傳統馮·諾依曼結構將存儲和運算分離開來形成兩個模塊,進一步能看出這種結構在進行數據交換時,需要消耗大量的資源和非常大的功耗。這是造成傳統CPU 和GPU 無法體現卷積神經網絡性能優勢的表面原因,根本原因是傳統CPU和GPU 在進行運算的過程中需要調用指令讀取存儲模塊中數據,而存儲模塊有限讀取帶寬,引起處理卷積神經網絡數據吞吐率下降。
機器學習算法處理數據優點不斷放大,但是所占用存儲空間隨之變大,在大規模神經網絡中,比如深度神經網絡,內存對能效比限制成為傳統馮·諾依曼結構計算機的挑戰。該挑戰伴隨人工智能在當今被普及越發明顯。計算量大是神經網絡的重要特征之一,而且在計算過程中所涉及數據信息量很大,這些在傳統馮·諾依曼結構計算機中體現就是進行大量循環往復的讀寫內存。目前DRAM進行一次讀寫32bit 數據所消耗能量是32bit 數據計算所消耗能量大兩到三個數量級,不難看出這是總體計算設備中能效比的瓶頸。
DianNao 和Eyeriss 使用了數據重用技術[1-2],特點是對外部存儲數據不斷重復使用,但對片上存儲數據進行處理所消耗能量并沒有明顯優化,SRAM 不斷反復進行讀取還存在延遲問題;雖然可以采用低功耗數字電路設計,例如動態電壓- 頻率調節[3]和時鐘門燮技術[4],但訪問存儲功耗和延遲問題并沒有解決;低壓(幾百mV)SRAM 技術[5]對內存讀取功耗優化顯著體現,但是電壓余量減少,數據讀取出錯更容易出現。
為了解決這個問題,提出將存儲和計算結合的計算方法,即存內計算。存內計算概念最早使用是在商業數據庫系統領域,例如IBM 公司的DB2,微軟公司的SQL Server。存內計算與傳統馮·諾依曼架構區別是在每一個存儲單元內或者旁邊設計了運算邏輯單元,這樣極大的解決功耗問題和提升數據吞吐率。圖1(a)為傳統馮·洛伊曼架構,圖1(b)為存內計算架構,易知存內計算對計算過程數據搬運有顯著優化。

圖1
存內計算概念提出一直到今天,很多研究者已經完成基于CMOS 工藝存內計算系統。例如,Mingu Kang 等人提出一種基于靜態隨機存取存儲器(SR AM)的內存計算卷積神經網絡,圖2 是本研究提出核心存算系統結構。存算系統通過邏輯燮制單元對存算電路模塊完成讀寫模式或計算模式。在讀寫模式下,計算模式處于關閉狀態,讀寫模式分為讀信號和寫信號兩種狀態,不能同時存在。通過求值數組模塊對信號再處理燮制三態門電路、預充電電路、列復位器電路、靈敏放大器電路寫驅動電路、以及數據D 觸發器驅動,其中觸發器目的是將數據與時鐘信號同步,其他模塊完成系統功能。

圖2 存算系統結構
此系統核心存算電路結構見圖3,通過大量重復單元邏輯組合完成更大計算功能。計算功能是通過signal1 實現,signal1 打開之前,通過RST 對CAP 電容上的電荷重置。signal1 打開,存儲為“1”時,CAP 充電為“1”,存0 時,CAP 電荷不變。

圖3 存算電路
本研究結構優化提出位線置位延時模塊見圖4,S_en_P 輸入為1 時,S_en 輸出為0,靈敏放大器開始工作。S_en_P 輸入為0 時,S_en 輸出為1,然后形成反饋,S_en_P 如果保持不變的話,則此時或非門相當于一個非門邏輯,此時構成類似于Ring VCO 結構,此結果會造成靈敏放大器使能信號錯誤,此干擾解決方式有三種,第一種采用較小的管子尺寸,使信號在高頻下,使反相器下拉能力較差,雖然輸出結果正常,但是輸出結果會是一個齒輪狀;第二種解決方式可通過調整管子尺寸將整體電路延時增大,類似于傳統PFD 結構中消除死區的方式,使信號正常工作,通過增大延時的方式還可以是在每一級增加一個電容,電容越大,延時越大。

圖4 位線置位延時模塊
圖5 是位線置位延時模塊仿真結果圖,結果圖可知實現較大的延時效果,其結果在不影響靈敏放大器輸出結果同時,還能保證下一次數據信號正常輸出。

圖5 位線置位延時模塊仿真結果
圖6 是存算整體仿真結果圖,OE、WE、CS 是邏輯燮制信號,其中VDD 是待存儲數據,signal1 是計算模式使能信號,RST 則是對計算完成以后數據重置,RAM_out是存儲單元數據檢測結果,DB_out 是讀取輸出結果,net09 是計算輸出結果。從結果來看,首先存儲單元內的數據沒有受到讀取時的干擾而改變,短暫的波動是因為RST 導通和signal1 的關閉信號有一個互擾現象,造成存儲數據波動。DB_out 為了保證整體電路,輸出端會有一個反向的過程,所以輸出數據與存儲數據相反。

圖6 存算整體仿真結果
本研究所討論的存算一體電路在科研方向最前沿的研究領域,其市場價值也非常大。文中提到的存算單元結構簡單,功能完善,通過驗證結果也是與預想結果一致。通過置位延時模塊電路解決了靈敏放大器開啟過早或太晚的問題,置位延時最大的困難就是形成環振的問題,解決方法也有很多,本研究也只是采用其中一種解決辦法。