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