非连续对齐搬入【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品xAtlas A2 训练系列产品 / Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品x功能说明Reg矢量计算数据搬运接口适用于从UB非连续对齐搬入RegTensor以DataBlock为单位。函数原型// 正常场景 template typename T DefaultType, DataCopyMode dataMode, typename U __simd_callee__ inline void LoadAlign(U dstReg, __ubuf__ T* srcAddr, uint32_t dataBlockStride, MaskReg mask); // POST_MODE_UPDATE场景 template typename T DefaultType, DataCopyMode dataMode, PostLiteral postMode, typename U __simd_callee__ inline void LoadAlign(U dstReg, __ubuf__ T* srcAddr, uint32_t dataBlockStride, uint32_t repeatStride, MaskReg mask);参数说明表 1DataCopyMode模板参数说明DataCopyMode取值含义DATA_BLOCK_COPY用来在非连续对齐场景选择搬运模式。当前仅支持DataBlock搬运模式即以DataBlock为粒度进行搬运。表 2参数说明参数名输入/输出描述T输入模板参数支持的数据类型为b8/b16/b32。postMode输入用于控制是否使能post updatePostLiteral类型。U输入RegTensor类型 例如RegTensorhalf由编译器自动推导用户不需要填写。dstReg输出目的操作数类型为RegTensor。srcAddr输入/输出源操作数在UB上的起始地址。dataBlockStride输入单次搬运相邻DataBlock间的间隔前面一个DataBlock的头与后面DataBlock的头的间隔单位为DataBlock。repeatStride输入POST_MODE_NORMAL与POST_MODE_UPDATE场景下repeatStride含义不一致。POST_MODE_NORMAL场景实际搬运UB起始地址为srcAddr repeatStride * 32。POST_MODE_UPDATE场景实际搬运UB起始地址为srcAddr搬运后执行地址更新srcAddr repeatStride * 32。mask输入MaskReg类型指示在搬运过程中哪些DataBlock有效。某个DataBlock在mask寄存器中对应的32bit有任意一位为1该DataBlock对应的数据会搬入到dst。某个DataBlock在mask寄存器中对应的32bit全为0时该DataBlock对应的数据不会被读取对应位置的dst设置为0即使该UB越界也不会报错。返回值说明无约束说明无调用示例__simd_vf__ inline void Compute(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint16_t repeatTimes) { AscendC::Reg::RegTensorT srcReg; AscendC::Reg::MaskReg mask AscendC::Reg::CreateMaskT(); for (uint16_t i 0; i repeatTimes; i) { AscendC::Reg::LoadAlignT, AscendC::Reg::DataCopyMode::DATA_BLOCK_COPY, AscendC::Reg::PostLiteral::POST_MODE_UPDATE(srcReg, srcAddr, 1, i * 8, mask); AscendC::Reg::StoreAlignT, AscendC::Reg::DataCopyMode::DATA_BLOCK_COPY, AscendC::Reg::PostLiteral::POST_MODE_UPDATE(dstAddr, srcReg, 1, i * 8, mask); } }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考