BlockReduceMin
函数原型
- mask参数逐bit模式
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)
- mask参数连续模式
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 200/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 200/500 A2推理产品,支持的数据类型为:half/float |
repeat |
输入 |
迭代次数。取值范围为[0, 255]。 |
mask[2]/ maskCount |
输入 |
|
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 200/500 A2推理产品
注意事项
- 为了节省地址空间,您可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),需要注意计算后的目的操作数数据不能覆盖未参与计算的源操作数,需要谨慎使用。
- 对于Atlas 200/500 A2推理产品,若配置的mask[2]/maskCount参数后,存在某个datablock里的任何一个元素都不参与计算,则该datablock内所有元素的最小值会填充为inf返回。比如float场景下,当mask配置为32,即只计算前4个datablock,则后四个datablock内的最小值会返回inf。half场景下,最小值会返回65504。
- 操作数地址偏移对齐要求请参见通用约束。
- 针对不同场景合理使用归约指令可以带来性能提升,相关介绍请参考针对不同场景合理使用归约指令,具体样例请参考ReduceCustom。
调用示例
本样例中只展示Compute流程中的部分代码。如果您需要运行样例代码,请将该代码段拷贝并替换样例模板中Compute函数的部分代码即可。
- BlockReduceMin-tensor高维切分计算样例-mask连续模式
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);
- BlockReduceMin-tensor高维切分计算样例-mask逐bit模式
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]