---
title: 简介
description: "Lowering模块负责完成GE图上基于循环轴合并的算子融合。该模块输入是符号化推导后的GE图，输出则是包含融合算子的GE图。融合算子使用AscBackend类型的算子表达，AscBackend算子持有一个AscGraph类型的属性，用于表达其计算逻辑。在Lowering阶段之后，CanFuse/Schedule/Codegen等模块将进一步完成AscBackend节点间的二次融合、代码生成与编译工作。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0012.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0012.html
indexId: 13755a39208e46b0165ff4c01cbe1e5750d59976cc7a3d6a2d9ad4930a61eecc70
---
# 简介

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
