MulCast
产品支持情况
产品 |
是否支持 |
---|---|
|
√ |
|
√ |
|
√ |
|
√ |
|
x |
|
x |
|
x |
功能说明
按元素求积,并根据源操作数和目的操作数Tensor的数据类型进行精度转换。计算公式如下:
函数原型
- tensor前n个数据计算
1 2
template <typename T, typename U> __aicore__ inline void MulCast(const LocalTensor<T> &dst, const LocalTensor<U> &src0, const LocalTensor<U> &src1, uint32_t count)
- tensor高维切分计算
- mask逐bit模式
1 2
template <typename T, typename U> __aicore__ inline void MulCast(const LocalTensor<T> &dst, const LocalTensor<U> &src0, const LocalTensor<U> &src1, uint64_t mask[], const uint8_t repeatTime, const BinaryRepeatParams &repeatParams)
- mask连续模式
1 2
template <typename T, typename U> __aicore__ inline void MulCast(const LocalTensor<T> &dst, const LocalTensor<U> &src0, const LocalTensor<U> &src1, uint64_t mask, const uint8_t repeatTime, const BinaryRepeatParams &repeatParams)
- mask逐bit模式
参数说明
参数名 |
描述 |
---|---|
T |
目的操作数数据类型。不同数据类型对应的精度转换规则见表3。 |
U |
源操作数数据类型。 |
参数名 |
输入/输出 |
描述 |
---|---|---|
dst |
输出 |
目的操作数。 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要32字节对齐。 |
src0、src1 |
输入 |
源操作数。 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要32字节对齐。 |
count |
输入 |
参与计算的元素个数。 |
mask[]/mask |
输入 |
|
repeatTime |
输入 |
重复迭代次数。矢量计算单元,每次读取连续的256Bytes数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。 |
repeatParams |
输入 |
控制操作数地址步长的参数。BinaryRepeatParams类型,包含操作数相邻迭代间相同datablock的地址步长,操作数同一迭代内不同datablock的地址步长等参数。 相邻迭代间的地址步长参数说明请参考repeatStride;同一迭代内DataBlock的地址步长参数说明请参考dataBlockStride。 |
返回值说明
无
调用示例
- tensor高维切分计算样例-mask连续模式
1 2 3 4 5 6
uint64_t mask = 128; // repeatTime = 4,一次迭代计算128个数,共计算512个数 // dstBlkStride, src0BlkStride, src1BlkStride = 1,单次迭代内数据连续读取和写入 // dstRepStride = 4,相邻迭代间数据连续写入 // src0RepStride, src1RepStride = 8,相邻迭代间数据连续读取 AscendC::MulCast(dstLocal, src0, src1Local, mask, repeatTime, repeatParams);
- tensor高维切分计算样例-mask逐bit模式
1 2 3 4 5 6
uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; // repeatTime = 4,一次迭代计算128个数,共计算512个数 // dstBlkStride, src0BlkStride, src1BlkStride = 1,单次迭代内数据连续读取和写入 // dstRepStride = 4,相邻迭代间数据连续写入 // src0RepStride, src1RepStride = 8,相邻迭代间数据连续读取 AscendC::MulCast(dstLocal, src0, src1Local, mask, repeatTime, repeatParams);
- tensor前n个数据计算样例
1
AscendC::MulCast(dstLocal, src0, src1Local, 512);
输入数据src0: [1 -2 3 ... -6] 输入数据src1Local: [1 3 -4 ... 5] 输出数据dstLocal: [1 -6 -12 ... -30]