---
title: FillOperation
description: "| 硬件型号 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0057.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0057.html
indexId: d78b951dd1aa7870ae7a843cf545e9ead5caf6acc171133c59b56170a15c404164
---
# FillOperation

#### 产品支持情况

| 硬件型号 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |


#### 功能说明

将指定位置设置为value值或者生成一个指定shape的tensor并填充为value。

图1 FillOperation


- MaskedFill功能（withMask为true）：
  若x里的某元素，其所对应mask里同位置元素值为true或1，则output该位置元素被设置为value值，output其余位置元素值与x相同。支持广播功能。

  图2 Fill算子实现原理

  图3 Fill算子实现原理（广播场景）


- Fill功能（withMask为false）：
  生成一个由outDim指定shape的tensor，所有元素数值均为value。


#### 定义

```
struct FillParam {
    bool withMask = true;
    SVector<float> value;
    SVector<int64_t> outDim;
    uint8_t rsv[8] = {0};
}
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| withMask | bool | true | 是否Masked Fill。 |
| value | SVector<float> | [] | 填充的元素，value是一个只含有一个元素的SVector。 |
| outDim | SVector<float> | [] | withMask = false时，表示输出tensor的Shape。 |
| rsv[8] | uint8\_t | {0} | 预留参数。 |


- withMask为true
  将由mask指定的位置的元素设置为value值。

  输入tensors数量为2，不需要指定outDim。


- withMask为false
  生成一个由outDim指定Shape的tensor并将其每个元素填充为value。

  输入tensors数量为0，需指定outDim。


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [dx\_0, ..., dx\_n] | float16/int32/bf16 | ND | 仅withMask为true时输入。 |
| mask | [dmask\_0, ..., dmask\_m] | int8/bool | ND | 仅withMask为true时输入，通过设置某些位置上的数值为true或1，将x相同位置上的数据设置为value值。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | withMask为true时，和x相同 withMask为false时，由outDim指定 | withMask为true时，和x相同 withMask为false时，只能为float16 | ND | 输出tensor。 |


#### 约束说明

- Param参数约束
  a. value.size() == 1。


- 输入输出约束

  - 输入x不可以被broadcast。
  - 输入mask的每个元素只能是0或者1。
  - withMask为true时，mask shape 与 x 一致或可以broadcast为x的shape。


#### 接口调用示例

- 示例1：MaskedFill非广播场景

  - 输入

```
param.withMask
= true
param.value
= [-1]
x
= [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
mask
= [[ true, false,  true],
[false,  true,  true],
[ true,  true, false]]
```


  - 输出

```
output
= [[-1,  2, -1],
[ 4, -1, -1],
[-1, -1,  9]]
```


- 示例2：MaskedFill广播场景

  - 输入

```
param.withMask
= true
param.value
= [-1]
x
= [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
mask
= [true, false, true]
```


  - 输出

```
output
= [[-1,  2, -1],
[-1,  5, -1],
[-1,  8, -1]]
```


- 示例3：Fill场景

  - 输入

```
param.withMask
= false
param.value
= [1]
param.outDim
= [2, 3]
```


  - 输出

```
output
= [[1, 1, 1],
[1, 1, 1]]
```
