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

AscIR

一个AscIR有如下部分组成:

  • 类型(type):类型确定了AscIR计算类型,是区分不同IR的根本信息。
  • 输入、输出:定义输入输出的个数、每个输入输出的含义。
  • 属性:严格来说,属性也属于AscIR的输入,但是与输入不同的是,在构造AscGraph图时,属性值需要被确定下来,在后续的执行过程中,属性值不允许变化。

比如,有如下IR定义:

1
2
3
4
5
REG_ASC_IR(Load)
    .Input("T")
    .Output("T")
    .Attr<Expression>(offset, 0)
    .DataType("T", {DT_FLOAT, DT_FLOAT16});

上述代码定义了一个类型为Load的IR,该IR:

  • 有一个输入,类型可以为DT_FLOAT、DT_FLOAT16两种。
  • 有一个输出,该输出的类型与输入相同。
  • 有一个属性,属性名为offset,该属性的数据类型是int64_t,默认值是0。

除了上述信息,AscIR通常需要提供如下额外的信息:支持的输入输出内存硬件类型。内存硬件类型,是指GM或UB构图时,需要严格满足AscIR定义的所有要求,否则会导致后续流程出错。一般来说,AscIR分为两类:

  • 计算类:包括Load、Add等真正表达某类硬件单元参与工作的。
  • 内存类:表达一块内存,例如Data、Output、Workspace等。