全文 - MLIR Toy Tutorial Chapter 1: Toy Language and AST

Toy 語言

???本教程,將會借助一個玩具語言來講解,這個語言我們稱其為 Toy。Toy 是一個基于張量的語言,它允許你定義函數,執行一些數學計算,并且打印結果。做這樣的設定,是因為我們希望讓教程保持簡明;codegen 部分將會限制張量的維度小于等于2,而且Toy中的數據類型都是 64bit 浮點型的,也就是C語言中的double類型。于是,所有的值都隱式定義為double精度的,而且,所有的值都是不變的常量,也就是說,每一個操作的返回值都會是新分配的變量,再就是,重新分配變量是自動化管理的。上述說明已經足夠了,沒有什么比通讀一個示例更有助于理解 MLIR 的目的和方法了。

def main() {# Define a variable `a` with shape <2, 3>, initialized with the literal value.# The shape is inferred from the supplied literal.#定義一個形狀為2行3列的變量a,如下字面逐元素初始化。變量的形狀通過提供的初始化來推導。var a = [[1, 2, 3], [4, 5, 6]];# b is identical to a, the literal tensor is implicitly reshaped: defining new# variables is the way to reshape tensors (element count must match).#變量b與a是一樣的,這個初始化的方式是隱式地變形了:變形張量是通過定義新的變量的方式實現的,但是元素個數必須能對上。var b<2, 3> = [1, 2, 3, 4, 5, 6];# transpose() and print() are the only builtin, the following will transpose# a and b and perform an element-wise multiplication before printing the result.#transpose() 和 print() 函數是唯一內置的函數,接下來將會轉置a 和 b,并且逐元素做乘法運算,然后打印結果。print(transpose(a) * transpose(b));
}

類型檢查是通過類型推導靜態執行的;Toy 語言僅僅要求在必要的時候指定張量的類型。函數是通用的:它們的參數未指定階數,也就是說,我們知道函數的每個參數是一個張量,但是我們不知道它們的維度。為每一個新發現的調用點的簽名,都被特化處理。讓我們看一遍之前的示例代碼,這次我們增加了一個 用戶自定義的函數:

# User defined generic function that operates on unknown shaped arguments.
# 用戶自定義的通用函數,它作用在未知形狀的參數上
def multiply_transpose(a, b) {return transpose(a) * transpose(b);
}def main() {# Define a variable `a` with shape <2, 3>, initialized with the literal value.var a = [[1, 2, 3], [4, 5, 6]];var b<2, 3> = [1, 2, 3, 4, 5, 6];# This call will specialize `multiply_transpose` with <2, 3> for both# arguments and deduce a return type of <3, 2> in initialization of `c`.# 這個調用將會給函數 multiply_transpose 指定兩個形狀為2行3列的張量作為參數,并且推導出返回值c的形狀為3行2列,按此做初始化。var c = multiply_transpose(a, b);# A second call to `multiply_transpose` with <2, 3> for both arguments will# reuse the previously specialized and inferred version and return <3, 2>.#基本同上var d = multiply_transpose(b, a);# A new call with <3, 2> (instead of <2, 3>) for both dimensions will# trigger another specialization of `multiply_transpose`.# 這里是一個新的調用,入參的形狀變為3行2列,而不再是2行3列,這將會觸發特化另一新的 multiply_transpose函數的實現。var e = multiply_transpose(c, d);# Finally, calling into `multiply_transpose` with incompatible shapes# (<2, 3> and <3, 2>) will trigger a shape inference error.# 最后,調用對函數 multiply_transpose 做一次參數形狀不兼容的調用,這將會觸發一個形狀推導錯誤。var f = multiply_transpose(a, c);
}

dump AST

從上邊的代碼生成的 AST 是相當簡單的。這里對它做了轉儲:

Module:Function Proto 'multiply_transpose' @test/Examples/Toy/Ch1/ast.toy:4:1Params: [a, b]Block {ReturnBinOp: * @test/Examples/Toy/Ch1/ast.toy:5:25Call 'transpose' [ @test/Examples/Toy/Ch1/ast.toy:5:10var: a @test/Examples/Toy/Ch1/ast.toy:5:20]Call 'transpose' [ @test/Examples/Toy/Ch1/ast.toy:5:25var: b @test/Examples/Toy/Ch1/ast.toy:5:35]} // BlockFunction Proto 'main' @test/Examples/Toy/Ch1/ast.toy:8:1Params: []Block {VarDecl a<> @test/Examples/Toy/Ch1/ast.toy:11:3Literal: <2, 3>[ <3>[ 1.000000e+00, 2.000000e+00, 3.000000e+00], <3>[ 4.000000e+00, 5.000000e+00, 6.000000e+00]] @test/Examples/Toy/Ch1/ast.toy:11:11VarDecl b<2, 3> @test/Examples/Toy/Ch1/ast.toy:15:3Literal: <6>[ 1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, 5.000000e+00, 6.000000e+00] @test/Examples/Toy/Ch1/ast.toy:15:17VarDecl c<> @test/Examples/Toy/Ch1/ast.toy:19:3Call 'multiply_transpose' [ @test/Examples/Toy/Ch1/ast.toy:19:11var: a @test/Examples/Toy/Ch1/ast.toy:19:30var: b @test/Examples/Toy/Ch1/ast.toy:19:33]VarDecl d<> @test/Examples/Toy/Ch1/ast.toy:22:3Call 'multiply_transpose' [ @test/Examples/Toy/Ch1/ast.toy:22:11var: b @test/Examples/Toy/Ch1/ast.toy:22:30var: a @test/Examples/Toy/Ch1/ast.toy:22:33]VarDecl e<> @test/Examples/Toy/Ch1/ast.toy:25:3Call 'multiply_transpose' [ @test/Examples/Toy/Ch1/ast.toy:25:11var: c @test/Examples/Toy/Ch1/ast.toy:25:30var: d @test/Examples/Toy/Ch1/ast.toy:25:33]VarDecl f<> @test/Examples/Toy/Ch1/ast.toy:28:3Call 'multiply_transpose' [ @test/Examples/Toy/Ch1/ast.toy:28:11var: a @test/Examples/Toy/Ch1/ast.toy:28:30var: c @test/Examples/Toy/Ch1/ast.toy:28:33]} // Block

可以在文件夾 examples/toy/Ch1/ 中的示例代碼上重新生成這個AST。請嘗試運行:

path/to/BUILD/bin/toyc-ch1 test/Examples/Toy/Ch1/ast.toy -emit=ast

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

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

相關文章

排序復習_代碼純享

頭文件 #pragma once #include<iostream> #include<vector> #include<utility> using std::vector; using std::cout; using std::cin; using std::endl; using std::swap;//插入排序 //1、直接插入排序&#xff08;穩定&#xff09; void InsertSort(vecto…

CSS語言的雙向鏈表

CSS語言的雙向鏈表 引言 在計算機科學中&#xff0c;數據結構是一個極為重要的概念&#xff0c;而鏈表則是最常見的數據結構之一。鏈表可以分為單向鏈表和雙向鏈表&#xff0c;其中雙向鏈表因其靈活性和高效性而受到廣泛應用。在前端開發的領域&#xff0c;尤其是CSS&#xf…

簡單理解機器學習中top_k、top_p、temperature三個參數的作用

AI系列文章&#xff1a; AWS AI認證考試中經常提及幾個重要的工具介紹 簡單理解機器學習中top_k、top_p、temperature三個參數的作用 用Deepseek Kimi 快速生成高質量的ppt 在機器學習中&#xff0c;top_k、top_p 和 temperature 是用于控制生成模型&#xff08;如語言模型…

紅寶書第十三講:詳解JavaScript核心對象:Array、Object、Date、RegExp

紅寶書第十三講&#xff1a;詳解JavaScript核心對象&#xff1a;Array、Object、Date、RegExp 資料取自《JavaScript高級程序設計&#xff08;第5版&#xff09;》。 查看總目錄&#xff1a;紅寶書學習大綱 一、Object&#xff1a;萬物皆對象的“盒子” Object是JavaScript中…

昆侖技術重構AI大模型落地范式,長期作“加法”迎來國產生態化“拐點”

作者 | 曾響鈴 文 | 響鈴說 DeepSeek的爆火&#xff0c;在業內迅速掀起了一場國產化的變革。“國產大模型國產算力”軟硬協同的范式正在被重構&#xff0c;AI產業國產化的含金量持續提升&#xff0c;越來越多的企業在這一趨勢下加速走上數智化轉型路徑。 其中&#xff0c;以…

原開源鴻蒙倉庫停止更新

2月24日&#xff0c;gitee 上的開源鴻蒙組織&#xff0c;所有代碼停止更新&#xff0c;查看代碼倉顯示已關閉&#xff0c;不少小伙伴以為停止更新了&#xff0c;發生了什么&#xff1f; 原因很簡單&#xff0c;所有代碼倉遷移至 Gitcode&#xff0c;至于為什么改用 Gitcode&…

Spring Boot框架中常用注解

以下是Spring Boot框架中常用注解的詳細說明&#xff0c;包括名稱、用途、用法、使用位置及擴展示例&#xff0c;按功能模塊分類整理&#xff1a; 一、核心啟動與配置注解 1. SpringBootApplication 用途&#xff1a;主啟動類注解&#xff0c;整合了 Configuration、EnableAu…

Azure Delta Lake、Databricks和Event Hubs實現實時欺詐檢測

設計Azure云架構方案實現Azure Delta Lake和Azure Databricks&#xff0c;結合 Azure Event Hubs/Kafka 攝入實時數據&#xff0c;通過 Delta Lake 實現 Exactly-Once 語義&#xff0c;實時欺詐檢測&#xff08;流數據寫入 Delta Lake&#xff0c;批處理模型實時更新&#xff0…

車載以太網網絡測試 -23【TCPUDP通信示例】

1 摘要 在車載通信場景中&#xff0c;TCP以及UDP的通信可以用于多種應用&#xff0c;例如車輛狀態監控、遠程控制、數據采集等。以下是詳細的代碼示例&#xff0c;展示了如何使用Python實現簡單的TCP客戶端與服務端通信以及簡單的UDP客戶端與服務端通信&#xff0c;并模擬了車…

SpringBoot大學生競賽管理系統設計與實現

一個用于管理大學生競賽報名、信息查詢與競賽管理的系統&#xff0c;采用了現代化的SpringBoot框架進行開發。該系統的主要功能包括學生信息管理、教師信息管理、競賽報名審核、競賽信息管理等模塊&#xff0c;適用于學校或教育機構進行競賽活動的組織與管理。系統界面簡潔&…

深入解析libsunrpc:構建分布式系統的核心RPC庫

深入解析libsunrpc&#xff1a;構建分布式系統的核心RPC庫 引言 在分布式系統開發中&#xff0c;遠程過程調用&#xff08;Remote Procedure Call, RPC&#xff09; 是連接不同節點、實現跨網絡服務調用的關鍵技術。作為SUN公司開源的經典RPC實現&#xff0c;libsunrpc 憑借其…

MinIO搭建部署

1、命令行安裝 訪問monio官網下載應用程序 # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250228095516.0.0-1.x86_64.rpm -O minio.rpm # sudo dnf install minio.rpm # mkdir ~/minio # minio server ~/minio --console-address :90012、dock…

Linux修改SSH端口號

我這里那RedHat系列的操作系統舉例,修改SSH端口號 修改SSH配置文件:/etc/ssh/sshd_config,將端口號修改為2222.vim /etc/ssh/sshd_config重啟SSH服務systemctl restart sshd# 如果是比較舊的OS,使用下面的命令重啟 service ssh restart驗證端口更改是否成功netstat -tulnp …

【嵌入式Linux】基于ArmLinux的智能垃圾分類系統項目

目錄 1. 功能需求2. Python基礎2.1 特點2.2 Python基礎知識2.3 dict嵌套簡單說明 3. C語言調用Python3.1 搭建編譯環境3.2 直接調用python語句3.3 調用無參python函數3.4 調用有參python函數 4. 阿里云垃圾識別方案4.1 接入阿里云4.2 C語言調用阿里云Python接口 5. 香橙派使用攝…

【商城實戰(63)】配送區域與運費設置全解析

【商城實戰】專欄重磅來襲&#xff01;這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建&#xff0c;運用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用戶、商品、訂單等核心模塊開發&#xff0c;再到性能優化、安全加固、多端適配&#xf…

字節跳動實習生主導開發強化學習算法,助力大語言模型性能突破

目錄 禹棋贏的背景與成就 主要成就 DAPO算法的技術細節 算法優勢 禹棋贏的研究歷程 關鍵時間節點 字節跳動的“Top Seed人才計劃” 計劃特點 小編總結 在大模型時代&#xff0c;經驗不再是唯一的衡量標準&#xff0c;好奇心、執行力和對新技術的敏銳洞察力成為推動技術…

Rust + 時序數據庫 TDengine:打造高性能時序數據處理利器

引言&#xff1a;為什么選擇 TDengine 與 Rust&#xff1f; TDengine 是一款專為物聯網、車聯網、工業互聯網等時序數據場景優化設計的開源時序數據庫&#xff0c;支持高并發寫入、高效查詢及流式計算&#xff0c;通過“一個數據采集點一張表”與“超級表”的概念顯著提升性能…

使用LangChain實現基于LLM和RAG的PDF問答系統

目錄 前言一.大語言模型(LLM)1. 什么是LLM&#xff1f;2. LLM 的能力與特點 二、增強檢索生成(RAG)三. 什么是 LangChain&#xff1f;1. LangChain 的核心功能2. LangChain 的優勢3. LangChain 的應用場景4. 總結 四.使用 LangChain 實現基于 PDF 的問答系統 前言 本文將介紹 …

群核科技持續虧損近18億:營銷費用偏高,市場份額優勢面臨挑戰

《港灣商業觀察》施子夫 2025年開年&#xff0c;DeepSeek的爆火讓大眾將目光聚焦到了“杭州六小龍”。其中&#xff0c;杭州群核信息技術有限公司&#xff08;以下簡稱&#xff0c;群核科技&#xff09;因系“六小龍”中首家啟動上市的公司而被外界更多關注。 在此次遞表港交…

java版嘎嘎快充玉陽軟件互聯互通中電聯云快充協議充電樁鐵塔協議汽車單車一體充電系統源碼uniapp

演示&#xff1a; 微信小程序&#xff1a;嘎嘎快充 http://server.s34.cn:1888/ 系統管理員 admin/123456 運營管理員 yyadmin/Yyadmin2024 運營商 operator/operator2024 系統特色&#xff1a; 多商戶、汽車單車一體、互聯互通、移動管理端&#xff08;開發中&#xff09; 另…