서론
이 장은 ONNX-MLIR의 소스코드를 분석하여 해당 코드의 역할을 파악한다.
목차
- Conversion
- ONNXToKrnl Pattern
- ONNXToMhlo Pattern
- ONNXToTosa Pattern
- Pass
- Transform
- Compiler
- Function Call
Conversion
ONNX dialect가 Krnl 로 lowering되고 Krnl이 Affine과 LLVM으로 lowering된다.
Conversion에 Pattern을 정의/ 구현/ 등록하고 Pass만들어준다.
Pass를 진행하기 위해서는 Conversion Pattern을 상속해 해당 Conversions with Pattern 구현이 필요하다.
ONNXToKrnl Pattern
- ONNXToKrnl Pattern 정의


- ONNXToKrnl Pattern 구현

- ONNXToKrnl Pattern 등록



https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToKrnl/ConvertONNXToKrnl.cpp
ONNXToMhlo Pattern
- ONNXToMhlo Pattern 정의


https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToMhlo/ONNXToMhloCommon.hpp - ONNXToMhlo Pattern 구현

https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToMhlo/NN/Conv.cpp - ONNXToMhlo Pattern 등록

https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToMhlo/ConvertONNXToMhlo.cpp
ONNXToTosa Pattern
- ONNXToTosa Pattern 정의

- ONNXToTosa Pattern 구현


https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToTOSA/Math/Conv2D.cpp - ONNXToTosa Pattern 등록


https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Conversion/ONNXToTOSA/ConvertONNXToTOSA.cpp
Pass
- Pass 정의

- Pass 등록


Transform
- Convolution연산의 최적화 구현


https://github.com/onnx/onnx-mlir/blob/6278fd386b58b2e7046e17766a4803f28f2b7251/src/Transform/ONNX/ConvOpt.cpp - 해당 최적화 Operator 대한 Conversion Pattern을 구현

https://github.com/onnx/onnx-mlir/blob/6278fd386b58b2e7046e17766a4803f28f2b7251/src/Transform/ONNX/ConvOpt.cpp - Optimization Pass구현

https://github.com/onnx/onnx-mlir/blob/6278fd386b58b2e7046e17766a4803f28f2b7251/src/Transform/ONNX/ConvOpt.cpp - Pass 등록

https://github.com/onnx/onnx-mlir/blob/6278fd386b58b2e7046e17766a4803f28f2b7251/src/Transform/ONNX/ConvOpt.cpp - Pass 정의


https://github.com/onnx/onnx-mlir/blob/04059864ce69fac909b4e9faa401655768964712/src/Pass/Passes.hpp
Compiler
Compiler passes.cpp
ConvOp를 Nested Pass를 태움(Conv를 풀어헤침)

Function Call
API 등록 및 정의


Match and Rewrite (API write)


API CALL


Comment