存算一體或存內計算是將存儲與計算完全融合,直接利用存儲器進行數據處理或計算。在傳統的馮諾依曼架構下,數據的存儲和計算是分開的,由于存儲和計算的性能存在加大的差距,處理器訪問存儲數據的速率遠遠小于處理器計算速率,數據在內存與主存之間搬運的過程其能耗也遠遠高于處理器的計算所消耗的能量。
從NPU和TPU的架構設計可以看出,其本質都是在解決數據高效訪存的問題,只是實現方式略有差異??偨Y看來主要包括了:
通過提高通信帶寬實現數據的高速傳輸和降低功耗。
將數據存儲盡量靠近計算單元,從而降低數據搬運的延遲和功耗,比如多級緩存和片上存儲。
提高數據在時間和空間上的復用效率,減少數據與主存的通信次數。
存算一體通過將計算單元和存儲單元集成在同一個芯片,讓存儲單元具有計算能力,使得計算可以在存儲器單元內完成,極大的降低了數據搬運帶來的延遲和功耗,其特別適用于深度學習這種需要大規模的數據搬運和大規模并行計算的場景。
存內計算
存內計算一般包括數字計算和模擬計算兩種實現方式,模擬計算能效高但計算精準度低,數字計算計算精準度高但功耗較大,當前主流的存內計算主要還是以模擬計算為主。
模擬存內計算主要基于物理定律在存算陣列上實現乘加運算,以憶阻器上的矩陣乘法MxN為例,運算前,先將矩陣M按行列位置存入憶阻器,在輸入端矩陣M使用不同電壓值來表示,根據歐姆定律和基爾霍夫定律在輸出端可以得到對應的乘加后電流矢量,多個存算陣列并行,便可完成多個矩陣乘法計算。
數字存內計算是通過在存儲陣列中加入與或門、乘法器、加法器等邏輯計算電路,使存儲陣列不僅具備存儲功能還具備計算能力。由于需要為每個存儲單元增加了邏輯電路,所以其在芯片面積上并不占優勢,限制了其計算能力的拓展,因此,當前數字存內計算實現更多的采用先進工藝來實現,由于工藝和成本的因素,其應用范圍受到了比較大的限制。
類腦計算
基于人腦的脈沖(spiking)模擬計算框架下的脈沖神經網絡 (SNN)有望在實現人工智能的同時降低計算平臺的能耗。
在SNN模型中上游神經脈沖Vi通過突觸權重Wi調節,在給定時間內產生的合成電流 ∑iVi?Wi等效于點積運算。從圖例可以看出,脈沖計算通過電流的進出模擬神經元計算過程,整個系統基于事件驅動,深度學習網絡計算又是高度稀疏的,所以通過脈沖通信和計算可以實現極低能耗下大規模并行計算。
脈沖計算示例圖
從脈沖計算過程可以看到,脈沖計算的硬件結構需要存算一體的體系設計將神經元和突觸陣列緊密放置在一起。所以當前的脈沖神經網絡芯片基本都采用模擬存內計算的存算一體的架構設計。
技術挑戰
存內計算雖然有很多的優勢,但商業應用上還面臨著諸多挑戰,其在器件研發、電路設計、芯片架構、生成制造、EDA工具鏈以及軟件算法等環節都還面臨不少的問題需要解決和突破,整體技術成熟度較弱。
存算一體化需要同時滿足存儲和計算兩者的設計需求,比如存儲單元的可靠性、擦寫次數、器件一致性等,計算單元的響應速度、功耗等。從當前半導體電路設計和制造工藝,要同時兼顧難度較大。
受限于工藝和芯片面積,當前商用存內計算的芯片算力較小,能支持的算力和算子有限,所以能力支持的神經網絡算法也有限,通用性較差。
當前主流的模擬存內計算的計算精準度較差,計算結果不準確會導致實際計算結果與理想結果產生偏差。數字存內計算的雖然計算精準度高,但運算開銷較大。
當前邏輯單元電路實現還是以基于二進制數字精準運算為主,模擬運算在理論和電路實現上相對缺乏,導致模擬計算的芯片實現難度較高。
存內計算芯片設計與常規芯片有較大差異,現有的EDA工具無法提供標準單元庫以供芯片設計者使用,缺乏大規模存算陣列的快速開發工具導致產品化效率低。
鄭重聲明:文中僅代表作者觀點,不代表本公司觀點,本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或者刪除,感謝您的關注!