MLIR Introduction

簡介

MLIR 項目是一個構建可重用和可擴展編譯器基礎設施創新項目,旨在解決軟件碎片化問題,顯著降低構建特定領域編譯器的成本。

基于MLIR,可以實現:

  • 數據流圖表達(如TensorFlow),包含dynamic shape,用戶擴展op等;
  • 數據流圖的優化和變換,如Grappler;
  • 跨Kernel實現HPC風格的循環優化(如fusion,interchange,tiling等),數據在內存中的layout變換;
  • 針對1D(如CPU)和2D(如GPU)寄存器架構的代碼生成“lowering”轉換,如DMA指令插入,顯式cache管理,內存Tiling,矢量化;
  • 表達特定硬件后端的的op,如加速器的高級操作;
  • 深度學習圖變換,如量化等;
  • 多面體原語;
  • 硬件綜合工具。

常用術語

語言

Dialect

一組擴展MLIR系統的功能。Dialect創建了一個唯一的namespace,包含operations,attributes,types。可以把MLIR看作一種meta-IR,所有的Dialects都是MLIR的一部分。使用dialect而不是language是想強調Dialect不是一個獨立的IR。

轉換

Translation

將非MLIR的形式轉換為MLIR的形式(Import),或者反之(Export)。

Export

將MLIR形式轉換為語義等價的外部IR的形式(如LLVM IR)。

Import

將外部IR(如Torch IR)轉換為語義等價的MLIR的形式。

Conversion

將代碼從一種Dialect表示轉換為語義等價的同一種(intra-dialect)或另一種Dialect(inter-dialect)表示。在MLIR的上下文中,conversion表示MLIR內的轉換,既不轉換到MLIR Dialect以外的表示(如LLVM IR),否則是Translation。

Round-trip

將源格式轉換為目標格式,再轉換回源格式的過程。

Lowering

將高級IR表達的operation轉換為語義等價的低級IR表達。在MLIR中通常通過dialect conversion來實現。

Legalization

將operations轉換為符合轉換目標所設定要求的語義等價表示的過程。通常是Lowering中的一部分。

Transitive lowering

一種A->B->C的lowering方式,多個模式(patterns)需要按順序應用,以將一個對target非法的操作完全轉換為一組合法操作。

CSE (Constant Subexpression Elimination)

公共子表達式消除,消除不可達的代碼和值未被使用的表達式。

DRR(Declarative Rewrite Rule)

聲明式重寫規則。在編譯時,這些規則會被擴展成等價的mlir::RewritePattern子類。

結構

Operation (op)

MLIR代碼單元。Operations是MLIR所有代碼和計算的構建單元。高度支持擴展(沒有固定的operation列表,可以靈活自定義),支持應用特定語義。

在MLIR中,有2個主要的Operation相關的類:Operation和Op。Operation是一個對用戶透明的實例,表達了Operation實例的通用API。Op是派生Operation(如ConstantOp)的基類,派生類可以為每個具體的操作提供特定的方法和屬性,同時,Op也是Operation的一個智能指針,兩個類之間可以靈活的互相轉換。

Module

一個Operation,包含一個Region,Region中包含一個Block,Block包含一個或多個Operations。提供了MLIR Operations的組織結構,是IR中的top-level Operation。

Function

一個有名的Operaiton,包含一個Region。Region可以隱式捕獲function外的值,所有外部引用必須使用function arguments或者attributes的形式,建立一個符號鏈接。

Region

一個Blocks組成的CFG。

Block(Basic Block)

一個沒有控制流的順序Operation列表。

Terminator operation

終止1個Block的Operation,有2個作用:

  • 結束當前塊的執行:終止操作明確地表示當前塊的結束,防止代碼繼續執行到下一個操作。

  • 控制程序的下一步行為:終止操作通常會決定程序的下一步行為,例如:

  1. 跳轉到另一個塊:使用 br(分支)操作跳轉到另一個塊。
  2. 返回函數結果:使用 return 操作返回函數的結果。
  3. 拋出異常。

參考資料:

MLIR

Glossary - MLIR

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94314.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[找出字符串中第一個匹配項的下標]

代碼思路分析: 1. 邊界情況處理 代碼中沒有顯式處理以下邊界情況,但邏輯已隱含支持: needle 為空字符串:應返回 0(但題目通常保證 needle 非空)。haystack 比 needle 短:直接返回 -1&#xff08…

深入剖析RT-Thread串口驅動:基于STM32H750的FinSH Shell全鏈路Trace分析與實戰解密(上)

0. 概述 這是cherryusb代碼trace分析系列文章之七。 RT-Thread串口驅動框架與FinSH Shell運行機制深度解析:針對STM32H750 ART-PI平臺,本文獨辟蹊徑采用創新的代碼trace分析方法,破解龐大串口框架下的復雜運行邏輯。通過精確trace日志與drv_u…

Python與C++通信教程:C++打包dll,供Python調用(1)

目錄 1,新建一個工程 math_functions.cpp內容: 先編譯一下看是否可以正常運行: 2,編譯成dll,并用Python調用 有兩種方式: 命令 1(使用靜態鏈接): 可移植性: 命令 2(動態鏈接): 可移植性: 這里我使用的是靜態鏈接的方式: python調用實例 test_dll.py 1,…

編程與數學 03-002 計算機網絡 19_網絡新技術研究

編程與數學 03-002 計算機網絡 19_網絡新技術研究一、軟件定義網絡(SDN)(一)SDN的基本原理與架構(二)SDN的應用場景與優勢二、網絡功能虛擬化(NFV)(一)NFV的概…

uniapp 跨端開發

一、創建uniapp項目 1. 項目架構2. 初始化項目3. pages.json 和 tabBar 案例4. uni-app和原生小程序開發區別5. 用命令行創建uni-app項目 官網鏈接:https://uniapp.dcloud.net.cn/quickstart-cli.html#創建uni-app6. 用vscode開發uni-app在uni-app中只有manifest.js…

區塊鏈支付技術的核心原理

區塊鏈支付利用分布式賬本技術(DLT)實現點對點的價值轉移,無需傳統銀行或支付網關的中介。核心特點是去中心化、透明、可追溯。? 基本流程:1. 用戶發起交易:通過加密貨幣錢包發送支付請求(例如用ETH支付&a…

linux中 多進程 導致cuda錯誤的問題解決

問題總結與解決方案 核心問題 在使用 Linux 系統時,多進程并行計算中加載模型到 GPU 時出現錯誤:_MODEL SentenceTransformer( model_path, device "cuda" if torch.cuda.is_available() else "cpu" )根本原因: CUDA 上…

智能感知的新入口:AIGC 與低延遲視頻通路的深度融合

?? 引言:AIGC,正在重構視覺智能的“生成邏輯” AI生成內容(AIGC)正在從“內容創作工具”躍升為計算機視覺系統的新引擎。它不再只是“文生圖”、“圖生文”的演示技術,而是實實在在地改變著我們構建、處理和理解視覺…

Ubuntu 內網多臺服務器時間同步方案(適用于臨時能上外網的環境)

哎,最近項目是運行在內網環境下的,出現了由于時間不同步導致的bug。一般來講,幾臺服務器的時間不一致,會帶來很多問題,比如日志時間對不上、分布式服務出現異常,等等。項目上現在有三臺服務器,其…

延長電池壽命的低Iq技術

本文章是筆者整理的備忘筆記。希望在幫助自己溫習避免遺忘的同時,也能幫助其他需要參考的朋友。如有謬誤,歡迎大家進行指正。一、概述隨著電池供電型應用的激增,人們對質優價廉的電池和電池包的需求持續猛漲。電池制造商們不斷采用新的化學物…

QT 如何實現enum與字符串的互轉

將enum中定義的枚舉值,以字符串的形式寫入文件,同時也能從字符串轉為枚舉值。舉例說明: ColorSelector中的Colors枚舉,我們希望 kColorRed 這個寫入到本地文件時,可以直接保存“kColorRed”,而非kColorRed對…

SLAM卷不動了,機器人還有哪些方向能做?

關注gongzhonghao【CVPR頂會精選】眾所周知,機器人因復雜環境適應性差、硬件部署成本高,對高效泛化一直需求迫切。再加上多傳感器協同難題、真實場景數據獲取不易,當下對遷移學習 機器人智能融合的研究也就更熱烈了。不過顯然,這…

H.266 vs H.265/AV1/H.264:從工程落地看下一代視頻系統的技術演進

一、背景:編解碼標準演進背后的技術驅動 視頻編碼標準的更迭,從未只是一次簡單的技術升級,而是對碼率壓縮效率、編碼復雜度與畫質質量三者之間平衡點的持續探索。在 H.264 成為全平臺事實標準的十余年里,它成功支撐了 SD 至 1080…

Javascript面試題及詳細答案150道之(031-045)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

Git如何同步本地與遠程倉庫并解決沖突

在團隊協作開發中,保持本地倉庫與遠程倉庫同步是至關重要的。本文將詳細介紹如何使用 Git 更新本地倉庫至最新遠程版本,并深入解析沖突的產生原因及解決方法。一、同步本地與遠程倉庫1. 檢查遠程倉庫配置首先,確保本地倉庫已正確關聯遠程倉庫…

Hadoop MapReduce 3.3.4 講解~

?博客主頁: https://blog.csdn.net/m0_63815035?typeblog 💗《博客內容》:.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 📢博客專欄: https://blog.csdn.net/m0_63815035/cat…

1、【數學】【硬幣悖論】旋轉硬幣問題

問題描述: 兩個相同的硬幣,半徑都是 rrr。一個硬幣(稱為“動硬幣”)沿著另一個固定不動的硬幣(“靜硬幣”)的外邊緣無滑動地滾動一圈,回到起始位置。問:動硬幣自身旋轉了幾圈&#x…

【盤古100Pro+開發板實驗例程】FPGA學習 | PCIE 通信測試實驗例程

本原創文章由深圳市小眼睛科技有限公司創作,版權歸本公司所有,如需轉載,需授權并注明出處(www.meyesemi.com) 1. 實驗簡介 實驗目的: 完成 PCIE 通信測試。 實驗環境: Window11 PDS2022.2-SP6.4 硬件環…

基于高階累積量的調制識別

基于高階累積量的調制識別是一種利用信號的高階統計特性來識別不同調制方式的方法。 1. 基本原理 高階累積量(Higher-Order Cumulants)是信號處理中的一個重要工具,能夠捕捉信號的非高斯特性。與高階矩相比,高階累積量對高斯噪聲具…

Java常用數據結構入門

Java常用數據結構入門 前言 數據結構是程序設計中的基礎,掌握常用數據結構能幫助你更高效地解決問題。本文面向Java初學者,介紹Java中常用的數據結構及其基本使用方法。 1. 數組 (Array) 數組是最基礎的數據結構,可以存儲固定大小的同類型…