昇腾社区首页
中文
注册
开发者
下载

简介

Lowering模块负责完成GE图上基于循环轴合并的算子融合。该模块输入是符号化推导后的GE图,输出则是包含融合算子的GE图。融合算子使用AscBackend类型的算子表达,AscBackend算子持有一个AscGraph类型的属性,用于表达其计算逻辑。在Lowering阶段之后,CanFuse/Schedule/Codegen等模块将进一步完成AscBackend节点间的二次融合、代码生成与编译工作。

Lowering模块包含两个层次,算子级Lowering和图级Lowering(Graph Lowering)。

  • 算子级Lowering,使用低层级的IR进行算子计算逻辑的Scalar表达,Scalar表达指描述每个输出的值是如何计算得到的。可以进行Scalar表达的算子分为三类:
    • Pointwise类

      即输出shape为多个输入广播后的结果,每个输出的值由对应位置输入的值计算得出。常见的GE IR都为该类型,例如Add、Mul、Exp、Abs等

    • Reduction类

      输出的每个元素由多个输入元素经过Reduce计算得到。例如ReduceSum、ReduceMax。

    • View类

      输出的每个元素,等于输入中特定位置的一个元素,中间不进行计算。输出元素的个数可以与输入元素个数不同,例如Broadcast算子可以将多个输出元素对应到同一个输入元素。Lowering当前支持的View类包括Broadcast等。

  • 图级Lowering,会依次调用图上算子的Lowering实现,并基于Scalar表达完成算子融合。图级Lowering会完成以下场景的融合:
    • Pointwise + Pointwise
    • Pointwise + View
    • Pointwise -> Reduction