BlockReduceMin
产品支持情况
功能说明
对每个datablock内所有元素求最小值。归约指令的总体介绍请参考如何使用归约计算API。
函数原型
-
mask参数逐bit模式
template <typename T, bool isSetMask = true> __aicore__ inline void BlockReduceMin(const LocalTensor<T>& dst, const LocalTensor<T>& src,const int32_t repeatTime, const uint64_t mask[], const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride) -
mask参数连续模式
template <typename T, bool isSetMask = true> __aicore__ inline void BlockReduceMin(const LocalTensor<T>& dst, const LocalTensor<T>& src,const int32_t repeatTime, const int32_t mask, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)
参数说明
表 1 模板参数说明
|
Ascend 950PR/Ascend 950DT,支持的数据类型为:half/float |
|
|
表 2 参数说明
|
类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 |
||
|
类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 |
||
|
||
目的操作数相邻迭代间的地址步长。以一个repeatTime归约后的长度为单位。 每个repeat(8个datablock)归约后,得到8个元素,所以源操作数类型为half类型时,RepStride单位为16Byte;源操作数类型为float类型时,RepStride单位为32Byte。 |
||
单次迭代内datablock的地址步长。详细说明请参考dataBlockStride。 |
||
源操作数相邻迭代间的地址步长,即源操作数每次迭代跳过的datablock数目。详细说明请参考repeatStride。 |
返回值说明
无
约束说明
-
操作数地址对齐要求请参见通用地址对齐约束。
-
为了节省地址空间,您可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),需要注意计算后的目的操作数数据不能覆盖未参与计算的源操作数,需要谨慎使用。
-
针对不同场景合理使用归约指令可以带来性能提升,具体样例请参考ReduceCustom。
调用示例
本样例中只展示Compute流程中的部分代码。如果您需要运行样例代码,请将该代码段拷贝并替换样例模板中Compute函数的部分代码即可。
-
BlockReduceMin-tensor高维切分计算样例-mask连续模式
int32_t mask = 256/sizeof(half); int repeat = 1; // repeatTime = 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模式
uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; int repeat = 1; // repeatTime = 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]