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

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