GetReduceRepeatMaxMinSpr(ISASI)
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | x |
| Atlas 推理系列产品 AI Core | √ |
| Atlas 推理系列产品 Vector Core | x |
| Atlas 训练系列产品 | x |
功能说明
头文件路径为:"basic_api/kernel_operator_vec_reduce_intf.h"。
本接口用于获取调用ReduceRepeat<MAX/MIN>时所有repeat内的最值及其索引,或获取调用ReduceMax/ReduceMin得到的最值。计算结果以全局变量形式存储,可以随时调用获取。
函数原型
获取调用ReduceRepeat<MAX/MIN>时所有repeat内的最值及其索引,或获取调用ReduceMax/ReduceMin得到的最值(此时获取的索引不准确)。该函数原型仅支持如下型号:
- Ascend 950PR/Ascend 950DT
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
template <typename T> __aicore__ inline void GetReduceRepeatMaxMinSpr(T &maxMinValue, T &maxMinIndex)
获取调用ReduceRepeat<MAX/MIN>时所有repeat内的最值,或获取调用ReduceMax/ReduceMin得到的最值。该函数原型仅支持Atlas 推理系列产品 AI Core。
template <typename T> __aicore__ inline void GetReduceRepeatMaxMinSpr(T &maxMinValue)
参数说明
表 1模板参数说明
| 参数名 | 描述 |
|---|---|
| T | 操作数数据类型。 |
表 2参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| maxMinValue | 输出 | 调用ReduceRepeat<MAX/MIN>时所有repeat内的最值,或调用ReduceMax/ReduceMin得到的最值。 |
| maxMinIndex | 输出 | 调用ReduceRepeat<MAX/MIN>时所有repeat内的最值索引。 |
数据类型
操作数支持的数据类型为:half/float。
返回值说明
无
约束说明
- 仅支持
ReduceRepeat<MAX/MIN>、ReduceMax、ReduceMin的连续计算场景,即调用上述归约接口时参数需满足srcRepStride=8、srcBlkStride=1。 - 不支持获取归约接口使用Mask Counter模式时的结果。
- 用于ReduceMax/ReduceMin场景时,仅可获取准确最值,不能获取对应的准确索引;如需准确索引,以ReduceMax/ReduceMin自身输出为准。
- 索引
maxMinIndex按操作数数据类型存储,比如操作数使用half类型时,maxMinIndex是按照half类型进行存储的,如果按照half格式进行读取,maxMinIndex的值是不对的,因此maxMinIndex的读取需要使用reinterpret_cast方法转换到整数类型,若输入数据类型是half,需要使用reinterpret_cast<uint16_t*>,若输入是float,需要使用reinterpret_cast<uint32_t*>。 - 操作数数据类型T,需要与所使用的归约接口目的操作数数据类型一致,否则会导致精度错误。
调用示例
具体可参考ReduceRepeat系列归约指令样例。
调用
ReduceRepeat<MAX>后,所有repeat内的最大值及索引。针对如下型号:
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
AscendC::LocalTensor<float> src; AscendC::LocalTensor<float> dst; int32_t mask = 64; float val = 0; // 最大值 float idx = 0; // 最大值索引 AscendC::ReduceRepeat<AscendC::ReduceType::MAX>(dst, src, mask, 1, 1, 1, 8); AscendC::GetReduceRepeatMaxMinSpr<float>(val, idx); // 保证和ReduceRepeat的调用次序,而且要配对调用
针对Atlas 推理系列产品 AI Core:
AscendC::LocalTensor<float> src; AscendC::LocalTensor<float> dst; int32_t mask = 64; AscendC::ReduceRepeat<AscendC::ReduceType::MAX>(dst, src, mask, 1, 1, 1, 8); float val = 0; // 最大值 AscendC::GetReduceRepeatMaxMinSpr<float>(val); // 保证和ReduceRepeat的调用次序,而且要配对调用
调用
ReduceMax后,获取最大值。针对如下型号,
GetReduceRepeatMaxMinSpr仅用于获取最大值,不能用于获取ReduceMax对应的准确索引。- Ascend 950PR/Ascend 950DT
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
AscendC::LocalTensor<float> src; AscendC::LocalTensor<float> work; AscendC::LocalTensor<float> dst; int32_t mask = 64; AscendC::ReduceMax(dst, src, work, mask, 1, 8, true); // 连续场景,srcRepStride = 8,且calIndex = true float val = 0; // 最大值 float idx = 0; // 不用于获取ReduceMax对应的准确索引 AscendC::GetReduceRepeatMaxMinSpr<float>(val, idx); // 保证和ReduceMax的调用次序,而且要配对调用
针对Atlas 推理系列产品 AI Core版本,可在调用
ReduceMax后直接调用GetReduceRepeatMaxMinSpr指令获取最大值。AscendC::LocalTensor<float> src; AscendC::LocalTensor<float> work; AscendC::LocalTensor<float> dst; int32_t mask = 64; AscendC::ReduceMax(dst, src, work, mask, 1, 8, true); float val = 0; // 最大值 AscendC::GetReduceRepeatMaxMinSpr<float>(val); // 保证和ReduceMax的调用次序,而且要配对调用
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考