---
title: HintGraph
description: "HintGraph对应后端入口的阶段，准确来说，HintGraph是Auto Schedule模块输入的规范。在HintGraph阶段，认为所有内存是无限的（包括UB与GM）内存，每个节点是个独立循环，完成对输入的处理；同时，HintGraph阶段不考虑分核，认为所有算子在一个核上完成计算。比如，有如下HintGraph："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0054.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0054.html
indexId: 63c32e038c99b2918da346056ff2565bbc12935ec8801b11d8e0947a4658bdf070
---
# HintGraph

HintGraph对应后端入口的阶段，准确来说，HintGraph是Auto Schedule模块输入的规范。在HintGraph阶段，认为所有内存是无限的（包括UB与GM）内存，每个节点是个独立循环，完成对输入的处理；同时，HintGraph阶段不考虑分核，认为所有算子在一个核上完成计算。比如，有如下HintGraph：

```
graph LR

Data1 --> Load1 --> Add
Data2 --> Load2 --> Add --> Store --> Output
```

按照节点的内存语义，Load输出、Add输入输出、Store输入应该位于UB内存，Data的输出为GM内存。而UB内存是有限的，Data输出的数据不可能被全部加载到UB后，再继续向后计算Add。而由于HintGraph阶段不关注内存大小，因此上图仍然是正确的。

HintGraph阶段，对AscGraph增加了一些要求和约定，当这些约定无法满足、又需要表达时，可以使用FusedAscBackend类型的Ascend IR，分隔成多个AscGraph表达：

#### 连续性约定

- 显式Broadcast：如果计算发生Broadcast操作，需要显示表达出，即必须在构图中加上Broadcast的算子。
- 集中Broadcast：如果发生这种操作，需要在load后不做任何其他运算，立即进行。
- 单轴Broadcast：如果发生多轴广播，那么每个Broadcast节点最多广播一根轴。


#### 一套循环轴

一张AscGraph图上，只能有一套循环轴，即图上的所有节点，sched.axis必须相同。


#### Reduction总是keep_dim

Reduction类操作，不存在keep_dims参数，总是认为keep_dims=true。
