CANN/asc-devkit原子操作概述
原子操作概述【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit数据搬运随路原子操作接口用于对后续目的地址为GM的数据搬运开启原子操作涉及的接口请参见表1。如下图1的左侧子图所示未开启原子操作时写入GM的数据搬运完成后GM中原始数据将被新搬运数据完全覆盖。如图1右侧子图所示当数据搬运随路原子操作接口被调用后系统将为后续写入GM的数据搬运开启原子操作。此时数据搬运完成后GM中的最终数据由原始GM数据与新搬运数据共同决定。图1数据搬运随路原子累加效果表1数据搬运随路原子操作接口对应接口接口功能描述SetAtomicAdd对后续目的地址为GM的数据搬运开启原子累加。原子累加过程将待拷贝的内容和GM已有内容进行求和然后将求和结果写入GM。SetAtomicType通过设置模板参数来设定原子操作不同的数据类型。DisableDmaAtomic关闭数据搬运随路原子操作功能。SetAtomicMax(ISASI).md)设置后续搬运到GM的数据是否执行原子比较将待拷贝的内容和GM已有内容进行比较然后将最大值写入GM。SetAtomicMin(ISASI).md)设置后续搬运到GM的数据是否执行原子比较将待拷贝的内容和GM已有内容进行比较然后将最小值写入GM。SetStoreAtomicConfig(ISASI).md)设置数据搬运的原子操作配置。GetStoreAtomicConfig(ISASI).md)获取数据搬运的原子操作配置。针对Ascend 950PR/Ascend 950DT新增Scalar原子操作接口能够在指定GM地址上进行单点原子计算操作涉及的接口请参见表2。对比数据搬运随路原子操作接口Scalar原子操作接口不会影响后续向GM搬运数据的指令。如下图2左侧子图所示不使用AtomicAdd接口时多个AI Core同时对同一GM地址执行累加操作会相互覆盖操作不具备原子性最终结果不可预期。如右侧子图所示使用AtomicAdd接口后各AI Core的累加操作串行化执行确保每次累加操作的原子性最终结果符合预期。图2标量原子累加效果表2Scalar原子操作接口对应接口接口功能描述AtomicAdd用于在指定GM地址上进行原子加操作将address指向的GM地址上的旧值old_value与输入标量值value求和将和结果new_value写回GM地址返回该地址修改前的值old_value。AtomicMin用于在指定GM地址上进行原子取最小值操作将address指向的GM地址上的旧值old_value与输入标量值value做比较将较小值new_value写回GM地址返回该地址修改前的值old_value。AtomicMax用于在指定GM地址上进行原子取大操作将address指向的GM地址上的旧值old_value与输入的标量值value进行比较将较大值new_value写回GM地址返回该地址修改前的值old_value。AtomicCas在指定GM地址上进行原子比较操作读取address指向的GM地址上的旧值old_value与输入标量值value1进行比较如果相等则将输入标量值value2写入GM地址如果不相等则GM地址上的值保持不变。返回该地址修改前的值old_value。AtomicExch用于在GM内存中执行原子交换操作读取address指向的GM地址上的旧值old_value并将输入的标量值value替换旧值存储回同一地址返回该地址修改前的值old_value。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考