MLIR 是 LLVM 项目下的多级中间表示框架,Mojo 将其作为编译体系的中间层。借助 dialect 机制,Mojo 可以在同一套编译流程中表达从高层语言语义到底层硬件指令的多级抽象,而不必为每种硬件单独设计前端。
Modular 官方把 Mojo 与 MAX 的快速移植能力归因于三点设计:架构无关的设计,即 Mojo 与 MAX 不把 GPU 相关知识和优化硬编码进语言,而是把硬件细节委派给库;库导向的执行,即卸载、调度与指令选择通过抽象层控制,而非写死在编译器流程中;参数化算子,即用可针对新硬件重新调优的参数化 kernel 替代 SIMD 宽度、分块形状这类写死的常量。官方给出的量化口径是,这套栈有 99.9% 的部分是与具体架构无关的。
在 AMD Instinct MI355 的实际案例中,Modular 从拿到硬件到完成适配只用了约两周时间,修改集中在 20 个小规模代码合并请求上,核心投入只有约 1.5 名工程师的工作量。之所以能够做到这一点,是因为新增一款 GPU 所需的大部分改动只落在少量 kernel 与参数调优上。