https://mlir.llvm.org/docs/Rationale/RationaleLinalgDialect/
阅读笔记+部分自己的理解
介绍
- 高层图IR -> code gen中间的ir表达,用于硬件无关的高层优化。
- 使用loop 或者Control flow来表达切分和融合,op具体的语义仍然一致保留。
- transformation的过程中,语义的正确性和性能提升解耦。第一次迭代保证语义正确,后序迭代提升性能时,只需要关心语义等价,且性能提升即可。
- 和vector dialect结合,linalg作为structured op,表示操作对应内存里的数据,将操作和内存表达隔离。
其他链接:
https://discourse.llvm.org/t/development-of-high-level-tensor-compute-primitives-dialect-s-and-transformations/388
https://drive.google.com/drive/u/0/folders/1sRAsgsd8Bvpm_IxREmZf2agsGU2KvrK-
设计抽象
linalg抽象了现有ir的特点
polyhedral transformations
https://polly.llvm.org/
https://mlir.llvm.org/docs/Rationale/RationaleSimplifiedPolyhedralForm/
Affine
思想
- MemRefType除了代表稠密不连续内存空间,还可以表达不规则、稀疏数据,或者树、哈希表、图之类的。
- 除了静态编译,还可以引入runtime-adaptive computations,例如nspector-executor,运行时inspector会快速决策executor的执行配置。
- 使用控制流 + 数据结构表征