---
title: 简介
description: "融合策略需要综合考虑后端能力、性能收益、内存峰值影响对融合行为做出决策和融合处理，得到一个相对较优的融合结果。融合策略当前实现的功能如下："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0018.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0018.html
indexId: 331efa9b1150d49d80e34f5c32bc234b6bb8ac0a983ab72187e24571bf651e5a70
---
# 简介

融合策略需要综合考虑后端能力、性能收益、内存峰值影响对融合行为做出决策和融合处理，得到一个相对较优的融合结果。融合策略当前实现的功能如下：

- 支持统一的融合规则判断。
- 支持动静态shape（依赖  符号化
）。
- 支持融合规模控制。
- 支持融合优先级处理。

融合策略模块由CanFuse框架和Backend两部分组成：

- CanFuse框架：支持融合判断（成环检测，内存峰值等），融合策略求解功能。
- Backend：支持融合规则，融合处理（循环合并，AscGraph融合、AscBackend融合）功能。

两部分交互主流程如下：

图1 CanFuse与Backend交互流程图

由Lowering模块做的融合为一次融合，由CanFuse框架做的融合为二次融合，二次融合简要流程如下：

1. 首先进行一轮融合，默认做10轮。
2. 获取可能融合的所有节点对。
3. 从  2
中得到的可融合节点对中获取融合优先级。
4. 根据优先级，融合策略的分值，进行排序。
5. 调用CanFuse框架进行融合规则判断：

  a. 确定是否能进行垂直融合。
    垂直融合：两个融合节点之间有输入输出关系，一个节点的输出为另一个节点的输入。

  b. 进行内存峰值影响分析。
  c. 确定是否能进行水平融合。
    水平融合：两个节点间没有输入输出关系，但是有来自同一个根节点的输入。

6. 对两个节点进行融合。
