MLIR的定点数(Fixed-Point)与浮点数(Floating-Point)语义一个让我熬夜到凌晨三点的bug去年做AI加速器编译器的时候,遇到一个诡异的精度问题。模型在x86上跑得好好的,一部署到我们自研的NPU上,某些层的输出就开始“飘”。排查了三天,最后发现是MLIR的arith方言里,一个定点数加法被错误地降级成了浮点运算——因为中间表示里类型标注丢了。那个晚上我盯着LLVM IR里的uitofp指令,突然意识到:MLIR对定点数和浮点数的语义支持,远没有看起来那么简单。今天这篇笔记,就聊聊我踩过的这些坑。浮点数:MLIR里最容易被低估的“标准”MLIR的浮点数类型直接继承自IEEE 754标准,但有几个细节值得注意。类型系统里的浮点家族// 标准浮点类型 %a = arith.constant 3.14 : f32 %b = arith.constant 2.718 : f64 // 半精度和bfloat——AI场景的常客 %c = arith.constant dense1.0 : tensor4xf16 %d = arith.constant dense2.0 : tensor4xbf16这里有个容