昇腾社区首页
中文
注册
开发者
下载

vcadd

功能说明

累加src中的所有元素。根据mode控制位,将计算结果输出到dst或SPR.ACC_VAL(可通过 int64_t get_acc_val() 获取)。

如果mode为0,在每次迭代中,该接口将生成一个累加结果并写入dst,而SPR.ACC_VAL保持不变。

如果mode为1,该接口将仅在所有迭代结束后生成一个最终的累加结果,并将其写入SPR.ACC_VAL,而不会写入 dst。对于SPR.ACC_VAL,其值在vcadd接口执行完毕后保持不变,直到有另一个 mode为1的vcadd接口被执行时,其值才会先被清零,然后由mode为1的vcadd接口进一步更新。

result = sum([src])

以block(32Byte)为单位完成向量的累加,每次迭代计算结果为8个block(256Byte)的累加值。

该接口支持通过MASK控制哪些元素参与计算。

接口原型

// 相同接口的不同原型区别在于源地址和目的地址的数据类型不同
void vcadd(__ubuf__ half *dst, __ubuf__ half *src, uint8_t repeat, uint16_t dstRepeatStride, uint16_t srcBlockStride, uint16_t srcRepeatStride, bool mode);

void vcadd(__ubuf__ float *dst, __ubuf__ float *src, uint8_t repeat, uint16_t dstRepeatStride, uint16_t srcBlockStride, uint16_t srcRepeatStride, bool mode);

参数说明

参数含义见表1 单目运算参数说明表

表1 vcadd 特有参数说明

参数名

说明

取值范围

mode

  • 为 false 时,计算结果会输出到当前迭代的目的地址。
  • 为 true 时,会计算所有迭代的累加结果到SPR.ACC_VAL,该结果可通过int64_t get_acc_val() 接口获取。

[0, 1]

表2 vcadd 步长说明

数据类型

目的数据

源数据

dstBlockStride

dstRepeatStride

srcBlockStride

srcRepeatStride

f16

/

2B

32B

32B

f32

/

4B

32B

32B

流水类型

PIPE_V