在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作,鉴于篇幅较长,为了提升阅读体验,我们将分享拆分为两个部分:
- Part I 中我们将介绍问题的背景,面临的主要挑战和以及我们做shape constraint IR的动机;
- Part II 中我们将介绍shape constraint IR的设计,实现以及一些初步的实验结果;
本篇是关于Part II的介绍,Part I的介绍请参考这里。
设计和实现
shape constraint IR的设计
使用IR来建模shape constraint并不是一个很容易的事情。我们需要设计一种方案既方便我们做shape constraint分析,同时又不会使得IR的后续变换变的很复杂。经过多次迭代之后,我们选择了type-based方案来构建shape constraint IR,基本思路如下段伪IR所示。
// original data-computation IR
func @main() {
...
%0 = any_dialect.any_operation(...) : tensor<?x?xf32, [@S0, @S1]>
...
}
disc_shape.SymbolicDim @S0 {
range list : [[...], [...], ...]
likely_values : [...]
...
symbolic_shape_graph: &