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

#### 产品支持情况

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


#### 功能说明

首先对ResIn进行Gather索引操作，然后与X相加，最后进行RmsNorm计算。


#### 计算公式

- Gather操作：根据indices中的值索引ResIn中对应的行，得到ReslnAfterGather。
- Add操作：将X和ResInAfterGather相加，得到ResOut。
- Norm操作：


#### 计算图


#### 定义

```
struct GatherPreRmsNormParam {
    float epsilon = 1e-5;
    uint8_t rsv[28] = {0};
};
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 取值范围 | 是否必选 | 描述 |
| --- | --- | --- | --- | --- | --- |
| epsilon | float | 1e\-5 | (2e\-38, 1e\-5] | 是 | 归一化时加在分母上防止除0。 |
| rsv[28] | uint8\_t | {0} | [0] | 否 | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [dim\_m, dim\_n] | float16/bf16 | ND | 2维，末轴维度需要32字节对齐（16的倍数）且不大于7680。 |
| resIn | [dim\_res, dim\_n] | float16/bf16 | ND | 2维，dim\_m、dim\_res可能不相等，与x的数据类型一样。 |
| indices | [dim\_m] | int32 | ND | 1维，元素取值范围为[0, dim\_res)，其中dim\_res为resIn的第一个维度值。 |
| gamma | [1, dim\_n]或[dim\_n] | float16/bf16 | ND | 1维或2维，与x的数据类型一样。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| y | [dim\_m, dim\_n] | float | ND | 数据类型、维度数和维度值与x一样。 |
| ResOut | [dim\_m, dim\_n] | float16/bf16 | ND | 维度与x一致。 |
