news 2026/7/16 22:52:47

CANN/asc-devkit:L0C到UB数据搬运

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/asc-devkit:L0C到UB数据搬运

# L0C Buffer到UB数据搬运(DataCopy)

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

产品支持情况

说明:本接口搬运功能仅在Atlas 推理系列产品AI Core产品型号的L0C Buffer->UB(CO1 -> CO2)通路支持。其他型号和其他通路支持接口调用但功能不生效,功能等同于基础数据搬运。

  • Ascend 950PR/Ascend 950DT:不支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:不支持

功能说明

对数据搬运能力进行增强,相比于基础数据搬运接口,增加了L0C Buffer->Unified Buffer(UB)通路的随路计算。

函数原型

  • Local Memory -> Local Memory

    template <typename T> __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams)
  • Local Memory -> Local Memory,支持源操作数和目的操作数类型不一致。

    template <typename T, typename U> __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<U>& src, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams)

说明:各原型支持的具体数据通路和数据类型,请参考数据类型。

参数说明

表1模板参数说明

参数名描述
T、U操作数的数据类型。支持的数据类型请参考数据类型。

表2参数说明

参数名称输入/输出含义
dst输出目的操作数,类型为LocalTensor。
src输入源操作数,类型为LocalTensor。
intriParams输入搬运参数。DataCopyParams类型。
enhancedParams输入增强信息参数。DataCopyEnhancedParams类型。
具体定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_data_copy.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。

表3DataCopyEnhancedParams结构参数说明

参数名称含义
blockMode数据搬运基本分形,BlockMode枚举类型,支持以下配置:
• BLOCK_MODE_NORMAL:表示传输单位为32字节。当前暂不支持。
• BLOCK_MODE_MATRIX:表示传输单位为一个16 * 16的cube分形。
• BLOCK_MODE_VECTOR:表示传输单位为一个1 * 16的cube分形。
• BLOCK_MODE_SMALL_CHANNEL:表示传输单位为一个16 * 4的cube分形。当前暂不支持。
• BLOCK_MODE_DEPTHWISE:表示传输单位为一个16 * 16的cube分形,提供随路channel-split功能。当前暂不支持。
每种模式下对应的blockLen等参数单位见表4。
deqScale随路精度转换辅助参数,即量化模式,支持的量化模式取值和对应的数据类型等信息请参考表5。其中DEQ、DEQ8、DEQ16模式,需要传入deqValue量化系数,设置deqValue的对应比特位;VDEQ、VDEQ8、VDEQ16模式,需要传入包含16个元素(deqValue)的量化参数向量,设置deqTensorAddr的对应比特位,同时保证DEQADDR中存储的反量化参数向量的每个元素(deqValue)都符合预期和使用限制。
VDEQ模式下,反量化参数向量长度为32字节(16个half元素);其他模式下,反量化参数向量长度为128字节(16个64bit的反量化元素)。
deqValue量化系数。 deqValue的配置方式请参考deqValue配置方式。
deqTensorAddrUB中存储反量化参数向量的起始地址。deqScale为VDEQ/VDEQ8/VDEQ16模式时,需要传入反量化运算时的参数向量的地址。该地址要满足32字节对齐。
对于VDEQ模式,该地址指向32字节大小的反量化参数向量,其中每个元素大小为16bit(half)。
对于VDEQ8、VDEQ16模式,反量化参数向量中的每个元素大小都为64bit。搬运时会搬运blockCount个连续传输数据块,每个数据块的长度为blockLen。每个数据块对应一个128字节的反量化向量。对于同一个数据块,反量化参数向量中的16个元素会被连续复用。不同的数据块,对应不同的反量化参数向量,地址会相应的偏移12。例如:假设对应起始地址为A,第一个数据块的12反量化参数向量起始地址为A,第二个数据块的12反量化参数向量起始地址为A + 12。
同一个反量化参数向量的每一个元素的MCB标志位必须一致。
sidStoreMode用于deqScale为DEQ8/VDEQ8时配置存储模式,控制反量化结果如何存储在dst地址中。配置效果参考sidStoreMode配置示意图。
• 0:dst的数据存储在每个DataBlock的前半段,即每32字节的高16字节;
• 1:dst的数据存储在每个DataBlock的后半段,即每32字节的低16字节;
• 2:dst的数据存储在完整的DataBlock中,即整个32字节。
isRelu配置是否可以随路做线性整流操作。配置deqValue的情况下,如果该参数被置为true,那么会刷新deqValue的ReLU标志位为1;如果被置为false,则不会做修改。配置deqTensorAddr的情况下,反量化参数向量元素中的ReLU标志位不生效,以isRelu为准。
仅配置isRelu,不配置量化参数,即deqValue配置为DEQ_NONE场景,支持src和dst的数据类型组合如下:{half,half},{float,float},{int32_t,int32_t},{float,half};同时配置isRelu和量化参数的场景,支持的数据类型组合参考表5。
padMode预留参数,当前暂不支持。

表4不同blockMode对应的参数单位

blockModesrcdst数据类型blockLen单位srcStride单位dstStride单位
BLOCK_MODE_MATRIXCO1CO2half、int16_t、uint16_t512B512B32B
BLOCK_MODE_MATRIXCO1CO2float、int32_t、uint32_t1024B1024B32B
BLOCK_MODE_VECTORCO1CO2half、int16_t、uint16_t32B512B32B
BLOCK_MODE_VECTORCO1CO2float、int32_t、uint32_t64B1024B32B

表5deqScale参数列表

量化模式src.dtypedst.dtype配合使用的参数
DEQint32_thalfdeqValue中的变量M
DEQhalfhalfdeqValue中的变量M
DEQ8int32_tint8_t• deqValue
•变量M
•变量N
• MCB标志位
• Offset
• Sign标志位
• ReLU标志位
• isRelu
DEQ8int32_tuint8_t• deqValue
•变量M
•变量N
• MCB标志位
• Offset
• Sign标志位
• ReLU标志位
• isRelu
DEQ16int32_thalf• deqValue
•变量M
•变量N
• MCB标志位
• ReLU标志位
• isRelu
DEQ16int32_tint16_t• deqValue
•变量N
• ReLU标志位
• isRelu
VDEQint32_thalfdeqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
• deqTensorAddr
• DEQADDR
• ReLU标志位
• isRelu
VDEQ8int32_tint8_tdeqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
• deqTensorAddr
• DEQADDR
• ReLU标志位
• isRelu
VDEQ8int32_tuint8_tdeqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
• deqTensorAddr
• DEQADDR
• ReLU标志位
• isRelu
VDEQ16int32_thalfdeqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
• deqTensorAddr
• DEQADDR
• ReLU标志位
• isRelu
VDEQ16int32_tint16_tdeqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
• deqTensorAddr
• DEQADDR
• ReLU标志位
• isRelu

表6deqValue配置方式

模式比特位数变量名作用介绍
DEQ8、VDEQ8、DEQ16、VDEQ160~31M32位数视为float,作为反量化计算所需要乘的值。src为int32_t,dst为int16_t的场景下,变量M不生效。
DEQ8、VDEQ8、DEQ16、VDEQ1632~35N4位比特位,表示范围为[1, 16](b'0000对应表示1,b'1111对应表示16)。
当模式为DEQ8、VDEQ8时,MCB标志位置为1时,将输入的值进行右移N比特位。当模式为DEQ16、VDEQ16并且dst数据类型为int16_t时,直接进行N位的右移,不受MCB标志位控制。
DEQ8、VDEQ8、DEQ16、VDEQ1636MCB标志位Mode Control Bit。如果置为0,输入的int32_t会被直接转换为float。如果置为1,输入的int32_t会先右移N比特位,转变成int16_t,然后转换为float。
DEQ8、VDEQ8、DEQ16、VDEQ1637~45Offset9bit的整型数据,在进行反量化src * M的计算结果后与Offset进行相加。仅在DEQ8、VDEQ8模式中会用到。如果不使用offset,请置为0。
DEQ8、VDEQ8、DEQ16、VDEQ1646Sign标志位如果置为1,表明反量化结果是signed(int8);如果置为0,表明反量化结果是unsigned(uint8)。仅在DEQ8、VDEQ8模式中会用到。
DEQ8、VDEQ8、DEQ16、VDEQ1647ReLU标志位如果置为1,对最终结果进行ReLU计算;如果置为0,不进行额外计算。
•对于int32_t->int8_t,配置ReLU时,offset必须配置成-128;
•对于int32_t->uint8_t,配置ReLU时,offset必须配置成0。
DEQ8、VDEQ8、DEQ16、VDEQ1648~63-预留
DEQ、VDEQ0 ~ 15M这16位数被视为half,作为反量化计算需要乘的值。

图1sidStoreMode配置示意图

![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/sidStoreMode配置示意图.png "sidStoreMode配置示意图"?utm_source=gitcode_repo_files)

数据类型

源操作数和目的操作数的数据类型保持一致时,支持的数据类型为:half、float、int32_t、uint32_t。

表7源操作数和目的操作数的数据类型不一致时的支持情况

源操作数的数据类型目的操作数的数据类型
floathalf
int32_tint8_t、uint8_t、int16_t、half。

返回值说明

约束说明

  • 开发者需要保证DataCopyEnhancedParams中的isRelu参数配置和量化系数deqValue/量化参数向量deqTensorAddr的ReLU标志位配置一致:都开启或都不开启。
  • 如果有随路精度转换,操作数的blockLen单位需要减半。

调用示例

  • Local Memory -> Local Memory

    // srcLocal、dstLocal为half类型的LocalTensor // 使用传入DataCopyParams参数的搬运接口,支持连续和非连续搬运 DataCopyParams intriParams; intriParams.blockCount = 1; // 连续数据块个数为1 intriParams.blockLen = 512 * sizeof(half) / 32; // 连续数据块长度,单位为DataBlock,此处长度为512个half元素 intriParams.srcGap = 0; // 源操作数做连续搬运 intriParams.dstGap = 0; // 目的操作数连续排布 DataCopyEnhancedParams enhancedParams; enhancedParams.blockMode = BlockMode::BLOCK_MODE_MATRIX; // 传输单位为16*16的cube分形 enhancedParams.deqScale = DeqScale::DEQ_NONE; // 不做量化 enhancedParams.deqValue = 0; enhancedParams.deqTensorAddr = 0; enhancedParams.sidStoreMode = 0; // 仅deqScale为DEQ8/VDEQ8时生效 enhancedParams.isRelu = false; // 不支持ReLU enhancedParams.padMode = pad_t::PAD_NONE; // 预留参数 // 功能等同基础数据搬运 AscendC::DataCopy(dstLocal, srcLocal, intriParams, enhancedParams);
  • Local Memory -> Local Memory,源操作数与目的操作数类型不一致

    // 以下示例为L0C Buffer -> UB通路的数据搬运,仅在Atlas 推理系列产品AI Core场景下支持。srcLocal为int32_t类型的L0C Buffer上的LocalTensor,dstLocal为int8_t类型的UB上的LocalTensor // 使用传入DataCopyParams参数的搬运接口,支持连续和非连续搬运 DataCopyParams intriParams; intriParams.blockCount = 1; // 连续数据块个数为1 intriParams.blockLen = 512 * sizeof(half) / 32; // 连续数据块长度,单位为DataBlock,此处长度为512个half元素 intriParams.srcGap = 0; // 源操作数做连续搬运 intriParams.dstGap = 0; // 目的操作数连续排布 DataCopyEnhancedParams enhancedParams; enhancedParams.blockMode = BlockMode::BLOCK_MODE_MATRIX; // 传输单位为16*16的cube分形 enhancedParams.deqScale = DeqScale::DEQ8; // int32_t -> int8_t量化模式,配合deqValues使用 enhancedParams.deqValue = 70369809530880; // float 1 = uint64_t 1065353216, when s322s8 use 1065353216 | (1 << 46) enhancedParams.deqTensorAddr = 0; // 仅VDEQ模式下使用 enhancedParams.sidStoreMode = 2; // dstLocal的数据存储在完整的DataBlock中 enhancedParams.isRelu = false; // 不支持ReLU enhancedParams.padMode = pad_t::PAD_NONE; // 预留参数 // 此时dstLocal = srcLocal AscendC::DataCopy(dstLocal, srcLocal, intriParams, enhancedParams);

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 22:50:30

开源鸿蒙大学生创新大赛三大赛道全面开赛,176 万奖金池已就位

关于大赛 2026 开源鸿蒙大学生创新大赛&#xff08;原 OpenHarmony 竞赛训练营&#xff09;由开源鸿蒙项目群技术指导委员会主办、AtomGit 承办&#xff0c;面向全国高校学生开发者&#xff0c;聚焦开源鸿蒙技术生态建设。 今年赛事全面升级&#xff0c;从单一训练营扩展为三…

作者头像 李华
网站建设 2026/7/16 22:49:31

MMPose姿态估计算法:从原理到工业级部署的完整技术指南

MMPose姿态估计算法&#xff1a;从原理到工业级部署的完整技术指南 【免费下载链接】mmpose OpenMMLab Pose Estimation Toolbox and Benchmark. 项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose MMPose作为OpenMMLab生态中的开源姿态估计工具箱&#xff0c;提…

作者头像 李华
网站建设 2026/7/16 22:48:23

直流电机控制电路设计大全与实战技巧

1. 为什么直流电机控制电路值得收藏&#xff1f;直流电机作为工业自动化、智能家居和机器人领域的核心执行元件&#xff0c;其控制电路设计直接影响设备性能和可靠性。从业十年间&#xff0c;我处理过上百个电机控制失效案例&#xff0c;其中80%的问题根源都在于控制电路设计不…

作者头像 李华
网站建设 2026/7/16 22:47:07

TCAS部署指南:从单节点到高可用集群

TCAS部署指南&#xff1a;从单节点到高可用集群 【免费下载链接】tcas trust cluster attestation server 项目地址: https://gitcode.com/openeuler/tcas 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ TCAS&#xff08;trust cluster attestation s…

作者头像 李华
网站建设 2026/7/16 22:47:00

CSS背景属性详解

一、背景颜色&#xff08;background-color&#xff09;1.1 基本语法background-color: 颜色值;1.2 示例.box1 {background-color: pink;background-color: #bfa; }1.3 特点特性说明作用范围可以为元素设置背景颜色与背景图片的关系可以同时设置背景颜色和背景图片&#xff0c;…

作者头像 李华
网站建设 2026/7/16 22:42:56

GPT-Live实时视频翻译技术解析:原理、应用与优化实践

实时视频翻译技术正在彻底改变我们跨越语言障碍的方式。想象一下&#xff0c;你正在参加一个国际技术会议&#xff0c;主讲人用流利的日语分享着前沿的AI研究成果&#xff0c;而你却能实时看到准确的中文字幕——这就是GPT-Live实时视频翻译带来的变革。但这项技术真的能做到宣…

作者头像 李华