尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

CANN/asc-devkit矢量比较API

CANN/asc-devkit矢量比较API

Compare(结果存入寄存器) 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求…

📅 2026/9/9 23:53:49
从Socket层实现C++ Modbus TCP/IP通讯:协议拆解与工业数据采集实战

从Socket层实现C++ Modbus TCP/IP通讯:协议拆解与工业数据采集实战

1. 项目概述与核心价值最近在做一个工业数据采集的项目,需要和一堆PLC、传感器打交道,协议用的就是Modbus TCP。网上找了一圈,要么是封装好的商业库,要么是Python、C#的实现,想找一个纯粹用C、从Socket层开始构建的、能…

📅 2026/9/9 18:21:05
Chambolle-Pock算法(CP算法)

Chambolle-Pock算法(CP算法)

CP算法原始最小化公式的一般形式如下:对偶最大化的一般形式为:推导过程如下:引入约束条件,则目标函数化为接下来引入拉格朗日乘子,构造拉格朗日函数:注意:这里我们采用标准的拉格朗日形式&#…

📅 2026/10/7 9:36:22
MORE NEWS

更多资讯

📰

Agent记忆不跟工具搬家:分层设计与跨框架迁移实战

1. 当Agent换了工具就"失忆",问题到底出在哪做过Agent开发的人大概率都经历过这种尴尬:花了两周调教好的一个智能体,在某个框架里跑得挺顺,对话上下文记得住、用户偏好拎得清、任务进度跟得上。结果一换框架、一换编排工…

📰

分布式光伏并网防逆流技术解析与优化方案

1. 分布式光伏并网的核心痛点解析去年在浙江某工业园区光伏项目现场,我亲眼目睹了因防逆流失效导致的整站跳闸事故。当时逆变器输出功率突然超过负载需求,多余电力向10kV电网倒送,触发上级变电站保护动作,造成园区大面积停电。这个…

📰

AI测试革命:从工具到思维的范式转变

1. 从工具到思维:AI测试的本质变革当OpenClaw这类AI智能体开始接管测试任务时,很多测试工程师的第一反应是寻找新的测试工具使用方法。这恰恰暴露了一个根本性误区——我们面临的不是简单的工具迭代,而是一场彻底的测试思维革命。传统测试工程…

📰

PHP弱类型与MD5绕过实战:以BUUCTF题目为例

1. 题目背景与核心挑战解析BUUCTF是国内知名的网络安全竞赛平台,[MRCTF2020]Ez_bypass是一道典型的PHP代码审计题目。这道题考察的是开发者对PHP弱类型比较和MD5哈希绕过的理解程度。根据题目名称"Ez_bypass"可以推测,解题关键在于找到合适的绕…

📰

相机镜头匹配检查清单:靶面、像圈、分辨率、接口逐项核对

上篇把衍射账结了:同一工位 4840 mm 视野、24482048 / 3.45 m、35 mm 镜头、工作距离大约 234 mm,β≈0.176。F4 艾里斑大约 6.3 m,还卡在 2 像元线里边;拧到 F5.6 就超了。景深想再要一点,衍射那边先把细节磨掉——那…

📰

GPU服务器集群系统级参数调优与性能优化指南

1. GPU服务器集群系统级参数概述在深度学习和大模型训练领域,GPU服务器集群已成为不可或缺的基础设施。不同于单机GPU工作站,集群环境下的系统级参数调优直接影响着计算资源的利用效率和任务吞吐量。根据实测数据,合理的参数配置可使ResNet50…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬