028、Tensor Dialect:张量类型与基本操作 📅 2026/6/22 5:36:55 028、Tensor Dialect:张量类型与基本操作上周帮团队排查一个MLIR推理部署的bug,模型在ONNX导出后,用mlir-opt做shape推理时直接崩了。报错信息指向TensorDialect的某个操作,说“operand type mismatch”。我盯着那个IR片段看了半小时,发现是tensor2x3xf32和tensor?x3xf32在某个elementwise操作里混用了——一个静态shape,一个动态shape,TensorDialect的type系统直接不认。这种坑,写代码时觉得“反正都是f32,shape差不多”,但MLIR的类型系统比你想的严格得多。Tensor Dialect的定位TensorDialect在MLIR生态里是个基础层,它不负责具体计算,只定义张量这个数据结构的类型和基本操作。你把它想象成C语言里的int、float——没有这些基础类型,你没法写表达式。TensorDialect就是给上层Dialect(比如Linalg、TOSA、StableHLO)提供“张量”这个概念的。它和MemRefDialect的区别要搞清楚:Tensor是不可变的值语义,MemRef是可变的内存视图。你在写推理图优化时,大部分时间打交道的是Tensor,因为计算图天然是值流图。只有到了代码生成阶段,才会把Tensor lower成MemRef。张量类型系统TensorDialect的核心类型是tensorT