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

cann/asc-devkit 元素对归约

ReducePairElem

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品 AI Core
Atlas 推理系列产品 Vector Corex
Atlas 训练系列产品

功能说明

头文件路径为:"basic_api/kernel_operator_vec_reduce_intf.h"

ReducePairElem接口根据模板参数reduceType,对相邻两个(奇偶)元素进行归约操作,结果按顺序写入目标地址。当前仅支持求和操作。

例如,[a1, a2, a3, a4, a5, a6, ...]的求和结果为[a1+a2, a3+a4, a5+a6, ...]。计算过程如下图所示,灰色部分代表无效元素。

图 1ReducePairElem<ReduceType::SUM>示意图

![ReducePairElem<ReduceType::SUM>示意图](https://raw.gitcode.com/cann/asc-devkit/raw/1ea24e5536a6095446f2c42868e8b9f2d6dafdcc/docs/api/figures/ReducePairElem.png "ReducePairElemReduceType::SUM示意图"?utm_source=gitcode_repo_files)

函数原型

  • mask逐bit模式:

    template <ReduceType reduceType, typename T, typename U, bool isSetMask = true> __aicore__ inline void ReducePairElem(const LocalTensor<T>& dst, const LocalTensor<U>& src, const uint64_t mask[],const int32_t repeatTime, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)
  • mask连续模式:

    template <ReduceType reduceType, typename T, typename U, bool isSetMask = true> __aicore__ inline void ReducePairElem(const LocalTensor<T>& dst, const LocalTensor<U>& src, const int32_t mask, const int32_t repeatTime, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)

参数说明

表 1模板参数说明

参数名描述
reduceType归约操作类型。
类型为ReduceType枚举类型,支持:
ReduceType::SUM:求和。
T目的操作数数据类型。
U源操作数数据类型。
isSetMask是否在接口内部设置mask,默认为true
true,表示在接口内部设置mask
false,表示在接口外部设置mask,开发者需要使用SetVectorMask接口设置mask值。这种模式下,本接口入参中的mask值必须设置为占位符MASK_PLACEHOLDER

表 2参数说明

参数名称输入/输出含义
dst输出目的操作数。
类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT(存储位置为Unified Buffer)。
src输入源操作数。
类型为LocalTensor,支持的TPosition为VECIN、VECCALC、VECOUT(存储位置为Unified Buffer)。
mask[]/mask输入mask用于控制每次迭代内参与计算的源操作数。详细设置参考掩码概述。
repeatTime输入迭代次数。取值范围为[0, 255]。
dstRepStride输入目的操作数相邻迭代间的地址步长,以一个repeatTime归约后的长度为单位,即128字节。取值范围为[0, $2^{16}-1$]。
注意,此参数值Atlas 训练系列产品不支持配置0。
srcBlkStride输入单次迭代内DataBlock的地址步长,单位为32字节。取值范围为[0, $2^{16}-1$]。
srcRepStride输入源操作数相邻迭代间的地址步长,即源操作数每次迭代跳过的DataBlock数目。取值范围为[0, $2^{16}-1$]。

注:以上高维切分相关参数maskrepeatTimedstRepStridesrcBlkStridesrcRepStride请参考高维切分中的介绍。

数据类型

支持的数据类型如下:

  • Ascend 950PR/Ascend 950DT,支持half、float。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持half、float。
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持half、float。
  • Atlas 200I/500 A2 推理产品,支持half、float。
  • Atlas 推理系列产品 AI Core,支持half、float。
  • Atlas 训练系列产品,支持half。

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

返回值说明

约束说明

  • 操作数的起始地址对齐约束请参考通用地址对齐约束,需要32字节对齐。
  • 操作数地址重叠约束请参考通用地址重叠约束。
  • dstRepStridesrcBlkStridesrcRepStride取值范围为[0, $2^{16}-1$],需要结合UB的实际大小避免出现越界。
  • 针对如下型号,当mask=0repeatTime=0时,不会执行归约操作,不会对目的操作数进行写入,该接口将被视为NOP(空操作)。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品
  • 针对如下型号,当一对相邻元素的掩码均为0,对应的目的元素将跳过写入,保持不变。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品
    • Atlas 200I/500 A2 推理产品
    • Atlas 推理系列产品 AI Core
    • Atlas 训练系列产品
  • 对于Atlas 200I/500 A2 推理产品,当一对相邻元素的掩码均为0,对应的目的操作数中的值会置为0。

调用示例

本样例中只展示Compute流程中的部分代码。更多样例可参考ReducePairElem样例。

  • ReducePairElemtensor高维切分计算样例-mask连续模式:

    // 设定mask为最多的128个全部元素参与计算 int32_t mask = 256/sizeof(half); // 每个repeat128个元素,一共128个元素。 int repeat = 1; // dstLocal: 目的操作数tensor // srcLocal: 源操作数tensor // srcBlkStride = 1,在一个repeat中,block间没有空隙。 // dstRepStride = 1,srcRepStride = 8,repeat间没有空隙。 AscendC::ReducePairElem<AscendC::ReduceType::SUM, half>(dstLocal, srcLocal, mask, repeat, 1, 1, 8);
  • ReducePairElemtensor高维切分计算样例-mask逐bit模式:

    // 设定mask为最多的128个全部元素参与计算 uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; // 每个repeat128个元素,一共128个元素。 int repeat = 1; // dstLocal: 目的操作数tensor // srcLocal: 源操作数tensor // srcBlkStride = 1,在一个repeat中,block间没有空隙。 // dstRepStride = 1,srcRepStride = 8,repeat间没有空隙。 AscendC::ReducePairElem<AscendC::ReduceType::SUM, half>(dstLocal, srcLocal, mask, repeat, 1, 1, 8);
  • 示例结果

    输入数据src_gm:

    [1, 1, 1, -1, 2, 2, -1, 2, 3, 3, 3, -1, 4, 4, -2, 4, .... > > ]

    输出数据dst_gm:

    [2, 0, 4, 1, 6, 2, 8, 2, .... > > ]

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

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

相关文章:

  • 你还在手动截图代码?Cursor AI原生导出功能深度解锁(附VS Code无法实现的3大导出特权)
  • CANN/asc-devkit:GetTPipePtr函数
  • HAM测试指南:编写高质量单元测试与集成测试的最佳实践
  • Jido配置系统详解:默认配置与自定义配置最佳实践
  • 如何三步永久备份微信聊天记录?WeChatMsg免费工具完整指南
  • ChatGPT-Academic-Prompt高级应用:论文摘要优化与逻辑提升技巧
  • xfce桌面旋转说明:基于灵眸科技EASY-EAI-Nano-TB
  • 2026详细解读八字排盘App怎么选:看盘面依据、AI辅助和复盘边界
  • 知乎数据采集利器:zhihu-spider开源爬虫实战指南
  • CANN/asc-devkit Tiling成员获取
  • 番茄小说本地下载器:让你的阅读永不掉线,永久珍藏每一本好书
  • CANN/asc-devkit HCCL SetCcTilingV2接口
  • Fixie高级自定义:创建自己的测试发现和执行策略
  • 企业微信H5微应用:JS-SDK签名风暴防御与SPA路由状态机
  • CANN/asc-devkit TBuf Get方法文档
  • 齿轮360°环绕式全自动视觉检测系统介绍
  • las点云数据转3dtiles实现(c++)
  • 故障积累——RAM存储的
  • CANN/Ascend C GetBaseK API
  • 昇腾CANN/asc-devkit自定义TBufPool初始化
  • 【小程序计算机毕业设计案例】基于 SpringBoot 小程序的知识点考核答题系统的设计与实现 在线练习打卡系统(程序+文档+讲解+定制)
  • 计算机毕业设计之基于SpringBoot和Vue的大学生图书馆座位预约系统
  • 一站式Markdown浏览器插件:革命性文档阅读体验的终极解决方案
  • ChatGPT写代码正在淘汰“Ctrl+C/V工程师”?(2024 Stack Overflow开发者能力断层报告首发)
  • MDK4 IDS隐身技术:幽灵模式和分片攻击绕过安全检测的实战技巧
  • 终极指南:5分钟免费检测GPU内存稳定性,告别硬件故障
  • 从Offer拒信到加薪37%,ChatGPT谈判链路全拆解:含HR内部评分表映射逻辑
  • AMD Ryzen SMUDebugTool:免费开源硬件调优终极指南
  • 边缘 AI 推理框架(TensorRT/ONNX Runtime/OpenVINO)选哪个?
  • 朝鲜 AI 赋能网络攻击背景下韩国军方网络安全困境与全域防御体系研究