欢畅科技头像
关注
179、MLIR的Profiling(性能分析)与Timing(计时)Pass封面图

179、MLIR的Profiling(性能分析)与Timing(计时)Pass

MLIR的Profiling(性能分析)与Timing(计时)Pass

上周帮团队调一个AI推理引擎的算子性能问题,模型跑在自研NPU上,某个卷积算子的延迟比预期高了3倍。常规手段——插桩、打印时间戳、甚至用perf去抓——都试了,结果发现瓶颈不在计算本身,而在MLIR编译后的IR调度上。那个调度循环展开得过于激进,导致指令缓存频繁miss。这时候我才意识到,MLIR的Profiling和Timing Pass不是锦上添花,而是调试利器。

为什么MLIR需要自己的计时机制

很多人觉得性能分析有perf、gprof就够了,何必在MLIR层面再搞一套?这里有个关键点:MLIR的Pass流水线是分阶段执行的,每个Pass可能对IR做不同粒度的变换。你没法用perf去测量“某个Pattern匹配替换花了多少时间”,因为那是编译期行为,不是运行时行为。MLIR的Timing Pass解决的是编译期性能分析——哪个Pass慢、哪个Pattern匹配耗时、哪个Dialect转换卡住了。

另一个场景是运行时Profiling:你生成的代码跑在目标硬件上,但你想知道IR中某个特定Operation的执行时间。这时候需要把计时指令插入到生成的代码里,而不是事后用外部工具去猜。

Timing Pass:编译期的“秒表”

MLIR自带了一个-mlir-timing选项,开启后会在每个Pass执行前后打时间戳。用法很简单:

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/m0_50546716/article/details/166785361

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--