全文 - MLIR Toy Tutorial Chapter 3 :高層次上語言特定的分析和變換

?使用 C++ 風格的模式匹配和重寫來優化轉置運算
?使用 DRR 優化 reshape 運算

?
???????? 創建一種貼近輸入語言的語義表示的方言,可以在 MLIR 中分析、變換和優化,這些過程中需要用到高級語言的信息,而且通常是在語言的 AST 上執行的這些過程。
?例如,為了執行template 實例化,在clang 程序中有一個相當厚實的機制。
?
? ? ? ? 我們將編譯器變換分為兩大類:局部的和全局的。在本章中,我們聚焦怎么利用Toy Dialect 和它的高層次語義來執行局部模式匹配變換,這在 LLVM 中是比較難實現的。
?為此,我們使用了 MLIR的 Generic DAG Rewriter。
?
? ? ? ? 這里有兩個方法可以用于實現模式匹配變換:1,命令式的,C++模式匹配和重寫,2,生命式的,基于規則的模式匹配和重寫,這是使用 表格驅動的 Declarative Rewrite Rules(DRR)。
?注意,使用DRR的話,要求 operations 是使用 ODS 定義的,如第2章中所述。
?


使用 C++ 風格的模式匹配和重寫來優化轉置運算


? ? ? ? 讓我們先一起研究一個簡單的模式,并且嘗試去消除一個由兩個可以抵消的轉置組成的序列:transpose(transpose(X)) -> X。這里是對應的 Toy 示例:
?

 def transpose_transpose(x) {return transpose(transpose(x));
}

? 它對應于如下的 Toy IR:

  toy.func @transpose_transpose(%arg0: tensor<*xf64>) -> tensor<*xf64> {%0 = toy.transpose(%arg0 : tensor<*xf64>) to tensor<*xf64>%1 = toy.transpose(%0 : tensor<*xf64>) to tensor<*xf64>toy.return %1 : tensor<*xf64>
}

這個變換的好示例,在Toy IR 中做匹配非常容易,但是,在 LLVM IR 中解決這個問題非常困難。例如,當前的 Clang 無法優化掉臨時數組,并且單純的轉置的計算,表示為如下這樣的循環:

#define N 100
#define M 100void sink(void *);
void double_transpose(int A[N][M]) {int B[M][N];for(int i = 0; i < N; ++i) {for(int j = 0; j < M; ++j) {B[j][i] = A[i][j];}}for(int i = 0; i < N; ++i) {for(int j = 0; j < M; ++j) {A[i][j] = B[j][i];}}sink(A);
}

? ? ? ? 對于一個簡單實現重寫的 C++ 方法,涉及到在 IR 中匹配一個類樹的模式,并且用一組不同的 operations 集合來替代它,我們可以通過實現一個 RewritePattern來插入到 MLIR Canonicalizer 中。
?
?

未完待續。。。


?
?使用 DRR 優化 reshape 運算
?
?
?
?
?
?
?
?
?

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

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

相關文章

js逆向入門圖靈爬蟲練習平臺 第四題學習

(base64解碼&#xff09;地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvNC8 先找到請求接口帶有加密參數&#xff1a; 全局搜索Sign,找到參數生成位置 看到這就一目了然塞&#xff0c;知道參數是怎么構造生成的&#xff0c;不知道這段 JavaScript 代碼沒關系…

【Flask開發】嘿馬文學web完整flask項目第2篇:2.用戶認證,Json Web Token(JWT)【附代碼文檔】

教程總體簡介&#xff1a;2. 目標 1.1產品與開發 1.2環境配置 1.3 運行方式 1.4目錄說明 1.5數據庫設計 2.用戶認證 Json Web Token(JWT) 3.書架 4.1分類列表 5.搜索 5.3搜索-精準&高匹配&推薦 6.小說 6.4推薦-同類熱門推薦 7.瀏覽記錄 8.1配置-閱讀偏好 8.配置 9.1項目…

[dp5_多狀態dp] 按摩師 | 打家劫舍 II | 刪除并獲得點數 | 粉刷房子

目錄 1.面試題 17.16. 按摩師 題解 2.打家劫舍 II 題解 3.刪除并獲得點數 題解 4.粉刷房子 題解 一定要有這樣的能力&#xff0c;碰到一個新題的時候&#xff0c;可以往之前做過的題方向靠&#xff01; 打家劫舍問題模型: 不能選擇相鄰的兩個數&#xff0c;并且要最終…

基于javaweb的SSM羽毛球會員俱樂部系統場館課程運動設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

windows下git bash安裝SDKMan報錯Looking for unzip...Not found

需要在jdk8和jdk17兩個版本切換。最簡單的是通過手動切換&#xff0c;但切換過程太繁瑣&#xff0c;修改環境變量&#xff0c;達到切換目的。于是嘗試其它解決方案&#xff0c;最終確實使用sdkman工具。 確保安裝了git Git - Downloading Package 記住安裝的路徑&#xff0c;…

rnn的音頻降噪背后技術原理

rnniose: 這個演示展示了 RNNoise 項目&#xff0c;說明了如何將深度學習應用于噪聲抑制。其核心理念是將經典的信號處理方法與深度學習結合&#xff0c;打造一個小巧、快速的實時噪聲抑制算法。它不需要昂貴的 GPU —— 在樹莓派上就能輕松運行。 相比傳統的噪聲抑制系統&…

劍指Offer(數據結構與算法面試題精講)C++版——day3

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day3 題目一&#xff1a;數組中和為0的3個數字題目二&#xff1a;和大于或等于k的最短子數組題目三&#xff1a;乘積小于k的子數組 題目一&#xff1a;數組中和為0的3個數字 前面我們提到&#xff0c;在一個排…

全新UI好看404頁面源碼

源碼介紹 全新UI好看404頁面源碼,源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c;雙擊html文件可以本地運行 效果預覽 源碼獲取 全新UI好看404頁面源碼

遞歸典例---漢諾塔

https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 個盤子&#xff0c;通過 b&#xff0c;從 a 移動到 …

php的高速緩存

部署方法 在我們安裝的nginx中默認不支持memc和srcache功能&#xff0c;需要借助第三方模塊來讓nginx支持此功能。 tar zxf srcache-nginx-module-0.33.tar.gz tar zxf memc-nginx-module-0.20.tar.gz 下載這倆個模塊&#xff0c;然后編譯安裝的時候加進去 編譯安裝完成之后…

視頻設備軌跡回放平臺EasyCVR打造視頻智能融合新平臺,驅動智慧機場邁向數字新時代

一、行業背景? 隨著 5G、AI、物聯網、大數據等前沿技術的不斷更新換代&#xff0c;交通行業進入數字化轉型的高速發展時期。航空業作為交通領域的重要部分&#xff0c;數字化進程從追求速度往注重質量的轉變。但機場在數字化轉型中面臨許多嚴峻挑戰&#xff0c;如現有運營模式…

【論文閱讀】Anchor Graph Network for Incomplete Multiview Clustering

摘要 近年來&#xff0c;不完全多視圖聚類&#xff08;IMVC&#xff09;受到廣泛關注。然而&#xff0c;現有研究仍然存在以下幾個不足之處&#xff1a;1) 部分方法忽略了樣本對在全局結構分布中的關聯性&#xff1b;2) 許多方法計算成本較高&#xff0c;因此無法應用于大規模…

15. 遠程服務器運行jemter的GUI方式

1. 問題 在 linux 服務器或遠程服務器上&#xff0c;安裝 Jmeter&#xff0c;打不開 Jmeter 的 GUI 界面。 環境&#xff1a; linux 服務器mac 電腦 需求&#xff1a;在遠程服務器中&#xff0c;啟動 jmeter&#xff08;./bin/jmeter &&#xff09;后&#xff0c;在 ma…

Ansible:playbook的高級用法

文章目錄 1. handlers與notify2. tags組件3. playbook中使用變量3.1使用 setup 模塊中變量3.2在playbook 命令行中定義變量3.3在playbook文件中定義變量3.4使用變量文件3.5主機清單文件中定義變量主機變量組&#xff08;公共&#xff09;變量 1. handlers與notify Handlers&am…

什么是msvcp140.dll?msvcp140.dll丟失的解決方法又有哪些?

msvcp140.dll 是 Microsoft Visual C Redistributable 的核心動態鏈接庫文件&#xff0c;許多軟件和游戲依賴它來運行。當系統提示“msvcp140.dll丟失”時&#xff0c;意味著該文件無法被正確加載&#xff0c;導致程序崩潰或無法啟動。本文將提供最全面的 msvcp140.dll丟失的解…

(九)圖形管線

一圖說明問題 頂點數據->頂點著色器->細分著色器->幾何著色器->光柵化->片元著色器->顏色混合 創建圖形管線函數放在后面位置 void MyApplication::initVulkan() { createInstance(); createSurface(); pickPhysicalDevice(); createLogicalDevice(); cre…

《inZOI(云族裔)》50+MOD整合包

載具 RebelCore - 年齡和時間 mod啟動器 優化補丁 去除霧氣 坦克模型 菜單 前置 跳過啟動 更好性能 等 共計50MOD整合 在游戲的世界里&#xff0c;追求更豐富、更優質的體驗是玩家們永恒的主題。RebelCore 這款游戲通過精心打造的 50MOD 整合&#xff0c;為玩家帶來了前所未有的…

國家天文臺攜手阿里云,發布國際首個太陽大模型“金烏”

2025年4月1日&#xff0c;中國科學院國家天文臺與阿里云共同宣布推出全球首個太陽物理大模型“金烏”&#xff0c;在太陽活動預測領域實現顛覆性突破——其針對破壞性最強的M5級太陽耀斑預報準確率高達91%&#xff0c;遠超傳統數值模型&#xff0c;標志著人類對太陽的認知邁入“…

U盤實現——BOT 常用命令

文章目錄 U盤實現——BOT 常用命令命令格式CBWCSW數據傳輸條件命令傳輸數據傳輸狀態傳輸命令匯總INQUIRY Command:12h數據格式抓包READ FORMAT CAPACITIES Command: 23h數據格式抓包READ CAPACITY Command: 25h數據格式抓包TEST UNIT READY Command: 00h數據格式抓包WRITE(10) …

【Axure元件分享】月份范圍選擇器

Axure月份范圍選擇器是一個月份范圍下拉篩選元件&#xff0c;支持月份范圍定義選擇。組件自動加載系統當前年月份作為默認值&#xff0c;用戶可通過箭頭圖標或鍵盤快捷鍵快速切換年份月份&#xff0c;其樣式支持高度定制&#xff0c;包括顏色主題、字體尺寸及交互反饋&#xff…