ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

142、MLIR的Fast Math模式与不安全的浮点优化

142、MLIR的Fast Math模式与不安全的浮点优化 MLIR的Fast Math模式与不安全的浮点优化一个让我熬夜三天的bug去年做AI推理引擎的算子融合优化,模型在x86上跑得好好的,换到ARM服务器上,精度直接崩了——分类结果从0.89掉到0.12。排查了三天,最后发现是MLIR的Fast Math模式在作祟。那个晚上,我盯着LLVM IR里的fadd指令,看着它被悄悄替换成llvm.fmuladd,心里一万只草泥马奔腾而过。这个坑,值得专门写一篇。Fast Math到底在“快”什么MLIR的Fast Math模式,本质上是一组浮点运算的“免责声明”。你告诉编译器:“我不在乎IEEE 754标准,你尽管优化,出问题我自己扛。” 编译器听到这句话,就像程序员听到“这个需求很简单”一样,开始放飞自我。在MLIR的arith方言里,浮点操作(arith.addf、arith.mulf等)默认是严格遵循IEEE 754的。但你可以通过FastMathFlags属性来放松约束。这个属性是个位掩码,包含以下几个flag:nnan:允许产生NaN(Not a Number)ninf:允许产生无穷大nsz:允许将负零视为正零arcp
返回列表