---
title: AscIR
description: "一个AscIR有如下部分组成："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0051.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0051.html
indexId: 3b373c29611542e7123ef4cd483bb7375e4891ec9d4f527444cda8fee5c1634870
---
# AscIR

一个AscIR有如下部分组成：

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

比如，有如下IR定义：

```
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等。
