# BROADCAST_INFER

#### 函数功能

提供公共函数宏封装，供算子开发者开发InferShape函数。该函数基于2个输入的shape，设置输出的shape。该宏只是设置shape，未设置dtype。

*   如果2个输入的shape一致，会按输入的shape设置输出shape。
    
*   如果2个输入的shape不一致，会按照broadcast的策略，取2个输入shape的并集。
    
    比如输入shape分别为（1,2,3,4）和（3,1,3,4），则该宏会设置算子的输出shape为（3,2,3,4）。
    

#### 函数原型

```
BROADCAST_INFER(in1_name, in2_name, out_name)
```

该函数会自动调用如下函数：

```
graphStatus BroadCastInfer(const function<vector<int64_t>()> &get_in1_shape,
                           const function<vector<int64_t>()> &get_in2_shape,
                           const function<void(const std::vector<int64_t> &y_shape)> &set_out_shape);
```

#### 约束说明

无

#### 参数说明

| 参数名 | 输入/输出 | 描述 |
| --- | --- | --- |
| in1_name | 输入 | 算子第一个输入。 |
| in2_name | 输入 | 算子第二个输入。 |
| out_name | 输出 | 算子输出。 |

#### 返回值

执行成功或失败。

#### 调用示例

```
IMPLEMT_INFERFUNC(RightShift, RightShiftInfer) {
  DataType type = op.GetInputDesc("x").GetDataType();
  SET_OUTPUT_TYPE(op, "z", type);
  return BROADCAST_INFER("x", "y", "z")(op);
}
```