MLIR的ExecutionEngine:JIT编译与运行时执行
一个让我熬夜到凌晨三点的bug
去年做AI推理加速器项目,需要把自定义的MLIR dialect动态编译到x86上跑性能验证。代码写完后,mlir-opt 跑得顺溜,mlir-translate 也正常,但一调用 ExecutionEngine 的 invoke 方法,程序就静默崩溃——没有段错误,没有异常,就像函数根本没被调用一样。
我盯着 jit 目录下的 .mlir 文件看了两个小时,最后发现是函数签名里漏了一个 !llvm.ptr 类型参数。这个坑让我意识到:ExecutionEngine 不是黑盒,它背后是 LLVM JIT 编译器的完整链路,任何一个环节的类型不匹配,都会导致运行时静默失败。
ExecutionEngine 到底在干什么
MLIR 的 ExecutionEngine 本质上是一个轻量级的 JIT 编译器封装。它接收 MLIR 模块(通常是 LLVM dialect 或转换后的标准 dialect),通过 LLVM ORC JIT 引擎生成机器码,然后提供 invoke 方法直接调用编译后的函数。
核心流程就三步:
- 模块转换:把输入的 MLIR 模块降到 LLV
订阅专栏 解锁全文
288

被折叠的 条评论
为什么被折叠?



