1 引言
人工智能算法需要強大的計算能力支撐, 對算力的需求更是以超摩爾(Moore)定律增長 , 特別是深度學習算法大規模使用, 對計算能力提出更高要求。 智能算法并行性高、數據重用性強, 而且不斷演進、新算法層出不窮、計算模型不斷變化, 為處理器體系結構設計帶來巨大的設計空間。 人工智能處理器體系結構設計目前存在著兩種類型設計: 以TPU 為代表的專用架構和以GPU 為代表的通用架構。 前者性能功耗比高、使用簡單, 但缺乏一定的靈活性和通用性; 后者具有較好的靈活性和通用性, 但是增加了功耗, 編程和算法設計更加復雜。
國產眾核處理器具有融合異構體系結構、多維并行數據通信、柔性優化的存儲, 以及高效平衡的運算核心等特性, 為人工智能應用提供了有效支撐。 深度融合異構核心架構集成通用處理核心和領域通用計算核心, 滿足通用計算和智能計算領域通用的智能計算能力。 多維并行數據通信體系采用基于輕量級寄存器通信和運算核心快速同步技術, 實現運算核心間的低延遲高帶寬的數據交換和靈活高效同步, 提升人工智能應用的核心運算效率。 柔性優化存儲體系采用軟硬件結合的方法, 使片上存儲管理柔性靈活, 解決智能計算存儲帶寬受限和延遲增加的難題。 高效平衡的運算核心在保證智能計算類應用處理效率的同時, 通過集成更多的核心獲得更高的并行處理性能, 可同時滿足人工智能計算需求。
2 眾核處理器的發展
眾核處理器是當前支持人工智能計算的關鍵核心器件, 發展過程中涌現眾多類型的技術和架構, 大量研究者和公司為推動其發展貢獻了智慧和力量。
粗粒度可重構體系結構是眾核處理器形成的先導技術。 在2000年前后出現了一大批基于交叉開關、線性陣列、MESH等3大類體系結構的粗粒度可重構處理器。 基于全交叉開關的體系結構具有很強的通信能力, 通常采用簡化的交叉開關來應對由于處理單元數量的增加而導致實現代價的指數增長, 如用于DSP數據通道的快速原型PADDI ,PADDI-2 ; 基于一個或者多個線性陣列的體系結構, 可提供可重構的流水線Stage, 實現部分快速動態流水線重構和運行時對配置流和數據流的調度, 如PIPERENCH ; 基于Mesh的體系結構, 將PE按照二維陣列進行排列, 相鄰PE可以通信, 一般也支持行或者列內PE之間直接通信, 可支持編譯時確定的靜態網絡和運行時確定的動態網絡, 如RAW 。 粗粒度可重構體系結構的研究成果除部分轉化為工業產品(如TILE系列 2))外, 其更多是集中于學術領域。
工業界眾核處理器開始于GPU. 2002年GPGPU (通用圖形計算)的概念逐漸明確, 實現浮點矩陣乘矩陣算法 3)并開始應用于傳統的科學工程計算領域; 2005年, GPU實現了浮點矩陣的LU分解計算。 這一階段, GPU面臨的最主要的問題是編程困難, 必須把科學工程算法映射成傳統的圖像處理流程。 同一時期的2002年, IBM開展了面向P級超級計算機的C64研發, 其核心是Cyclops-64眾核處理器。 Cyclops-64包含80顆核心, 通過交叉開關互連, 峰值性能達80 GFlops. 2005年, IBM發布CELL處理器, 集成了不同功能的兩類核心: 主控制核心(PPE)和協處理器核心(SPE), 核心之間通過總線互連, 峰值性能可達102 GFlops. 2008年, IBM基于CELL構建了Roadrunner超級計算機, Linpack持續性能首次超過1 PFlops, 并在TOP500排行榜中名列第一, 對業界產生了巨大的影響。
隨著眾核處理器體系結構的持續改進, 其適應性和好用性得到不斷提高。 高性能GPU逐漸增加雙精度浮點運算單元、內存控制器增加ECC校驗, 計算方式更加通用。 特別是2007年CUDA軟件開發套件的發布, 為GPU的廣泛應用鋪平道路。 2010年6月, 曙光公司的銀河超級計算機使用NVIDIA的Tesla, 測試峰值性能1.27 PFlops; 2010年11月, 天河– 1A使用Tesla測試性能達到2.56 PFlops; GPU在高性能計算領域得到了越來越廣泛的使用, 成為了眾核處理器的事實標準。 Intel作為HPC領域的重要廠商, 在眾核處理器領域不斷加大投入, 2006年開始研究Larrabee體系結構, 2010年發布了MIC體系結構, 推出Xeon PHI高性能眾核處理器, 包含57~ ~ 72顆X86核心。 2013年, 國防科技大學研制了基于PHI的“天河二號”超級計算機, 性能居當時世界第一。
根據計算核心的結構復雜度和組織方式, 可以將眾核處理器分為基于通用處理核心和基于計算簇的眾核處理器兩大類。
基于通用處理核心眾核處理器可以看作是多核結構處理器的進一步延伸, 通過片上互連網絡(NoC)集成眾多的通用處理器核心。 計算核心一般由通用核心簡化而來, 所有核心功能齊全、計算能力強。 但通常會簡化指令調度、推測執行等結構, 計算核心內的運算部件一般支持SIMD, 單核心內通常會保留通用處理器中傳統的多級Cache存儲結構, 典型代表包括Intel的Larrabee/MIC架構處理器、SCC架構處理器, Tilera的TILE-GX系列處理器 。
基于計算簇的眾核處理器片上集成了大量簡單的計算核心, 旨在通過簡單運算部件的聚合提供超高計算性能。 這類眾核處理器計算核心為簡單計算部件, 多個核心以組或簇的形式進行組織, 可通過單指令多線程流(SIMT)等數據流并行的方式提供強大的并行計算能力。 片上通常還集成有面向領域的專用加速處理部件, 計算簇內所有計算核心共用指令發射單元, 并共享寄存器文件、一級Cache等存儲資源。 計算簇間則共享二級Cache和主存等。 典型代表主要包括NVIDIA的GPGPU系列處理器, 如Fermi, Kepler ; AMD/ATI的GPU系列, 如RV架構處理器、GCN架構處理器 5)等。
國際上眾核處理器發展的同時, 國內研究也在同步開展, 包括Godson-T眾核處理器、YHFT64-2流處理器, 以及申威眾核處理器等。 Godson-T采用了2D MESH結構, 8××8陣列結構共64個處理器核, 兼容MIPS指令集。 YHFT64-2處理器采用異構多核架構, 包含64核心處理器,具有傳統通用體系結構的靈活性,又擁有大量的計算資源,峰值計算能力強大。 申威眾核處理器應用于“神威? ? 太湖之光”超級計算機系統中, 采用片上融合異構的體系結構, 并采用統一的指令集系統, 兼顧應用的好用性和性能, 實現較優的性能功耗比和計算密度。
以深度學習為代表的人工智能領域已開啟體系結構的新時代。 當前人工智能應用對算力的需求更是以超摩爾定律的速度增長, 從2012年到2017年計算需求增加30萬倍, 即每3.5個月翻一倍。 人工智能算法的核心計算為低精度線性代數, 一方面具有足夠的適應性, 可以推廣到眾多領域; 另一方面具有足夠的特殊性, 可以受益于領域專用體系結構設計。
眾核處理器體系結構不僅對科學工程計算具有較高的效能和較好的適應性, 其對雙精度、單精度矩陣計算的支持同樣能夠在一定程度上滿足人工智能關鍵計算需求。 因此, 眾核處理器體系結構對人工智能計算具有天然的優勢。 同時, 眾核處理器又根據人工智能計算特殊的需求, 不斷進行改進完善, 例如增加其他計算核心加速的支持、增加混合精度計算的支持等。 NVIDIA在V100, Turing眾核處理器中增加顯著提升性能的TensorCore, 使其人工智能計算峰值性能是雙精度浮點的約17倍。 AMD的VEGA架構同樣顯著提升人工智能計算性能。 Intel推出的Knights Mill眾核處理器, 增加了支持人工智能計算的特殊指令。
3 面向智能計算的國產眾核架構關鍵技術
卷積和矩陣乘是智能計算最核心的操作, 具有高度的并行性和數據重用性等特點, 當前人工智能領域的處理器都圍繞如何對加速這兩種操作進行體系結構設計。 國產眾核處理器要良好地適應智能計算需求, 就必須有效支持大規模的卷積和矩陣乘計算。 國產眾核處理器的運算核心需要具備靈活的控制能力, 可實現卷積和矩陣乘計算復雜循環過程的高效控制和數據調度; 通過高效的片上通信支持卷積權重用和輸入特征值的全局共享; 通過指令重排精確控制權重和輸入特征值, 從局部片上存儲到計算流水線的讀取與計算重疊, 進一步提升計算性能; 通過靈活的數據移動和片上布局實現卷積和輸入特征值的靈活轉換, 減少數據重整開銷; 片上多層次并行機制, 支持高效的片上數據并行策略, 提升數據交換性能和權值更新性能。
從總整體上看, 國產眾核處理器架構需要具有多項創新的關鍵技術以有效支持人工智能計算, 包括: 融合異構的體系結構、輕量級片上通信機制、柔性優化的存儲體系、高效平衡的運算核心架構等。
3.1 融合異構的體系結構
眾核處理器在同一芯片內同時集成充分挖掘TLP的“重”核心和結構簡單用于ILP的“輕”核心, 可高效支持復雜的人工智能應用和算法實現, 兼顧好用性和性能, 實現較優的性能功耗比和高的計算密度。
運算核心(“輕”核心)與控制核心(“重”核心)協同支持人工智能應用中不同類型任務。 運算核心支持多種寬度SIMD, 為人工智能應用提供其所需的主要計算能力; 運算核心支持軟件管理片上局部存儲, 并通過高效片上網絡結構, 實現數據級和線程級并行, 支持更加靈活、豐富的人工智能算法實現機制, 例如算法層次化、數據片上共享、MPMD模式等。 控制核心負責人工智能任務中難以并行化部分的計算, 實現指令級并行, 通過多級Cache重用應用的空間和時間局部性, 支持復雜的超參數調優、訓練迭代、數據拆分等。
為有效解決人工智能異構任務管理困難、片上數據共享復雜、數據一致性難以處理、執行模型兼容難等挑戰, 眾核架構的不同核心之間需要采用統一指令系統、統一執行模型, 支持多種存儲空間管理模式等技術, 實現片上異構核心的深度融合。
3.2 輕量級片上通信機制
眾核處理器核心數多, 每個核心的局部存儲空間受限, 每個核心能夠獨立處理的工作集較小, 對主存訪問帶寬和延遲需求大, 而人工智能應用多為“存算密集型應用”。 眾核處理器必須具有高效的核心間片上數據重用機制擴大工作集, 減少應用的訪存需求, 最大限度保證處理器計算能力發揮。 采用輕量級片上通信機制, 實現運算核心間的低延遲高帶寬的數據交換, 提升運算核心密切協同的執行效率, 顯著提高片上數據的重用效率, 有效緩解眾核處理器面臨的“存儲墻”問題。
輕量級片上通信機制使用雙邊協議, 實現輕量級的阻塞和非阻塞通信。 源核心將數據送入發送部件, 發送指令即執行完成, 流水線可繼續執行; 目標核心使用接收指令, 從接收緩沖中獲取有效數據。 為實現通信的高效和物理實現的精簡, 通信協議需要避免為了建立通信進行復雜的握手或同步協議, 并簡化簇通信網絡的設計復雜度和開銷。 與傳統的片上網絡通信機制相比, 輕量級通信機制實現運算核心需要盡量避免經過多層次片上存儲層的搬移。
運算核心間輕量級通信機制從提高片上數據重用率的角度, 需要實現核心間數據細粒度、低延遲交換/移動, 并支持多播等集合通信功能。 例如, 對人工智能應用的核心運算(矩陣乘矩陣運算), 輕量級通信可提升超過10個百分點的效率。
3.3 柔性優化的存儲體系
針對智能計算過程中計算密度大這一特性, 眾核處理器需要實現靈活的數據移動和片上布局、可重構局部數據存儲器技術的片上存儲體系。 采用軟硬件結合的方法, 使片上存儲管理柔性靈活, 數據傳輸性能優化, 有效解決了智能計算存儲帶寬受限和延遲增加的難題, 提高了眾核架構的效率和適應面。
(1) 靈活的數據移動和片上布局。 運算核心在能夠直接訪問主存空間時, 為支持片上存儲的高效使用和數據在運算核心中的靈活分配, 需要支持靈活的數據移動和片上布局, 支持數據在核心存儲和主存間的高效異步數據傳輸, 實現計算與訪存的并行。 根據人工智能算法的訪存特征, 存儲接口實現了基于滑動窗口平行的調度策略和多種映射性能優化算法, 有效提高了存儲帶寬的使用效率。
眾核架構支持多種數據布局。 支持單運算核心模式、多播模式、行模式、廣播行模式和矩陣模式。 多播模式將主存中每個核心都需要的數據提供給多個運算核心; 行模式和廣播行模式實現行維度循環分布數據塊的傳輸; 矩陣模式實現整個運算核心簇內二維格柵上循環分布數據塊的傳輸。 單核心模式、行模式和矩陣模式同時支持主存到局部數據存儲器和局部數據存儲器到主存的傳輸, 其他模式只支持主存到局部數據存儲器方向的傳輸。
眾核處理器的多模式數據流傳輸技術, 可以有效提高智能計算數據重用率, 進而提升人工智能算法性能。
(2) 可重構數據存儲技術。 面向智能計算的運算核心設計力求簡潔高效, 采用可重構局部數據存儲器技術。 運算核心的數據存儲可由軟件配置成軟硬協同Cache或片上存儲器, 以完成不同特征數據的緩存管理。 這兩種數據存儲管理方式可同時存在并支持容量動態劃分, 充分結合了硬件的高效性和軟件的靈活性, 降低設計開銷并滿足人工智能應用對存儲的需要。
軟硬件協同Cache中Cache行的數據和Cache行tag信息均保存在局部數據存儲器中, 設置一個固定寄存器保存整個Cache的信息。 軟件管理Cache的裝入與淘汰, 硬件提供指令加速命中查詢和地址轉換的性能, 軟硬件協同完成數據的緩存管理, 充分結合硬件的高效性和軟件的靈活性, 以較小的硬件開銷實現高效的訪存優化。 在軟硬件協同Cache中, 硬件負責命中查詢及不命中時的自動跳轉, 降低軟件實現的開銷(例如代碼膨脹、條件分支判斷等)。 軟件負責管理Cache的裝入與淘汰。 程序在運行時可對應多個Cache, 軟件負責不同Cache的數據訪問在局部數據存儲器中的有效隔離, 避免互相沖突。
3.4 高效平衡的運算核心架構
根據人工智能應用的分析, 眾核架構可采用弱亂序流水線結構, 其主要特點是確定性執行基礎上的有限程度亂序。 確定性執行的主要目的是減少推測執行帶來的額外功率開銷, 同時可減少為緩存未退出的推測執行指令而設置的重定序緩沖等部件的面積開銷; 有限程度的亂序是指基于指令塊的指令調度發射策略, 可以有效隱藏一些長延遲事件(比如離散訪問主存)帶來的性能損失。 弱亂序流水線結構在改善順序流水線性能的同時有效控制結構復雜度。
采用弱亂序流水線結構的運算核心雖然降低了硬件復雜度, 仍可高效處理智能計算類應用, 主要表現在: 運算核心采用的面向精簡運算核心的高效轉移預測機制, 通過編譯指導的靜態轉移預測、轉移提示和分支回跳預取等策略, 以較小的代價實現了較高的IPC. 對于運算規整的智能計算應用, 在保證指令流水性能的同時, 省去了傳統轉移預測機制依賴的大容量轉移歷史表, 減少面積開銷; 智能計算類應用是數據密集型應用, 具有批量數據處理需求, 運算核心實現的單指令多數據流技術可以高效地處理批量數據, 降低流水線指令控制開銷, 節省功耗; 運算核心采用的局部數據存儲器結構結合批量數據傳輸技術, 對數據訪問規律和確定的智能計算可以有效地隱藏數據訪問延遲, 并極大地提高數據局部性訪問效率, 降低了傳統數據Cache存在的容量失效導致數據訪問延遲不能隱藏的風險。
高效平衡的運算核心結構使得單芯片可以集成更多的運算核心, 在保證智能計算類應用處理效率的同時, 通過集成更多的核心獲得更高的并行處理性能。
4 基于國產眾核處理器的智能計算應用性能分析
當前國產眾核處理器已經支持相對完整的軟件生態(例如線性代數基礎庫swBLAS、深度學習庫swDNN、支持深度學習框架swCaffe等), 支持許多典型的人工智能應用(例如醫學影像、圍棋、語音識別等), 取得較好的測試性能。
卷積計算是深度學習的典型算法, swDNN 重點對其進行優化加速: 利用雙緩沖機制, 為卷積計算的每一部分數據分配雙倍的LDM空間, 保證計算和訪存相對獨立, 實現計算訪存重疊; 利用靈活的片上網絡和多種DMA機制, 保證不同卷積計算到運算核心陣列的高效映射; 利用運算核心雙流水線特征, 通過最大化訪存指令和計算指令重疊, 減少計算單元的等待時間, 提升卷積性能。 眾核處理器利用swDNN執行卷積計算, 與同一時期的商用眾核處理器NVIDIA的K40m (使用cuDNN庫)相比, 性能提升2~ ~ 9倍。
swCaffe 是Caffe深度學習框架在眾核處理器上的移植, 集成swDNN和swBLAS, 實現功能和性能上的定制和優化, 同時采用參數服務器進行全局參數更新, 支持計算通信重疊的同步更新策略。 基于swCaffe的卷積計算在單個運算核心陣列上的性能是單顆Intel Xeon處理器的3.5倍; 在單顆眾核處理器上的性能是K40m的1.5倍; 并行訓練可獲得較好的強可擴展性和弱可擴展性。
利用256個眾核處理器運行圍棋訓練程序, 其深度學習模型包括39層CNN網絡, 使用了2.4億個訓練樣本。 利用128個眾核處理器, 訓練醫療圖像處理器模型, 模型基于AlexNet, VGG等多種網絡, 訓練數據達1 TB 。 利用眾核處理器完成了超過10 TB數據的遙感圖像分類模型訓練。
5 總結
在人工智能(特別是深度學習)的推動下, 眾核處理器體系結構已經向著智能計算的方向發展。 人工智能計算的復雜性、靈活性和領域專用性推動國產眾核處理器體系結構未來的發展。 隨著智能算法不斷演進, 新算法層出不窮, 算法模型也在不斷變化, 需要構建一種動態可變的眾核處理器架構并保證可編程性, 以應對算法的變換和迭代; 設計新的多層次多粒度片上訪存和通信管理機制, 充分適應人工智能應用片上數據共享和移動特征, 提升計算能力的同時, 有效降低訪存需求; 面向人工智能核心算法, 構建可定制的加速核心, 快速應對算法的變化, 采用高能效結構和設計方法, 實現綠色節能目標.
評論