CANN归约计算辅助接口
2026/6/12 6:02:51 网站建设 项目流程

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 Corex
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>ReduceMaxReduceMin的连续计算场景,即调用上述归约接口时参数需满足srcRepStride=8srcBlkStride=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系列归约指令样例。

  1. 调用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的调用次序,而且要配对调用
  2. 调用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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询