当前位置: 首页 > news >正文

CANN/asc-devkit ReduceProd API文档

ReduceProd

【免费下载链接】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 推理系列产品

功能说明

对一个多维向量在指定的维度求积。

定义指定计算的维度(Reduce轴)为R轴,非指定维度(Normal轴)为A轴。如下图所示,对shape为(2, 3)的二维矩阵进行运算,指定在第一维求乘积,输出结果为[4, 10, 18];指定在第二维求乘积,输出结果为[6, 120]。

图 1ReduceProd按第一个维度计算示例
![](https://raw.gitcode.com/cann/asc-devkit/raw/f35dfef9af78af31a0418d6061f7969c5ffc6990/docs/api/context/figures/ReduceProd按第一个维度计算示例.png "ReduceProd按第一个维度计算示例"?utm_source=gitcode_repo_files)

图 2ReduceProd按最后一个维度计算示例
![](https://raw.gitcode.com/cann/asc-devkit/raw/f35dfef9af78af31a0418d6061f7969c5ffc6990/docs/api/context/figures/ReduceProd按最后一个维度计算示例.png "ReduceProd按最后一个维度计算示例"?utm_source=gitcode_repo_files)

函数原型

  • 通过sharedTmpBuffer入参传入临时空间

    template <class T, class pattern, bool isReuseSource = false> __aicore__ inline void ReduceProd(const LocalTensor<T>& dstTensor, const LocalTensor<T>& srcTensor, const LocalTensor<uint8_t>& sharedTmpBuffer, const uint32_t srcShape[], bool srcInnerPad)
  • 接口框架申请临时空间

    template <class T, class pattern, bool isReuseSource = false> __aicore__ inline void ReduceProd(const LocalTensor<T>& dstTensor, const LocalTensor<T>& srcTensor, const uint32_t srcShape[], bool srcInnerPad)

由于该接口的内部实现中涉及复杂的数学计算,需要额外的临时空间来存储计算过程中的中间变量。临时空间支持开发者通过sharedTmpBuffer入参传入接口框架申请两种方式。

  • 通过sharedTmpBuffer入参传入,使用该tensor作为临时空间进行处理,接口框架不再申请。该方式开发者可以自行管理sharedTmpBuffer内存空间,并在接口调用完成后,复用该部分内存,内存不会反复申请释放,灵活性较高,内存利用率也较高。
  • 接口框架申请临时空间,开发者无需申请,但是需要预留临时空间的大小。

通过sharedTmpBuffer传入的情况,开发者需要为tensor申请空间;接口框架申请的方式,开发者需要预留临时空间。临时空间大小BufferSize的获取方式如下:通过GetReduceProdMaxMinTmpSize中提供的接口获取需要预留空间范围的大小。

参数说明

表 1模板参数说明

参数名

描述

T

操作数的数据类型。

Ascend 950PR/Ascend 950DT,支持的数据类型为:float。

Atlas A3 训练系列产品 / Atlas A3 推理系列产品,支持的数据类型为:float。

Atlas A2 训练系列产品 / Atlas A2 推理系列产品,支持的数据类型为:float。

pattern

用于指定ReduceProd计算轴,包括Reduce轴和Normal轴。pattern由与向量维度数量相同的A、R字母组合形成,字母A表示Normal轴,R表示Reduce轴。例如,AR表示对二维向量进行ReduceProd计算:第一维是Normal轴,第二维是Reduce轴,即对第二维数据求积。

pattern是定义在AscendC::Pattern::Reduce命名空间下的结构体,其成员变量用户无需关注。

pattern当前只支持取值为AR和RA,当前用户需要显式指定pattern为AscendC::Pattern::Reduce::AR或者AscendC::Pattern::Reduce::RA。

isReuseSource

是否允许修改源操作数,默认值为false。如果开发者允许源操作数被改写,可以使能该参数,使能后能够节省部分内存空间。

设置为true,则本接口内部计算时复用src的内存空间,节省内存空间;设置为false,则本接口内部计算时不复用src的内存空间。

isReuseSource的使用样例请参考更多样例。

表 2接口参数说明

参数名

输入/输出

描述

dstTensor

输出

目的操作数。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

srcTensor

输入

源操作数。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

源操作数的数据类型需要与目的操作数保持一致。

sharedTmpBuffer

输入

临时缓存。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

用于ReduceProd内部复杂计算时存储中间变量,由开发者提供。

临时空间大小BufferSize的获取方式请参考GetReduceProdMaxMinTmpSize。

srcShape

输入

uint32_t类型的数组,表示源操作数的shape信息。该shape的维度必须和模板参数pattern的维度一致,例如,pattern为AR,该shape维度只能是二维。

Ascend 950PR/Ascend 950DT,当前只支持二维shape。

Atlas A3 训练系列产品 / Atlas A3 推理系列产品,当前只支持二维shape。

Atlas A2 训练系列产品 / Atlas A2 推理系列产品,当前只支持二维shape。

srcInnerPad

输入

表示实际需要计算的最内层轴数据是否32Bytes对齐。

Ascend 950PR/Ascend 950DT,当前只支持true。

Atlas A3 训练系列产品 / Atlas A3 推理系列产品,当前只支持true。

Atlas A2 训练系列产品 / Atlas A2 推理系列产品,当前只支持true。

返回值说明

约束说明

  • 操作数地址对齐要求请参见通用地址对齐约束。
  • 内部算法不处理累乘计算时的数据溢出,溢出场景不保证接口精度。
  • 不支持源操作数与目的操作数地址重叠。
  • 不支持sharedTmpBuffer与源操作数和目的操作数地址重叠。

调用示例

AscendC::LocalTensor<float> dstLocal = outQueue.AllocTensor<float>(); AscendC::LocalTensor<float> srcLocal = inQueue.DeQue<float>(); AscendC::LocalTensor<uint8_t> tmp = tbuf.Get<uint8_t>(); uint32_t shape[] = { 2, 8 }; constexpr bool isReuse = true; AscendC::ReduceProd<float, AscendC::Pattern::Reduce::AR, isReuse>(dstLocal, srcLocal, tmp, shape, true);

结果示例如下:

输入输出的数据类型为float 输入数据(src): [[ 1, 2, 3, 4, 5, 6, 7, 8], [ 1, 2, 0.5, 4, 0.5, 0.5, 5, 6]] 输入pattern:AR 输入shape:(2,8) 输出数据(dst): [40320,30]

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/793350/

相关文章:

  • 开始添加性别+年龄自动识别系统
  • CANN/ops-nn: 原位加法RMS归一化算子
  • 《零基础学GPU KMD》专栏简介
  • Weaviate向量数据库实战:从官方示例到RAG应用开发全解析
  • 2018-11至2025-9 71个主要城市商品房租金均价数据(xlsx)
  • ARM CP15寄存器详解与底层开发实践
  • 【信息科学与工程学】计算机科学与自动化-——第十五篇云计算12- 裸金属
  • LInux常用指令(个人查询用)
  • CANN/ops-nn动态块MX量化算子
  • Payum实战案例:构建支持多种支付方式的电商平台完整指南 [特殊字符]
  • 3D堆叠封装技术:热挑战与优化方案
  • 【数据结构】与排序算法鏖战5天,我终于搞懂了排序的思路和实现--排序算法大全的保姆级攻略
  • 动态紧凑模型在电子热设计中的高效应用
  • ARM GICv3中断控制器与ICC_EOIR1寄存器详解
  • Paris注解处理器深度解析:从@Style到@StyleableChild的完整实现原理
  • 虽然市面上已经有人流量统计摄像头----但是我有价格优势
  • 12,Springboot3+vue3实现系统公告功能
  • 【C++ -Day7】封装实战 | 用类封装日志、配置和文件操作模块
  • 电子热量表设计:PIC16F913微控制器应用与热力计算
  • Scarpet脚本语言深度解析:在Fabric Carpet中编写高级自动化程序的完整指南
  • android C++ opencv 年龄 性别识别深度神经网络模型
  • CANN/asc-devkit向量最小值函数
  • 告别理论!用TI毫米波雷达开发板实测多普勒测速(附Python代码)
  • 从DES到AES:被‘遗忘’的IDEA算法,它的设计思想给现代密码学留下了什么?
  • CTO 每月烧 600 亿 token,3 个月完成百名程序员七八年写的 800 万行代码
  • AI编码助手经验治理:ExperienceEngine解决重复错误与智能进化
  • 2026年AI大模型接口中转站排行榜新鲜出炉!五大平台硬核数据对比,为开发者提供权威选型指南
  • 别再只用Matplotlib画图了!用Python这3个库(SciPy, NumPy, Scikit-learn)给你的数据曲线做个‘美容’
  • CANN/asc-devkit向量减法ReLU函数
  • 我们只能要求手机在拍摄的时候呈现45度-----采用常用模型