FilesLast commitLast update
13 days ago
10 days ago
10 months ago
12 days ago
10 days ago
18 days ago
12 days ago
18 days ago
README

Segsum

产品支持情况

产品 是否支持
Ascend 950PR&950DT系列产品 √
Atlas A3系列产品 √
Atlas A2系列产品 √
Atlas 200I/500 A2推理产品 ×
Atlas推理系列产品 ×
Atlas训练系列产品 ×
Kirin X90处理器系列产品 √
Kirin 9030处理器系列产品 √

功能说明

  • 算子功能:进行分段和计算。生成对角线为1、上三角为0的半可分矩阵。

  • 计算公式(以4D输入为例):

    1. 输入self由(N1,N2,N3,N4)升维成(N1,N2,N3,N4,1)。

    2. 进行广播得到(N1,N2,N3,N4,N4)。

    3. 生成(N4,N4)类型为bool的三角矩阵A,上三角为True,下三角为False,对角线为True。

    4. 用0填充输入self里面与矩阵A中值为True的位置相对应的元素。

      selfi={selfi,Ai==False0,Ai==Trueself_i= \begin{cases}self_i,\quad A_i==False \\0, \quad A_i==True \end{cases}

    5. 以self的倒数第二维进行cumsum累加。从维度视角来看的某个元素(其它维度下标不变,当前维度下标依次递增),selfTemp_iselfTemp\_{i}是输出张量中对应位置的元素。

      selfTempi=self1+self2+self3+......+selfiselfTemp_{i} = self_{1} + self_{2} + self_{3} + ...... + self_{i}

    6. 生成(N4,N4)类型为bool的三角矩阵B,上三角为True,下三角为False,对角线为False。

    7. 用-inf填充selfTemp里面与矩阵B中值为True的位置相对应的元素。

      outi={selfTempi,Bi==False−inf,Bi==Trueout_i= \begin{cases}selfTemp_i,\quad B_i==False \\-inf, \quad B_i==True \end{cases}

    8. 计算selfTemp里面每个元素的指数。

      outi=eselfTempiout_i=e^{selfTemp_i}

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 进行分段和计算的输入,对应公式中的`self`。 FLOAT32、FLOAT16、BFLOAT16 ND
y 输出 完成分段和计算后的输出,对应公式中的`out`。输出维度必须比输入维度大1,支持4D或5D。当输入`x`为3D时,输出前3维的维度大小与`x`的保持一致,最后1维的维度大小与第3维保持一致。当输入`x`为4D时,输出前4维的维度大小与`x`的保持一致,最后1维的维度大小与第4维保持一致。数据类型与输入`x`的数据类型保持一致。 FLOAT32、FLOAT16、BFLOAT16 ND
  • Kirin X90/Kirin 9030处理器系列产品:不支持BFLOAT16。

约束说明

无

调用说明

调用方式 样例代码 说明
aclnn API test_aclnn_exp_segsum 通过aclnnExpSegsum接口方式调用Segsum算子。