MLIR的Roadmap(路线图)与未来发展方向
上周帮团队排查一个跨平台推理引擎的编译问题,模型在x86上跑得好好的,切到ARMv8.2的板子上就崩了。追了两天,最后定位到是LLVM后端对某些向量化pattern的lowering出了问题——MLIR生成的vector dialect在转换到LLVM IR时,把一条关键的shuffle指令优化成了不兼容的NEON intrinsic。那一刻我盯着MLIR的pass pipeline看了很久,突然意识到:我们这些天天用MLIR的人,其实很少真正去思考这个框架自己会往哪里走。
今天这篇笔记,不聊具体的tensor操作,不聊dialect转换的细节,我想聊聊MLIR的路线图——那些在LLVM开发者大会、MLIR设计讨论邮件列表里反复出现,但文档里很少写清楚的方向。这些方向直接决定了我们未来三年写编译器、做算子优化时的技术选型。
从“中间表示”到“中间框架”的转变
MLIR最初的设计定位是“多级中间表示”,但过去两年,社区的核心思路已经悄悄变了。Chris Lattner在2023年的一个内部talk里提过一个观点:MLIR应该成为一个“编译器基础设施的操作系统”。什么意思?就是MLIR不再只是提供IR和pass,而是提供一套可插拔的、跨硬件后端的编译服务。
这个转变最直接的体现是Pipeline的模块化和可组合性。以前我们写一个MLIR pass pipeline,基本是手写一串-pass-name,顺序错了就崩。现在社区在推一个叫“PassPipelineSpec”的东西——你可以把pipeli