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...归约后结果为a1a2, a3a4, a5a6, ......。图1归约指令示意图针对归约指令和其他的基础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),仅供参考