MLIR編譯技術應對硬體設計挑戰?—初探CIRCT專案

摘要
    後摩爾時代,晶片架構向專用化的方向發展,打造一套統一的編譯器變得勢在必行,頂層抽象,底層最佳化,然後對映到各個不同的專用晶片;同理,在晶片設計領域,頂層支援多種硬體表達,底層抽象、最佳化、對映到不同的晶片架構變得十分可能CIRCT專案正是基於MLIR編譯技術打造的全新的統一的EDA (Electronic Design Automation)框架,類似於軟體中的TensorFlow或者PyTorch,旨在為EDA設計工具提供完整的靈活可配的基礎設施,透過層層抽象的方式在一套框架中支援多種硬體設計模式。同時,CIRCT專案與MLIR相結合,做到硬體設計和軟體編譯的“同源”,實現軟體生態和硬體設計生態的一致化。目前,CIRCT專案仍處於探索階段。
CIRCT背景介紹
CIRCT[1]專案的全稱是Circuit IR Compiler and Tools,基於電路中間表示的編譯器和設計工具,將DSL/IR/Compile等軟體開發的思想應用到開源硬體設計領域(可參考知乎文章Google的『泛晶片』科技藍圖),加速硬體設計的流程,同時也尋求解決EDA工具的零碎化及封閉化的缺陷,培育統一的硬體設計社群。目前,CIRCT專案處於探索階段,主要集中於底層抽象IR的定義和開發。關於MLIR相關技術的介紹可參考往期公眾號文章MLIR多層編譯框架實現全同態加密的討論[3]。
在目前的EDA開源工具方面,有不少出色的工作,比如綜合工具Yosys,Verilog模擬工具VERILATOR, 新的硬體設計工具CHISEL, 基於Python的硬體設計工具Magma等等。但是這些開源硬體設計工具獨自成生態,彼此獨立不相容,導致了設計工具的碎片化。如果將這些設計力量統一起來打造一個統一的開源的硬體設計工具,其前景令人充滿想象。為此,Christ等人推出了基於MLIR的開源的EDA框架CIRCT,其核心思想是將軟體的編譯模式搬移到硬體設計中,頂層重用MLIR的高階抽象IR,底層重新引入新的描述電路IR(Verilog/VHDL也是描述電路的IR),打造具有模組化特點的基礎設施,能夠更好地適配到各種硬體設計中,比如CPU,GPU,CPU+xPU等。
在ASPLOS 2021大會上,Chris Lattner博士做了The Golden Age of Compiler Design in an Eraof HW/SW Co-design[4] 的演講,闡述了異構計算黃金時代的今天,也迎來了編譯器的黃金時代。文中提到了針對新硬體架構下的硬體設計工具,需打破現有的“碎片化”狀態,打造統一的硬體設計框架。
在機器學習硬體領域,向著專用化程度越來越高的方向發展,如圖1所示,這樣將硬體設計推向了兩個維度,一個是固有的處理器,如CPU及GPU等;一個是專用化的處理器,如FPGA及ASIC等。在這兩個維度中,分散著針對不同環節的開發工具,如圖2所示,而CIRCT專案目的在於統一這些零碎的工具,將其融合到一個統一的EDA框架中。從MLIR整個大的生態來看,基於MLIR的軟體框架可以涵蓋軟體開發工具,如圖2中紅線的左半部分;CIRCT可以涵蓋硬體設計工具,如圖2中紅線的右半部分。MLIR將軟體設計和硬體設計彼此關聯起來。
圖1 機器學習硬體分佈圖[6]
圖2 軟體開發工具及硬體設計工具[6]
CIRCT專案每週舉行一次例會,邀請各個領域的技術達人進行分享,努力從更多的開源專案中汲取力量,這也就是集百家工具之所長。會議記錄及演講詳見CIRCT Weekly Discussion。
CIRCT軟體框架的介紹
CIRCT軟體棧如圖6所示,這是目前構想的軟體棧,尚未開發完成。軟體棧分為兩部分,藍色部分表示的是MLIR的基礎設施,灰色部分表示的是CIRCT專案獨有的基礎設施,從圖中可以看出整個MLIR的基礎設施具有非常好的複用性,同時整個軟體棧也體現了MLIR層層lowering的特點。本文主要關注於灰色部分,灰色部分也包含目前CIRCT中的所有方言,但這些方言目前處於相對零碎的狀態,沒有統一起來。
圖3 CIRCT專案的軟體棧[6]
1、Handshake. Handshake方言主要描述獨立的非同步的資料傳輸,資料傳輸的通道基於FIFO實現。Handshake方言中定義了握手模型和控制邏輯,比如fork,join,mux及demux等,如圖4所示,透過這些抽象的Op可以表示出程式中常用到的for迴圈邏輯,如圖5所示。該項工作主要由Xilinx的研究人員開發。
圖4 Handshake方言中的主要Op[7]
圖5 Handshake表示for迴圈結構[7]
2、HIR: An MLIR-based Intermediate Representation for Hardware Accelerator Description。HIR是最新加入到CIRCT專案中,由印度理工的研究人員開發,主要在高層次描述時序電路的行為,比如帶有延遲的計算、流水線、狀態機,同時也有具體排程行為和平行計算的表示等。延遲資訊的表示可以參考圖6中的Op: hir.delay.
圖6 HIR中矩陣乘的表示[8]
3、ESI (Elastic Silicon Interconnect): 主要是表示片上和片外的互聯關係,用於實現點對點雙向的資料流通路,資料流通路中含有資料型別,資料型別支援所有MLIR中定義的型別。這些資料型別可以透過介面提供給軟體的API,high-level的開發者可以直接獲取到資料通路上的資料型別,打破了硬體描述語言中的wire-level protocol和high-level程式設計的統一。ESI專案源自於微軟,目前是CIRCT專案中的一個方言。
4、FIR-RTL選用來自Chisel編譯器的IR,是比Verilog更高一級的表達。
5、RTL/Seq/Comb RTL用於描述module和埠,Seq描述時序電路,comb描述組合電路,目前處於開發階段。
6、LLHD LLHD是受LLVM啟發開發的針對硬體設計RTL程式碼的多層級IR表示。整個LLHD工程分為行為級的表示和結構級的表示。構想的設計中前端支援目前多種硬體語言,比如Chisel,MyHDL,SystemVerilog等,後端可以加入不同硬體廠商的綜合工具,最終輸出網表級別的IR,設計的流程如圖9所示。另外,LLHD對於CIRCT的價值還在於能夠基於LLHD的IR實現模擬。在目前的實現中,LLHD的前端只支援SystemVerilog。
圖7 LLHD設計的flow[9]
CIRCT方言轉換
圖8表示了各個方言之間的轉換關係。從圖中可以看出,目前支援兩條到Verilog的轉換路徑:
圖8 各個方言之間的轉換關係[10]
1、輸入為FIR或者Handshake:具體的轉換路徑為FIR -> high FIRRTL -> mid FIRRTL -> low FIRRTL -> Verilog
2、輸入為SystemVerilog:具體的轉換路徑為SystemVerilog -> behavior LLHD -> structure LLHD ->LLHD-sim
CIRCT專案工程中test資料夾提供了檢視各個dialect之間轉換的視窗,下面以conversion和EmitVerilog兩個檔案為例介紹Handshake->FIRRTL->Verilog的轉換路徑。
1、Conversion: 測試各個方言之間的轉換。以Handshake轉換為FIRRTL程式碼為例,將Handshake中的branch操作轉換為FIRRTL的實現。圖9中上半部分程式碼為Handshake的表達,%arg0表示為輸入的資料,%arg1表示為輸入的控制邏輯,如果控制邏輯為false,返回%arg0以及對應的控制邏輯;下半部分程式碼為FIRRTL的表達。執行命令為:circt-opt-lower-handshake-to-firrtl-split-input-file test_branch.mlir
圖9 Handshake到FIRRTL的轉換
2、EmitVerilog: 將各個方言轉換為Verilog程式碼輸出。圖10表示由FIRRTL到Verilog程式碼的轉換。執行命令為:circt-translate firrtl-dialect.mlir -emit-verilog
圖10 FIRRTL到RTL程式碼的轉換
總結與思考
CIRCT專案是MLIR生態中一個非常具有啟發性的專案,將編譯技術應用到硬體設計中,顛覆了我們對傳統硬體設計工具的認識,尋求利用編譯技術統一硬體設計工具,打造EDA框架。同時,CIRCT專案也為MLIR的生態拼上了硬體設計的板塊,讓人對MLIR整個生態充滿期待,但不得不說CIRCT專案宏大,充滿挑戰,目前還處於起步階段,聚焦在底層IR的抽象表達,全線打通還有很長的路要走。當下,對於電路IR的抽象存在各種挑戰,新的IR抽象是否能夠完備地描述電路行為,是否能夠解決現有Verilog在硬體描述方便的缺陷,比如學習門檻高,程式碼跟蹤困難等侷限;未來,能否將晶片驗證及晶片設計方法學引入到CIRCT中,能否加快晶片設計和驗證的週期。CIRCT專案征途漫漫,令人期待。
由於水平有限,文中存在不足的地方請各位讀者批評指正,也歡迎大家一起參與我們的討論。
參考文獻
1、https://github.com/llvm/circt
2、https://mlir.llvm.org/
3、https://www.birentech.com/news/77.html
4、https://www.bilibili.com/video/BV1mi4y1A7ji
5、https://basicmi.github.io/AI-Chip/
6、Applying Circuit IR Compilers and Tools (CIRCT) to ML Applications, Mike Urbach, MLSys Chips And Compilers Symposium 2021
7、https://drive.google.com/file/d/1UYQAfHrzcsdXUZ93bHPTPNwrscwx89M-/view
8、https://arxiv.org/pdf/2103.00194.pdf
9、LLHD: A Multi-level Intermediate Representation for Hardware Description Languages
10、https://github.com/llvm/circt/blob/main/docs/GettingStarted.md
     往期推薦
關於壁仞科技研究院
壁仞科技研究院作為壁仞科技的前沿研究部門,旨在研究新型智慧計算系統的關鍵技術,重點關注新型架構,先進編譯技術和設計方法學,並將逐漸拓展研究方向,探索未來智慧系統的各種可能。壁仞科技研究院秉持開放的原則,將積極投入各類產學研合作並參與開源社群的建設,為相關領域的技術進步做出自己的貢獻。
掃碼關注我們

相關文章