045、Partial Conversion与Full Conversion策略

发布时间:2026/7/22 0:24:37
045、Partial Conversion与Full Conversion策略 MLIR与算子中间表示:从理论到实践 045:Partial Conversion与Full Conversion策略从一次诡异的编译崩溃说起上周五晚上,团队的小张跑过来,脸色发青:“老大,我写了个新的TOSA到Linalg的conversion pass,跑测试直接segfault,而且只在O2优化下复现。”我让他把MLIR的打印输出贴过来,一看就明白了——他用了Full Conversion,但目标dialect里有个op的conversion pattern没注册全,导致部分IR节点在转换过程中变成了“孤儿”,后续的dialect合法性检查直接炸了。这种问题在MLIR的conversion框架里太典型了。Partial Conversion和Full Conversion的选择,本质上是在“转换的完整性”和“转换的灵活性”之间做权衡。今天这篇笔记,我就从实际踩过的坑出发,聊聊这两个策略的设计哲学、实现差异,以及什么时候该用哪个。核心差异:谁为未转换的op负责?先看最直观的区别。Partial Conversion允许你的conversion pattern只处理一部分op,剩下的op可以保持原样留在IR中。而Full Conversion要求所有op都必须被转换到目标dialect,否则pass会报错。听起来很简单对吧?但实际工程里,这个差异会引发一系列连锁反应。Partial Conversion的典型场景:你正在做一