CANN asc-devkit原子最小操作API文档

发布时间:2026/7/16 19:47:12
CANN asc-devkit原子最小操作API文档 SetAtomicMin(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 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明头文件路径为basic_api/kernel_operator_set_atomic_intf.h。设置后续搬运到GM的数据是否执行原子比较将待拷贝的内容和GM已有内容进行比较然后将最小值写入GM。SetAtomicMin接口可通过设置模板参数来设定不同的数据类型。函数原型template typename T __aicore__ inline void SetAtomicMin()参数说明表1模板参数说明参数名描述T设定不同的原子最小操作数据类型。数据类型支持的数据类型为int8_t、int16_t、half、bfloat16_t、int32_t、float。返回值说明无约束说明Ascend 950PR/Ascend 950DT支持的数据通路为UB/L0C Buffer-GM。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持的数据通路为UB/L0C Buffer/L1 Buffer-GM。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持的数据通路为UB/L0C Buffer/L1 Buffer-GM。使用完后建议通过DisableDmaAtomic关闭原子最小操作以免影响后续相关功能。该接口执行前不会自动清零GM数据。开发者需根据算子逻辑判断是否清零如需清零请在执行前手动完成。SetAtomicMin内部已集成与SetAtomicType相同的功能。建议调用上述接口时通过设置模板参数显式指定原子操作的数据类型无需额外调用SetAtomicType接口。调用示例#include kernel_operator.h constexpr uint32_t SIZE 256; __aicore__ inline void CopyIn() { AscendC::LocalTensorT srcLocal queueSrc.AllocTensorT(); // 清空原子操作的状态 AscendC::DisableDmaAtomic(); AscendC::DataCopy(srcLocal, srcGlobal, SIZE); queueSrc.EnQue(srcLocal); // 核间同步 AscendC::SyncAll(); } __aicore__ inline void CopyOut() { AscendC::LocalTensorT srcLocal queueSrc.DeQueT(); // 开启原子MIN模式3个核取最小值 AscendC::SetAtomicMinT(); AscendC::DataCopy(dstGlobal, srcLocal, SIZE); // 关闭原子操作 AscendC::DisableDmaAtomic(); queueSrc.FreeTensor(srcLocal); } /* 每个核的输入数据为: Src0: [1,1,1,1,1,...,1] // 256个1 Src1: [2,2,2,2,2,...,2] // 256个2 最终输出数据: [1,1,1,1,1,...,1] // 256个1 */完整样例请参考DataMovementWithAtomicOperations样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考