多级中间表示概述MLIR
多級中間表示概述MLIR
MLIR項目是一種構建可重用和可擴展的編譯器基礎結構的新穎方法。MLIR旨在解決軟件碎片,改善異構硬件的編譯,顯著降低構建特定于域的編譯器的成本以及幫助將現(xiàn)有編譯器連接在一起的問題。
要引用MLIR,請使用this Arxiv publication 。
更多資源
有關MLIR的更多信息,請參見:
? LLVM論壇的MLIR部分中有 任何問題。
? LLVM不和諧 服務器的MLIR通道上的實時討論 。
? 以前的 talks 。
另請參閱 TensorFlow MLIR SIG ,該組織每周組織一次有關MLIR的公開“開放設計會議”。如果想討論特定主題或有疑問,請將其添加到 議程文檔中 。有關如何加入會議的詳細信息,請參閱議程文檔。
MLIR是做什么用的?
MLIR旨在成為一種混合IR,它可以在統(tǒng)一的基礎架構中支持多種不同的需求。例如,這包括:
? 表示數(shù)據(jù)流圖的能力(例如在TensorFlow中),包括動態(tài)形狀,用戶可擴展的op生態(tài)系統(tǒng),TensorFlow變量等。
? 通常在此類圖上進行優(yōu)化和轉(zhuǎn)換(例如在Grappler中)。
? 以適合于優(yōu)化的形式表示ML操作的內(nèi)核。
? 能夠承載跨內(nèi)核的高性能計算風格的循環(huán)優(yōu)化(融合,循環(huán)交換,平鋪等),并能夠轉(zhuǎn)換數(shù)據(jù)的內(nèi)存布局。
? 代碼生成“降低”轉(zhuǎn)換,例如DMA插入,顯式緩存管理,內(nèi)存平鋪以及針對1D和2D寄存器體系結構的矢量化。
? 表示特定于目標的操作的能力,例如特定于加速器的高級操作。
? 在深度學習圖上進行量化和其它圖轉(zhuǎn)換。
MLIR是一種常見的IR,也支持特定于硬件的操作。因此,對MLIR周圍基礎架構的任何投資(例如,編譯器對其進行的工作都應通過)應產(chǎn)生良好的回報;許多目標可以使用該基礎架構,并從中受益。
MLIR是強大的表示形式,但也有非目標。不嘗試支持低級機器代碼生成算法(例如寄存器分配和指令調(diào)度)。更適合較低級別的優(yōu)化器(例如LLVM)。另外,不希望MLIR成為最終用戶自己將內(nèi)核編寫為內(nèi)核的源語言(類似于CUDA C ++)。另一方面,MLIR提供了代表任何此類DSL并將其集成到生態(tài)系統(tǒng)中。
編譯器基礎架構
在構建MLIR時,受益于從構建其它IR(LLVM IR,XLA HLO和Swift SIL)獲得的經(jīng)驗。MLIR框架鼓勵現(xiàn)有的最佳實踐,例如編寫和維護IR規(guī)范,構建IR驗證程序,提供將MLIR文件轉(zhuǎn)儲和解析為文本,使用FileCheck 工具編寫廣泛的單元測試 以及將基礎結構構建為一組的能力。可以以新方式組合的模塊化庫。
其它內(nèi)容已經(jīng)以微妙的方式整合到設計中。例如,LLVM具有非顯而易見的設計錯誤,這些錯誤阻止多線程編譯器同時處理LLVM模塊中的多個功能。MLIR通過限制SSA范圍以減少use-def鏈,并通過用explicit替換跨函數(shù)引用來解決這些問題 symbol reference 。
總結
以上是生活随笔為你收集整理的多级中间表示概述MLIR的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “ compiler-rt”运行时run
- 下一篇: Pass Infrastructure基