公司动态

CANN/asc-devkit:L1ToFixpipe-Buffer数据搬运

📅 2026/7/16 13:20:21
CANN/asc-devkit:L1ToFixpipe-Buffer数据搬运
# L1ToFixpipe-Buffer数据搬运【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持Kirin X90不支持Kirin 9030不支持功能说明头文件路径为basic_api/kernel_operator_data_copy_intf.h。DataCopy数据搬运支持将随路量化参数从L1 Buffer移动到Fixpipe Buffer。Fixpipe Buffer包含两种参数pre_stage的量化参数这些参数各自独立存储并拥有独立的地址空间。量化参数和ReLU参数通过dst地址的高16位dst[31:16]进行区分具体如下图1Fixpipe Buffer图示函数原型// 连续搬运场景 template typename T __aicore__ inline void DataCopy(const LocalTensorT dst, const LocalTensorT src, const uint32_t count) // 连续或非连续搬运场景高维切分 template typename T __aicore__ inline void DataCopy(const LocalTensorT dst, const LocalTensorT src, const DataCopyParams repeatParams)参数说明表1模板参数说明参数名描述T操作数的数据类型。对于pre_stage的量化参数的搬运需要设置为uint64_t。支持的数据类型请参考数据类型。表2参数说明参数名输入/输出含义dst输出目的操作数类型为LocalTensor。存储位置为Fixpipe Buffer目的地址需要128字节对齐。src输入源操作数类型为LocalTensor存储位置为L1 Buffer源地址需要32字节对齐。repeatParams输入搬运参数DataCopyParams类型。通过该参数可配置搬运的数据块大小、个数、间隔等信息同时支持非连续和连续搬运。上述结构体参数定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_data_copy.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。count输入参与搬运的元素个数。注count * sizeof(T)需要32字节对齐若未对齐搬运量会向下取整到32字节对齐。表3DataCopyParams结构体参数定义参数名含义blockCount待搬运的连续传输数据块个数。uint16_t类型取值范围blockCount∈[1, 4095]。注blockCount 0表示不执行搬运该接口将被视为NOP空操作。blockLen待搬运的每个连续传输数据块长度dst位于Fixpipe Buffer时单位为128字节。uint16_t类型取值范围blockLen∈[1, 65535]。注blockLen 0表示不执行搬运该接口将被视为NOP空操作。srcGap在L1 Buffer - Fixpipe Buffer场景中srcGap特指源操作数相邻连续数据块的间隔前面一个数据块的头与后面数据块的头的间隔单位为DataBlock32字节。uint16_t类型srcGap∈[0, 2^16-1]。• blockCount 1时srcGap无意义设置为0即可。• blockCount ≠ 1时当srcGap0时表示重复搬出源操作数的第一个数据块。dstGap在L1 Buffer - Fixpipe Buffer场景中dstGap特指目的操作数相邻连续数据块的间隔前面一个数据块的头与后面数据块的头的间隔单位为DataBlock128字节。uint16_t类型dstGap不要超出该数据类型的取值范围dstGap∈[1, 2^16-1]。• blockCount 1时dstGap无意义设置为0即可。• blockCount ≠ 1时当dstGap0时表示目的矩阵中搬入的每个数据块都会覆盖第一个数据块。数据类型src数据类型支持uint64_tdst数据类型支持uint64_t。返回值说明无约束说明针对Ascend 950PR/Ascend 950DTblockLen参数单位为64B。dst物理内存为Fixpipe Buffer起始地址要求128字节对齐src物理内存为L1 Buffer起始地址要求32字节对齐。blockCount取值范围blockCount∈[1, 4095]设置为0表示不执行此指令将被视为NOP并报告警告。srcGap∈[0, 2^16-1]dstGap∈[1, 2^16-1]。如果读写地址大于对应的mem_block地址将被绕行并引发警告。如果Fixpipe Buffer中的目标dst地址溢出将引发异常。调用示例L1 Buffer(C1)-Fixpipe Buffer(C2PIPE2GM)搬运Vector量化参数。// c1Addr 0、fbAddr 0、N 256、n 256burstLen CeilAlign(256 * sizeof(uint64_t), 128) / 128 16dataCopyParams {1, 16, 0, 0}。 AscendC::LocalTensoruint64_t quantAlphaTensor(AscendC::TPosition::C1, c1Addr, N); if constexpr (scenarioNum 2 || scenarioNum 4 || scenarioNum 6) { CopyQuantAlphaGmToL1(quantAlphaTensor); } // vector quant mode if constexpr (scenarioNum 2) { intriParams.quantPre QuantMode_t::VDEQF16; } else if constexpr (scenarioNum 4) { intriParams.quantPre QuantMode_t::VQF322B8_PRE; } else { intriParams.quantPre QuantMode_t::VREQ8; } AscendC::LocalTensoruint64_t fbTensor(AscendC::TPosition::C2PIPE2GM, fbAddr, N); uint16_t burstLen CeilAlign(n * sizeof(uint64_t), 128) / 128; AscendC::DataCopyParams dataCopyParams(1, burstLen, 0, 0); AscendC::DataCopy(fbTensor, quantAlphaTensor, dataCopyParams); AscendC::SetFixPipeConfig(fbTensor);完整示例请参考L1-Fixpipe Buffer数据搬运(DataCopy)中场景2、4、6。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考