对每个datablock内所有元素求最小值。归约指令的总体介绍请参考归约指令。
1 2 |
template <typename T, bool isSetMask = true> __aicore__ inline void BlockReduceMin (const LocalTensor<T>& dstLocal, const LocalTensor<T>& srcLocal,const int32_t repeat, const uint64_t mask[], const int32_t dstRepStride, const int32_t srcBlkStride,const int32_t srcRepStride) |
1 2 |
template <typename T, bool isSetMask = true> __aicore__ inline void BlockReduceMin (const LocalTensor<T>& dstLocal, const LocalTensor<T>& srcLocal,const int32_t repeat, const int32_t maskCount, const int32_t dstRepStride, const int32_t srcBlkStride,const int32_t srcRepStride) |
参数名 |
描述 |
---|---|
T |
操作数数据类型。 |
isSetMask |
是否在接口内部设置mask。
|
参数名称 |
输入/输出 |
含义 |
---|---|---|
dstLocal |
输出 |
目的操作数。 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要保证16字节对齐(针对half数据类型),32字节对齐(针对float数据类型)。 Atlas 训练系列产品,支持的数据类型为:half Atlas推理系列产品AI Core,支持的数据类型为:half/float Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/float Atlas 200I/500 A2推理产品,支持的数据类型为:half/float |
srcLocal |
输入 |
源操作数。 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要32字节对齐。 Atlas 训练系列产品,支持的数据类型为:half Atlas推理系列产品AI Core,支持的数据类型为:half/float Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/float Atlas 200I/500 A2推理产品,支持的数据类型为:half/float |
repeat |
输入 |
迭代次数。取值范围为[0, 255]。 关于该参数的具体描述请参考通用参数说明。 |
mask[2]/ maskCount |
输入 |
mask用于控制每次迭代内参与计算的元素。
|
dstRepStride |
输入 |
目的操作数相邻迭代间的地址步长。以一个repeat归约后的长度为单位。 每个repeat(8个datablock)归约后,得到8个元素,所以输入类型为half类型时,RepStride单位为16Byte;输入类型为float类型时,RepStride单位为32Byte。 注意,此参数值Atlas 训练系列产品不支持配置0。 |
srcBlkStride |
输入 |
单次迭代内datablock的地址步长。详细说明请参考dataBlockStride(同一迭代内不同datablock的地址步长)。 |
srcRepStride |
输入 |
源操作数相邻迭代间的地址步长,即源操作数每次迭代跳过的datablock数目。详细说明请参考repeatStride(相邻迭代间相同datablock的地址步长)。 |
无
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200I/500 A2推理产品
本样例中只展示Compute流程中的部分代码。如果您需要运行样例代码,请将该代码段拷贝并替换样例模板中Compute函数的部分代码即可。
1 2 3 4 5 6 |
uint64_t mask = 256/sizeof(half); int repeat = 1; // repeatTimes = 1, 128 elements one repeat, 128 elements total // srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 1, srcRepStride = 8, no gap between repeats AscendC::BlockReduceMin<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8); |
1 2 3 4 5 6 |
uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; int repeat = 1; // repeatTimes = 1, 128 elements one repeat, 128 elements total // srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 1, srcRepStride = 8, no gap between repeats AscendC::BlockReduceMin<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8); |
输入数据(src_gm): [3.902, -8.719, -5.797, -7.969, -9.516, -6.457, 0.1114, 2.781, 4.758, 0.01262, 2.367, 2.16, -4.473, -9.336, -7.375, 6.078, ... 3.621, -5.852, 6.902, 0.332, 1.112, 2.697, -9, 9.938, 4.645, 0.7021, 7.598, 4.586, 0.6431, 4.781, 3.566, 4.004] 输出数据(dst_gm): [-9.516, ..., -9, 0, ..., 0]