019、MLIR的ExecutionEngine:JIT编译与运行时执行

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 方法直接调用编译后的函数。

核心流程就三步:

  1. 模块转换:把输入的 MLIR 模块降到 LLV
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值