如何高效总结MLIR ODS要点,深度学习编译器学习第十六篇?

2026-05-28 14:560阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计5183个文字,预计阅读时间需要21分钟。

如何高效总结MLIR ODS要点,深度学习编译器学习第十六篇?

前言:从零开始学习深度学习编译器,MLIR+Toy Tutorials学习笔记一,中提到MLIR是通过Dialect来统一各种不同级别的IR的,即负责定义各种Operation(算子)。


前言

在​​十二,MLIR Toy Tutorials学习笔记一​​ 中提到MLIR是通过Dialect来统一各种不同级别的IR,即负责定义各种Operation(算子)。然后对Dialect和Operation的定义又是通过TabelGen规范构造的,通过TableGen驱动MLIR的Operation定义也被称作ODS( Operation Definition Specification) 。我们目前只是简单认识了Toy Tutorials的Dialect和Operation是如何通过ODS定义的,但对ODS本身的语法以及一些限制都没有太多了解,这就导致在看一些相关工程的Operation定义时时常陷入迷惑,不知道某个字段是什么含义,或者说自定义Op的时候的应当如何声明操作数和Attr(举个例子,要将卷积的groups参数设置为可选的属性,应该怎么做)。

因此这篇文章将基于MLIR的ODS文档来讲解ODS中的一些要点,帮助我们更好的了解和上手MLIR。我会把官方文档中需要注意的点拆成一些小的要点。下面文章中提到的TableGen和ODS不做特别区分,ODS中的语法也就是TableGen语法。这里介绍的要点在OneFlow对接MLIR时都或多或少用到了,感兴趣的可以对照着看看OneFlow的这部分源码。​​github.com/Oneflow-Inc/oneflow/blob/master/oneflow/ir/include/OneFlow/OneFlowOps.td​​。

阅读全文

本文共计5183个文字,预计阅读时间需要21分钟。

如何高效总结MLIR ODS要点,深度学习编译器学习第十六篇?

前言:从零开始学习深度学习编译器,MLIR+Toy Tutorials学习笔记一,中提到MLIR是通过Dialect来统一各种不同级别的IR的,即负责定义各种Operation(算子)。


前言

在​​十二,MLIR Toy Tutorials学习笔记一​​ 中提到MLIR是通过Dialect来统一各种不同级别的IR,即负责定义各种Operation(算子)。然后对Dialect和Operation的定义又是通过TabelGen规范构造的,通过TableGen驱动MLIR的Operation定义也被称作ODS( Operation Definition Specification) 。我们目前只是简单认识了Toy Tutorials的Dialect和Operation是如何通过ODS定义的,但对ODS本身的语法以及一些限制都没有太多了解,这就导致在看一些相关工程的Operation定义时时常陷入迷惑,不知道某个字段是什么含义,或者说自定义Op的时候的应当如何声明操作数和Attr(举个例子,要将卷积的groups参数设置为可选的属性,应该怎么做)。

因此这篇文章将基于MLIR的ODS文档来讲解ODS中的一些要点,帮助我们更好的了解和上手MLIR。我会把官方文档中需要注意的点拆成一些小的要点。下面文章中提到的TableGen和ODS不做特别区分,ODS中的语法也就是TableGen语法。这里介绍的要点在OneFlow对接MLIR时都或多或少用到了,感兴趣的可以对照着看看OneFlow的这部分源码。​​github.com/Oneflow-Inc/oneflow/blob/master/oneflow/ir/include/OneFlow/OneFlowOps.td​​。

阅读全文