TVM TIR 各种Node类型举例

深度学习编译器前端Bug解析:LLM辅助定位与工程实践 深度学习编译器作为连接高层模型与底层硬件的关键桥梁,承担着计算图解析、类型推断和IR生成等核心任务。然而,前端阶段(如TVM、MLIR、XLA中的模型导入与算子解析)常因动态Shape、Layout转换或算子覆盖不全等问题引发隐蔽性极强的Bug,导致模型在训练框架中正常、编译后却报错或结果异常。传统排查依赖人工阅读源码,效率低下。基于LLM(大语言模型)的辅助分析技术,通过自动化理解报错上下文、聚类根因假设,为定位复杂前端Bug提供了新路径,在深度学习编译器的开发调试、模型迁移部署及兼容性验证等场景中展现出 阅读详情

TVM TIR中有很多类型的Node。这里收录了全部可打印的类型:

  • StmtNode
  • AnyNode
  • PrimExprNode
  • TypeNode
  • PrimFuncNode
  • IRModuleNode
  • ArrayNode
  • IterVarNode
  • RangeNode
  • BufferNode
  • DataProducerNode
  • StringObj
  • BufferRegionNode
  • TargetNode

为了更好地理解这些Node。一方面可以去看它的数据结构,另一方面,也希望可以把它们和TIR代码对应起来。
例1:

@main = primfn(n: int32) -> () {
  producer_realize(compute: DataProducer("compute", float32, [n]), [0:n], True,  {
    for (i.outer: int32, 0, floordiv((n + 3), 4)) {
      for (i.inner: int32, 0, 4) {
        if @tir.likely(((i.inner + (i.outer*4)) < n), dtype=bool) {
          compute_1: DataProducer("compute", float32, [n])[(i.inner + (i.outer*4))] = (A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
        }
      }
    }
  })
}

分解出每一个元素:

PrimExprNode : 
(i.outer*4)
A[(i.inner + (i.outer*4))]
({n|n>=0} + 3)
i.outer
B[(i.inner + (i.outer*4))]
(i.inner + (i.outer*4))
tir.likely(((i.inner + (i.outer*4)) < {n|n>=0}))
((i.inner + (i.outer*4)) < {n|n>=0})
0
(bool)1
{n|n>=0}
i.inner
3
4
(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
floordiv(({n|n>=0} + 3), 4)

TypeNode : 
TupleTypeNode([])
int32

StmtNode : 
for (i.outer, 0, floordiv(({n|n>=0} + 3), 4)) {
  for (i.inner, 0, 4) {
    if (tir.likely(((i.inner + (i.outer*4)) < {n|n>=0}))) {
      compute[(i.inner + (i.outer*4))] =(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
    }
  }
}

for (i.inner, 0, 4) {
  if (tir.likely(((i.inner + (i.outer*4)) < {n|n>=0}))) {
    compute[(i.inner + (i.outer*4))] =(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
  }
}

compute[(i.inner + (i.outer*4))] =(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])

if (tir.likely(((i.inner + (i.outer*4)) < {n|n>=0}))) {
  compute[(i.inner + (i.outer*4))] =(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
}

producer_realize compute([0, {n|n>=0}]) {
  for (i.outer, 0, floordiv(({n|n>=0} + 3), 4)) {
    for (i.inner, 0, 4) {
      if (tir.likely(((i.inner + (i.outer*4)) < {n|n>=0}))) {
        compute[(i.inner + (i.outer*4))] =(A[(i.inner + (i.outer*4))] + B[(i.inner + (i.outer*4))])
      }
    }
  }
}


DataProducerNode : 
Tensor(shape=[{n|n>=0}], op.name=compute)

StringObj : 
"compute"

ArrayNode : 
[{n|n>=0}]
[(i.inner + (i.outer*4))]
[range(min=0, ext={n|n>=0})]

RangeNode : 
range(min=0, ext={n|n>=0})

注意,子类型的Node统一以其父类的名字展示。比如ForNode继承自StmtNode,上面的StmtNode中就包含了ForNode。

别再凭感觉估算!用ADS的EBOND库精确仿真Bonding线寄生电感(附完整参数设置指南) 本文详细介绍了在ADS中使用EBOND库精确仿真Bonding线寄生电感的方法,帮助射频工程师在毫米波频段实现高精度建模。通过三维物理参数和电磁场求解算法,EBOND模型能将误差控制在5%以内,显著提升电路性能。文章还提供了完整的参数设置指南和实战操作步骤,适用于5G毫米波前端模块等高频应用场景。 阅读详情

相关推荐

方差迭代计算公式

方差迭代计算过程推导术语约定递推公式过程推导 术语约定 (1)En=1n∑i=1nxi E_n =\frac{1}{n} \sum_{i=1}^{n}x_i \tag{1} En​=n1​i=1∑n​xi​(1) (2)F(n)=∑i=1n(x2−En) F(n) = \sum_{i=1}^{n}{(x^2-E_n)} \tag{2} F(n)=i=1∑n​(x2−En​)(2) (3)V(n)...

weixin_44479136的博客 7921

TVM 结构学习总结

最近对深度学习编译器TVM学习了一下,了解各部分的功能,根据自己的理解进行总结,如有不正确请指正,话不多说上脑图: TVM为解决各种深度学习训练框架的模型部署到各种硬件而诞生 下图是TVM经典技术栈图: 编译器层次抽象: 编译器前端:接收C/C++/Java等不同语言,进行代码生成,吐出IR 编译器中端:接收IR,进行不同编译器后端可以共享的优化,如常量替换,死代码消除,循环优化等,吐出优化后的IR 编译器后端:接收优化后的IR,进行不同硬件的平台相关优化与硬件指令生...

沧海明月的博客 3312

vivado安装空间与依赖要求:入门须知要点

准备安装Vivado时,需重点关注系统空间和依赖环境的配置。结合vivado安装教程,详细说明最低磁盘要求、内存配置及操作系统兼容性,帮助新手快速搭建开发环境,避免常见安装失败问题。

weixin_34725745的博客 1573

TVM TIR Pass - Lower Intrin/legalization 优化原理和代码解析

理论 预备知识 LLVM。LLVM是一个后端编译器组件,支持ARM/x86。在目标平台上,TVM生成的代码会交给LLVM继续编译和优化。 LLVM Instrinsic function(LLVM内置函数),简单来说就是LLVM的函数API。一般来讲性能良好。llvm official doc Lower(我翻译成“下译”),指将IR映射成更偏硬件的过程。 是什么 Lower Intrin(sic)是TIR的Pass之一。它将TIR函数映射映射到LLVM的内置函数。 Lower Intrin和legal

Eurypterid的博客 1356

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1362

[仿真实战]FDTD Solutions 8.0:从零搭建薄膜光谱分析模型

本文提供了一份基于FDTD Solutions 8.0的薄膜光谱分析模型从零搭建实战指南。通过详细步骤,手把手教你创建玻璃基底与硅薄膜的几何结构、设置仿真区域与边界条件、配置光源与监视器,并最终计算反射率与透射率光谱。内容涵盖参数扫描与优化,旨在帮助用户快速掌握FDTD仿真在纳米光子学与薄膜光学设计中的核心应用。

defi6farmer的博客 500

TVM编译流程 详细介绍

是一个深度学习描述框架,通过Python代码描述算子(输入、输出、运算方法等)形成抽象语法树(Abstract Syntax Tree,AST),然后在TVM内部转换为中间表示(Intermediate Representation,IR),最终转换成目标平台的机器代码,以作为算子用于构成更复杂的神经网络。下文,将详细讲解这几个部分,并补充TVM的相关组件。

lay523的博客 1886

Plecs仿真进阶:半桥LLC谐振变换器从开环到闭环的实战解析

本文通过Plecs软件,详细解析了半桥LLC谐振变换器从开环模型搭建到闭环控制实现的完整仿真流程。文章深入探讨了谐振参数设置、关键波形解读,并重点分享了基于PI控制器的闭环调试实战经验与参数整定技巧,帮助工程师高效掌握这一高效拓扑的仿真与设计方法。

weixin_29231263的博客 280

TVM核心组件详解:Relay、TIR与Runtime

本文深入解析TVM深度学习编译器的三个核心组件:Relay IR作为高阶计算图表示与优化层,提供函数式编程范式和丰富的优化变换;TIR作为张量级中间表示,负责显式内存管理和循环变换优化;Runtime系统则提供高效的内存管理和跨平台执行能力。文章将详细探讨各组件的工作原理、优化技术及相互关系。 ## Relay IR:高阶计算图表示与优化 Relay IR是TVM框架中的高阶中间表示(IR)

gitblog_00604的博客 564

iPad秒变Mac副屏的隐藏技巧:用BetterDisplay实现无线竖屏+90度锁定

本文详细介绍了如何利用BetterDisplay软件突破苹果原生“随航”(Sidecar)功能的限制,将iPad无线设置为Mac的竖屏副屏,并实现90度方向锁定。通过创建虚拟显示器、配置分辨率与旋转参数,并校准鼠标指针,用户可以高效利用iPad的纵向空间进行文档阅读、编码等工作,显著提升多屏协作效率。

weixin_29266647的博客 603

ESP32 智能垃圾分类助手:从硬件搭建到代码实现的硬核指南

基于 ESP32 的智能垃圾分类设备,充分利用了 ESP32 的外设兼容性和处理能力,通过简单的模块组合和代码编写,就能实现垃圾分类的智能化。无论是作为学生的物联网课程设计,还是家庭的环保小工具,这个项目都兼具实用性和趣味性。如果你想进一步优化功能,还可以尝试加入更多传感器(如红外传感器检测垃圾满溢),让设备更加智能。

weixin_42300449的博客 929

TVM基础简介

TVM笔记

weixin_41671327的博客 869

17. ADC开发

bes2700 支持2路ADC。

雪飞_海 342

【从零开始学深度学习编译器】十,TVM的整体把握

大概4个月前开始接触TVM,虽然是0经验开始看,但目前对TVM的IR以及Pass,Codegen,Scheduler等也有了一些基础的认识。所以这篇文章的目的是梳理一下TVM的整体架构,复盘一下自己学到了什么,以及为想学习TVM的小伙伴们提供一个整体思路。这个专题的文章和实验代码都被我汇总放到了https://github.com/BBuf/tvm_learn这个仓库中,当然是希望,感激不尽。仓库目录如下:TVM 学习笔记目录页。

生活需要深度 1241

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TVM编译入门概念 一

清楚一个概念,onnx模型文件可以直接转换到Relay IR这一层onnx模型文件可以通过这个网站可视化展开哦代码角度看,Relay的基类Expr 就是 tvm.ir基础设施中的RelayIR在tvm/relay/expr.h中可以看到 relay命名空间中Expr指的就是 RelayExprVarNode 是Relay里面的变量VarNode 也会继承自 ExprNode这个类VarNode当中 有vid,type_annotatiton两个成员变量。

qq_43450892的博客 310

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PrimExpr 与 RelayExpr 的区别

是两种不同层级的表达式类型,分别服务于 TVM 的不同编译阶段和目标场景。在 TVM 的表达式系统中,在 TVM 编译流程中,

qq_44815135的博客 1310

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TVM TIR Pass - CSE (Common Subexpression Elimination) 优化原理和代码解析 PR#9482

预备知识 TIR Let Binding Let (var, value, body) 将value求值赋给var,然后返回body的求值结果。let将表达式 Expr 绑定到局部作用域的不可变 var 中。 scope:作用域/代码块。 TVM AST将作用域组建为树形结构。外侧作用域包含内侧作用域的关系被表示为父节点和子节点。父节点的变量对子节点可见但反之不然。判断变量是否在某个作用域内是CSE算法的一个重要的部分。 是什么 TIR代码来源于relay和其他Pass。生成TIR代码的过程是自动

Eurypterid的博客 1594

【TVM源码学习笔记】3.1.1 VisitExpr流程分析

TVM模型表达式遍历使用的visitor模式

zx_ros的博客 2138

【TVM系列二】TVM介绍

前面描述的转换都是基于规则和确定的,而TVM的设计目标之一是支持对于不同的硬件平台都可以进行高性能的代码优化。因此,需要对尽可能多的优化进行选择,每个优化又需要选择最优的参数,从这个角度来看,这个的工作量无疑是巨大的。TVM采用了基于空间搜索和机器学习的方法来解决这个优化选择与调参的问题。在relay优化的pipeline的最后,会运行一个 FuseOps的pass,将一个完整的Function(对应一个端到端的模型如 MobileNet)分解为多个子Funcions(例如 conv2d-relu)段。

生活需要深度 1824

TVM 学习指南(个人版)

最近粗略的看完了天奇大佬的MLC课程(顺便修了一些语法和拼写错误,也算是做了微弱的贡献hh),对TVM的近期发展有了一些新的认识。之前天奇大佬在《新一代深度学习编译技术变革和展望》一文中(链接:https://zhuanlan.zhihu.com/p/446935289)讲解了TVM Unify也即统一多层抽象的概念。这里的统一多层抽象具体包括AutoTensorization用来解决硬件指令声明和张量程序对接,TVM FFI(PackedFunc)机制使得我们可以灵活地引入任意的算子库和运行库函数并且在各

I good vegetable a! 8518

TVM的“hello world“基础流程 I

前言 继前图灵奖获得者Hennessy和Patterson在ISCA 2018提出“A New Golden Age for Computer Architecture”,编译器大神Chris Lattner在ASPLOS 2021提出了“The Golden Agen of Compiler Design”。另一方面,2020年图灵奖授予了编译器“龙书”作者Jeffrey Ullman和Alfred Aho。编译器技术在新的时代背景下似乎又焕发了新的活力,成为了业界的热点。 而作为现在最热门的AI计算场景

世事难料,保持低调 6092

【tvm官网教程】张量表达与调度

【tvm官网教程】张量表达与调度目的1. 调度原语1.1 te常用接口1.2 stage常用成员函数欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 目的 编译器是下一代大厂之争的关键,曾经有过

B10030607的博客 2407

(二)大话深度学习编译器中的自动调优·DSL与IR

前一篇《(一)大话深度学习编译器中的自动调优·前言》介绍了深度学习编译器及早期算子自动调优的背景,在接下去更深入地聊自动调优具体方法之前,在这篇中想先聊下两个与之密切相关的重要基础概念:领域专用语言(Domain-specific Language,DSL)与中间表示(Intermediate Representation,IR)。DSL与IR在整个深度学习编译器中的位置大体如下

世事难料,保持低调 6345

初探TVM--使用Tensor Engine来编写算子

TVM的tensor expression

shaojie_wang的博客 1697

C++ Primer第五版学习 第四章第五章

补第三章 size_t size_t是一些C/C++标准在stddef.h/cstddef中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。 在32位架构中被普遍定义为: typedef unsigned int size_t; 而在64位架构中被定义为: typedef unsigned long size_t; size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。而int在不同架构下都是4字节,...

weixin_45685191的博客 731

TVM TIR Pass - Loop Unroll 优化原理和代码解析

理论 预备知识 ForNode对象的数据结构 class ForNode : public StmtNode { public: /*! \brief The loop variable. */ Var loop_var; /*! \brief The minimum value of iteration. */ PrimExpr min; /*! \brief The extent of the iteration. */ PrimExpr extent; /*! \br

Eurypterid的博客 1546
上一篇: TVM (Typed)PackedFunc 作用
下一篇: TVM AVX512-VNNI原语手工调度matmul
yuanfz1998
博客等级 码龄8年 5粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值