CANN/asc-devkit UB到GM非对齐数据搬运

发布时间:2026/7/16 23:26:14

CANN/asc-devkit UB到GM非对齐数据搬运 UBToGM非对齐数据搬运(DataCopyPad)【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况不支持数据搬运模式mode的原型Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持支持数据搬运模式mode的原型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_data_copy_intf.h。该接口提供将数据从Unified Buffer非对齐搬运至Global Memory的功能。具体支持的数据通路为以逻辑位置TPosition表示Unified Buffer - Global MemoryVECIN - GMVECOUT - GM如图1所示对于32字节对齐搬运场景从Unified Buffer读取的所有数据都会搬运至Global Memory。如图2所示对于非32字节对齐的场景在读取Unified Buffer数据时会填入dummy假数据对齐到32B搬入Global Memory时会将dummy空数据丢弃从而实现Unified Buffer到Global Memory的非对齐搬运。函数原型不支持配置设置数据搬运模式modetemplate typename T __aicore__ inline void DataCopyPad(const GlobalTensorT dst, const LocalTensorT src, const DataCopyExtParams dataCopyParams)支持配置设置数据搬运模式mode仅Ascend 950PR/Ascend 950DT支持// 该函数原型仅支持Ascend 950PR/Ascend 950DT template typename T, PaddingMode mode PaddingMode::Normal __aicore__ inline void DataCopyPad(const GlobalTensorT dst, const LocalTensorT src, const DataCopyExtParams dataCopyParams)参数说明表1模板参数说明参数名描述T操作数的数据类型。各产品支持的数据类型请参考数据类型。mode配置数据搬运模式。PaddingMode类型定义如下enum class PaddingMode : uint8_t {Normal 0, // 默认模式与原有数据搬运格式保持一致每次数据搬运都会补齐至32字节对齐Compact, // 紧凑模式允许单次搬运不对齐统一在整块数据末尾补齐至32字节对齐};表2接口参数说明参数名输入/输出描述dst输出目的操作数类型为GlobalTensor。起始地址无地址对齐约束。src输入源操作数类型为LocalTensor。起始地址需要保证32字节对齐。dataCopyParams输入搬运参数DataCopyExtParams类型具体参数说明请参考表3。下文表格中列出的结构体参数定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_data_copy.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。表3DataCopyExtParams结构体参数定义参数名描述blockCount指定该指令包含的连续传输数据块个数数据类型为uint16_t取值范围blockCount∈[0, 4095]。blockLen指定该指令每个连续传输数据块长度该指令支持非对齐搬运每个连续传输数据块长度单位为字节。数据类型为uint32_t取值范围blockLen∈[0, 2097151]blockLen必须是sizeof(T)的整数倍需要注意不要超过UB空间大小。srcStride源操作数相邻连续数据块的间隔即前一个数据块结束地址与后一个数据块起始地址的差值。源操作数的逻辑位置为VECIN/VECOUT单位为dataBlock32字节。数据类型为uint32_t取值范围为[0, 2^32-1]。不同产品中srcStride的数据类型和支持的取值范围可能不同详细请参考约束说明。dstStride目的操作数相邻连续数据块间的间隔即前一个数据块结束地址与后一个数据块起始地址的差值。目的操作数的逻辑位置为GM单位为字节。数据类型为uint32_t取值范围为[0, 2^32-1]。不同产品中dstStride的数据类型和支持的取值范围可能不同详细请参考约束说明。rsv保留字段。下面通过两个场景介绍Unified Buffer到Global Memory的非对齐搬运分别对应32字节对齐和非32字节对齐32字节对齐场景如图1所示blockLen为64每个连续传输数据块包含64字节srcStride为1源操作数的逻辑位置为VECIN/VECOUTsrcStride的单位为dataBlock32字节即源操作数相邻数据块之间间隔1个dataBlockdstStride为1目的操作数的逻辑位置为GMdstStride的单位为字节即目的操作数相邻数据块之间间隔1字节。对于32字节对齐搬运场景从Unified Buffer读取的所有数据都会搬运至Global Memory。图1blockLen为32字节对齐时Unified Buffer到Global Memory的非对齐搬运示意图非32字节对齐场景如图2所示blockLen为47每个连续传输数据块包含47字节不满足32字节对齐srcStride为1表示源操作数相邻数据块之间间隔1个dataBlockdstStride为1表示目的操作数相邻数据块之间间隔1字节。对于非32字节对齐的场景由于Unified Buffer要求32字节对齐框架在搬出时会自动补充17字节的假数据来保证对齐搬到Global Memory时再自动将填充的假数据丢弃掉从而实现Unified Buffer到Global Memory的非对齐搬运。图2blockLen不满足32字节对齐时Unified Buffer到Global Memory的非对齐搬运示意图数据类型Ascend 950PR/Ascend 950DT支持的数据类型为bool、int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、complex32、int64_t、uint64_t、double、complex64。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持的数据类型为int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、int64_t、uint64_t、double。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持的数据类型为int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、int64_t、uint64_t、double。Atlas 200I/500 A2 推理产品支持的数据类型为int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。返回值说明无约束说明位于Unified Buffer的源地址必须32字节对齐位于Global Memory的目的地址必须1字节对齐。DataCopyExtParams结构体参数的值需在取值范围内表4DataCopyExtParams结构体参数取值范围参数名取值范围blockCount[0, 4095]blockLen[0, 2097151]srcStride[0, 2^32 - 1]dstStride[0, 2^32 - 1][!NOTE]说明 特别地针对Ascend 950PR/Ascend 950DTsrcStride和dstStride的数据类型和取值范围如下srcStride数据类型为int64_t取值范围为[0, 65535]。dstStride数据类型为int64_t取值范围为[0, 2^40-1]。当DataCopyExtParams结构体参数blockCount、blockLen任意一个值为0时该接口将被视为NOP空操作。该说明针对如下型号生效Atlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品Ascend 950PR/Ascend 950DT调用示例AscendC::DataCopyExtParams copyParams{1, dstTotalLength * sizeof(T), 0, 0, 0}; AscendC::DataCopyPad(dstGlobal, srcLocal, copyParams);完整样例请参考DataCopyPad样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻