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等。
父主题: AscIR与AscGraph