vmla
功能说明
当 src0、src1 和 dst 类型相同时(均为 half 或 float),以 block(32Byte)为单位完成两个源数据逐元素相乘后再与目的数据相加,一次完成8个 block 的计算,计算公式如下:
[dst] = [src0] * [src1] + [dst]
当 src0 和 src1 为 half 类型,dst 为 f32 类型时,src0 和 src1 各取低4个 block,合计64个 half 数。高4个 block 被忽略,相乘后与 dst 的64个 f32(8个block)相加。计算公式如下:
[dst(64个f32)] = [src0(低4个block的64个half)] * [src1(低4个block的64个half)] + [dst(64个f32)]
该接口支持通过MASK控制哪些元素参与计算。
接口原型
// 相同接口的不同原型区别在于源地址和目的地址的数据类型不同 void vmla(__ubuf__ half *dst, __ubuf__ half *src0, __ubuf__ half *src1, uint8_t repeat, uint8_t dstBlockStride, uint8_t src0BlockStride, uint8_t src1BlockStride, uint8_t dstRepeatStride, uint8_t src0RepeatStride, uint8_t src1RepeatStride); void vmla(__ubuf__ float *dst, __ubuf__ float *src0, __ubuf__ float *src1, uint8_t repeat, uint8_t dstBlockStride, uint8_t src0BlockStride, uint8_t src1BlockStride, uint8_t dstRepeatStride, uint8_t src0RepeatStride, uint8_t src1RepeatStride); void vmla(__ubuf__ float *dst, __ubuf__ half *src0, __ubuf__ half *src1, uint8_t repeat, uint8_t dstBlockStride, uint8_t src0BlockStride, uint8_t src1BlockStride, uint8_t dstRepeatStride, uint8_t src0RepeatStride, uint8_t src1RepeatStride);
参数说明
参数含义见 表2 双目运算参数说明。
流水类型
PIPE_V
父主题: 双目运算