CANN/asc-devkit数据搬运总体约束说明

发布时间:2026/7/16 14:41:54
CANN/asc-devkit数据搬运总体约束说明 总体约束说明【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit所有数据搬运接口共享若干通用约束规则在进行任何搬运操作前都应确保这些约束被满足否则可能导致未定义行为或数据异常。地址对齐约束AI Core上的各类存储单元有不同的地址对齐要求。Ascend C API操作数的起始地址必须满足对应存储单元的对齐约束。DataBlock32字节是搬运操作的基本寻址粒度大部分搬运接口的blockLen参数均以DataBlock为单位计算。各存储单元的对齐要求如下表所示。表 1各存储单元地址对齐要求存储单元对齐要求说明Global Memory1字节对齐最宽松的对齐要求任意字节地址均可Unified Buffer32字节对齐与DataBlock大小一致地址必须为32的整数倍L1 Buffer32字节对齐同UB地址必须为32的整数倍L0A Buffer/L0B Buffer512字节对齐矩阵计算输入的高对齐要求L0C Buffer64字节对齐矩阵计算结果缓冲区BiasTable Buffer64字节对齐偏置数据缓冲区Fixpipe Buffer128字节对齐量化参数暂存区[!NOTE]说明需要注意的是如果某个具体接口的约束说明中明确指定了与上表不同的对齐要求则应以该接口自身的说明为准。对于不满足对齐要求的场景应使用DataCopyPad接口的非对齐搬运能力。多指令同步如果需要执行多个DataCopy指令且DataCopy的目的地址存在重叠需要调用PipeBarrier.md)插入同步指令保证多个DataCopy指令的串行化防止出现异常数据。如下图左侧示意图执行两个DataCopy指令搬运的目的GM地址存在重叠两条搬运指令之间需要通过调用PipeBarrierPIPE_MTE3()进行MTE3流水的同步如下图右侧示意图所示搬运的目的地址UB存在重叠两条搬运指令之间需要调用PipeBarrierPIPE_MTE2()进行MTE2流水的同步。多指令同步的核心代码示例如下AscendC::DataCopy(src2Local, src2Global, srcDataSize); // 两条搬运指令之间需要调用PipeBarrierPIPE_MTE2()添加MTE2搬入流水的同步。 AscendC::PipeBarrierPIPE_MTE2(); AscendC::DataCopy(src1Local, src1Global, srcDataSize); // 输入src1和src2在UB上分配的地址区间有重叠。 // 为了保证src2的数据不会覆盖src1在重叠区间的值必须保证先搬入src2后搬入src1。图 1DataCopy的目的地址存在重叠![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/datacopy_address_overlap_sync_diagram.png DataCopy的目的地址存在重叠?utm_sourcegitcode_repo_files)【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考