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

CANN/asc-devkit归约计算API指南

如何使用归约计算API

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

归约指令将数据集合简化为单一值或者更小的集合。按照归约操作的数据范围的不同,归约指令分为以下几种,可参考归约指令示意图:

  • ReduceMax/ReduceMin/ReduceSum:对所有的输入数据做归约操作,得到最大值和最大值索引/最小值和最小值索引/数据总和。
  • ReduceRepeat:对每个repeat内的输入数据做归约操作,根据模板参数ReduceType指定求最大值/最小值/求和,得到每个repeat内的最大值和最大值索引/最小值和最小值索引/数据总和。返回索引时返回的是repeat内部索引。
  • ReduceDataBlock:对每个DataBlock内的输入数据做归约操作,根据模板参数ReduceType指定求最大值/最小值/求和,得到每个DataBlock内的最大值/最小值/数据总和。
  • ReducePairElem:对相邻两个(奇偶)元素进行归约操作,当前仅支持根据模板参数ReduceType::SUM求和,例如(a1, a2, a3, a4, a5, a6...),归约后结果为(a1+a2, a3+a4, a5+a6, ......)。

图1归约指令示意图
![](https://raw.gitcode.com/cann/asc-devkit/raw/ded540824a702f5cab69a36879315c31ce8ff9b7/docs/zh/guide/figures/Reduce_summary.png "归约指令示意图"?utm_source=gitcode_repo_files)

针对归约指令,和其他的基础API一样也提供了tensor高维切分计算接口,可充分发挥硬件优势,支持开发者控制指令的迭代执行和操作数的地址间隔,功能更加灵活。但具体参数的单位和约束与基础API略有不同,下文将对这些差异点进行介绍。

  • mask:用于控制每次迭代内参与计算的元素,mask参数的使用方法和基础API通用的使用方法一致。

  • repeatTime:迭代次数,开发者通过repeatTime来配置迭代次数,从而控制指令的多次迭代执行。

    • ReduceMax/ReduceMin/ReduceSum对于repeatTime超过255的情况,在API内部进行了处理,所以repeatTime支持更大的取值范围,保证不超过int32_t最大值的范围即可。
    • ReduceRepeat/ReduceDataBlock/ReducePairElem和其他基础API一样,repeatTime要求不超过255。
  • repeatStride:表示相邻迭代间的地址步长。

    • ReduceMax/ReduceMin/ReduceSum指令的目的操作数会归约成一个最大值/最小值/总和,所以其目的操作数不支持配置repeatStride。仅源操作数支持repeatStride,其含义、单位(datablock)和基础API通用说明一致。
    • ReduceRepeat/ReduceDataBlock/ReducePairElem源操作数和目的操作数都支持配置repeatStride,源操作数repeatStride的含义、单位(DataBlock)和基础API通用说明一致。目的操作数repeatStride的含义、单位和基础API通用说明有差异,因为归约后,目的操作数的长度会变短,比如ReduceRepeat归约后每个repeat会合并为一个值,所以迭代之间的间隔不能再使用一个DataBlock为单位,而以一个repeat归约后的长度为单位。
  • dataBlockStride:表示单次迭代内datablock的地址步长。

    • ReduceMax/ReduceMin/ReduceSum指令的目的操作数会归约成一个最大值/最小值/总和,所以其目的操作数不支持配置dataBlockStride。源操作数也不支持dataBlockStride。
    • ReduceRepeat/ReduceDataBlock/ReducePairElem源操作数支持配置dataBlockStride,源操作数dataBlockStride的含义、单位(DataBlock)和基础API通用说明一致。目的操作数不支持dataBlockStride,因为归约后,目的操作数的长度会变短,比如ReduceRepeat归约后每个repeat会合并为一个值,不再有迭代内DataBlock和地址间隔的概念。

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

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

http://www.cnnetsun.cn/news/3485736.html

相关文章:

  • Apple Developer Roadmap:如何实现用户认证与安全登录功能的终极指南
  • AM62L处理器DPHY与TRNG寄存器配置实战:从硬件接口到安全编程
  • 3个实际问题告诉你为什么需要GPyTorch:从传统机器学习到贝叶斯优化的跨越
  • DockDoor:macOS窗口预览神器,让你的多任务管理效率翻倍
  • nftables-blacklist监控与日志:如何查看被拦截的恶意IP流量
  • Unity-MCP测试策略:如何构建完整的AI开发测试循环确保功能可靠性
  • GigaAM Multilingual模型家族全面对比:ssl/ctc/large_ssl/large_ctc如何选择?终极指南
  • d3.chart与D3.js对比:为什么可复用框架能提升开发效率3倍?
  • 构建企业级Facebook数据爬虫:高性能Python爬虫架构实战指南
  • 模型预测控制(MPC)入门指南:awesome-control-theory资源精选
  • 突破黑箱优化瓶颈:贝叶斯优化算法的高效实战指南
  • Windows防休眠工具NoSleep:告别系统自动锁屏的智能解决方案
  • 如何从零开始撰写专业README?ud777-writing-readmes项目的10个实用技巧
  • Electron-Nuxt持续集成:GitHub Action自动化构建完整配置
  • QQ群年度报告分析器:一键解锁QQ群年度热词,轻松生成可视化报告
  • ProcessWire高级开发技巧:10个提升效率的专家级方法
  • 深入解析EDMA核心寄存器:DRAEM、QRAEN与QSTATN的安全隔离与状态监控
  • Dante Cloud密钥管理:敏感信息的加密存储与使用
  • LLM Space vs 传统Agent开发工具:7大核心优势深度解析
  • AM62L硬件防火墙配置实战:从寄存器到系统安全纵深防御
  • N_m3u8DL-CLI-SimpleG:图形化M3U8视频下载器的终极使用指南
  • 深度解析SMUDebugTool:AMD Ryzen处理器硬件级调试实战手册
  • ExpressWorks离线学习配置:如何在没有网络的情况下完成所有Express.js练习
  • tmux2html动画功能揭秘:轻松创建终端操作的动态演示
  • 【紧急预警】Cursor 0.42+版本存在CPU占用突增漏洞!附MITRE ATTCK式性能基线检测方案
  • 5个专业技巧:彻底掌握StreamFX直播特效插件
  • 如何搭建企业级离线翻译服务?LibreTranslate 1.9.6三大实战方案揭秘
  • CSS-Sprite实战案例:电商网站图标优化方案
  • 如何高效管理数据库连接:专业级MCP Toolbox完整实战指南
  • CANN/asc-devkit:SIMT半精度转换函数