CANN/asc-devkit AddrReg地址寄存器API
AddrReg【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit功能说明AddrReg即为Address Register地址寄存器是用于存储地址偏移量的寄存器。AddrReg应该通过CreateAddrReg API初始化然后在循环之中使用AddrReg存储地址偏移量。AddrReg在每层循环中根据所设置的stride进行自增。函数原型// offset index0 * stride0 template typename T __simd_callee__ inline AddrReg CreateAddrReg(uint16_t index0, uint32_t stride0); // offset index0 * stride0 index1 * stride1 template typename T __simd_callee__ inline AddrReg CreateAddrReg(uint16_t index0, uint32_t stride0, uint16_t index1, uint32_t stride1); // offset index0 * stride0 index1 * stride1 index2 * stride2 template typename T __simd_callee__ inline AddrReg CreateAddrReg(uint16_t index0, uint32_t stride0, uint16_t index1, uint32_t stride1, uint16_t index2, uint32_t stride2); // offset index0 * stride0 index1 * stride1 index2 * stride2 index3 * stride3 template typename T __simd_callee__ inline AddrReg CreateAddrReg(uint16_t index0, uint32_t stride0, uint16_t index1, uint32_t stride1, uint16_t index2, uint32_t stride2, uint16_t index3, uint32_t stride3);参数说明参数含义T模板参数支持的数据类型为b8/b16/b32/b64。index0计算偏移量时作为轴1偏移量计算公式参考注释。index1计算偏移量时作为轴2偏移量计算公式参考注释。index2计算偏移量时作为轴3偏移量计算公式参考注释。index3计算偏移量时作为轴4偏移量计算公式参考注释。stride0地址偏移量1stride1地址偏移量2stride2地址偏移量3stride3地址偏移量4支持的型号Ascend 950PR/Ascend 950DT约束说明无调用示例__simd_vf__ inline void CreateAddrRegVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t oneRepeatSize, uint16_t repeatTimes) { AscendC::Reg::MaskReg mask AscendC::Reg::CreateMaskT(); AscendC::Reg::AddrReg aReg; for (uint16_t i 0; i repeatTimes; i) { aReg AscendC::Reg::CreateAddrRegT(i, oneRepeatSize); AscendC::Reg::LoadAlign(mask, srcAddr, aReg); AscendC::Reg::StoreAlign(dstAddr, mask, aReg); } }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考