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

HintGraph

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

1
2
3
4
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。