资讯动态

mlir 编译器学习笔记之一 -- 调试

发布时间:2026/9/11 9:24:56 来源:尧图企业网站定制
1、通过--mlir-print-ir-before-all可以找到开始引入错误的pass, 然后可以将错误pass前的IR保存即可验证单个pass的功能mlir-opt test.mlir -convert-arith-to-hfusion -o tmp.mlir2、RankedTensorType代表秩已经维度大小可以是静态或动态” 的张量类型3、对error类调试断点可以是emitError函数4、使用onnx-mlir/torch_mlir.tools.import_onnx可以将onnx模型图转为mlir, 但onnx-mlir效果更好torch_mlir.tools.import_onnx中生成的mlir中torch方言而onnx-mlir只有onnx方言torch方言%5696 torch.operatoronnx.Sqrt(%5695) : (!torch.vtensor[?,?,1],f32) - !torch.vtensor[?,?,1],f32onnx方言%103 onnx.Sqrt(%102) {onnx_node_name /model/layers.0/input_layernorm/Sqrt} : (tensor?x?x1xf32) - tensor?x?x1xf325、在 mlir中定义了一些开源方言 正确性开源在Compiler Explorer 中确认llvm-project/build/tools/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.h.inc6、建议使用 tensor.collapse_shape tensor.expand_shape 替换 tensor.reshapehttps://discourse.llvm.org/t/question-on-tensor-dialect-reshape-ops/769687、张量是逻辑数据结构memref 是物理存储描述MLIR中Dialects分类及关联-腾讯云开发者社区-腾讯云8、安装onnxsim 建议使用python 3.11Release dev-wheels · llvm/torch-mlir-release · GitHub9、linalg.generic算子在标准流程中会被降级为scf.parallel循环适合多线程的硬件架构对应npu架构不太亲和10、 在调试阶段看到 rewriter.replaceOp 后没有真正的完成这应该是缓冲导致的只有在当前pass结束清理后才能看到真正的变化。因此可以看下一个pass 或者 直接 --mlir-print-ir-after-all 看下结果11、gdb 调试时关闭多线程 gdb-mlir-disable-threading12、进入pass时可以使用 pgetOperation()-dump()将当前函数的IR打印出来13、rbreak 的强大功能(gdb) rbreak failed to legalize找到所有包含 failed to legalize 字符串的地方并设置断点14、mlir中不支持的算子可以借用函数调用进行打桩关键是参数保持和算子一致func.func hook_conv2d_kernel7(%arg0: tensor1x3x230x230xf32, %arg1: tensor64x3x7x7xf32) - tensor1x64x112x112xf32 {%cst arith.constant dense0.000000e00 : tensor1x64x112x112xf32return %cst : tensor1x64x112x112xf32}15、printf输出到标准输出stdout,等价于fprintf(stdout, ...)16、

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价