当前位置: 首页 > article >正文

CANN/NDDMA多维数据搬运优化

深入理解NDDMA多维数据搬运昇腾算子开发性能优化利器【免费下载链接】cann-learning-hubCANN 学习中心仓支持在线互动运行、边学边练提供教程、示例与优化方案一站式助力昇腾开发者快速上手。项目地址: https://gitcode.com/cann/cann-learning-hub 引言你还在手动循环搬运数据吗在Ascend C算子开发过程中你是不是经常遇到这些痛点卷积前需要对特征图Padding自己写循环填充效率低矩阵转置需要手动计算偏移地址代码又长又容易出错多维数据切片、广播需要多层循环算力全浪费在数据搬运上了今天给大家介绍Ascend C新一代芯片的黑科技NDDMAN-Dimensional DMA多维直接内存访问它能在数据搬运过程中硬件自动完成Padding/Transpose/Broadcast/Slice等多种变换只用一次API调用就能完成原来几十行代码的工作性能还提升数倍读完本文你将收获✅ 理解NDDMA的核心原理和优势✅ 掌握5种典型NDDMA使用场景✅ 看懂NDDMA的参数配置方法✅ 学会在自己的算子中集成NDDMA✅ 拿到NDDMA最佳实践清单 基础概念铺垫什么是NDDMANDDMA定义NDDMAN-Dimensional DMA是昇腾新一代芯片Atlas 350加速卡及后续产品提供的硬件加速多维数据搬运功能相比于传统的一维DMA搬运它支持灵活配置每个维度的步长Stride和Padding参数在搬运数据的同时自动完成各种数据变换。官方支持情况产品是否支持NDDMAAtlas 350 加速卡✅ 完全支持Atlas A3/A2系列❌ 暂不支持老款Atlas推理/训练系列❌ 暂不支持NDDMA vs 传统DataCopy对比对比项传统一维DataCopyNDDMA多维DMA支持维度只能一维连续搬运支持N维最高6维数据变换搬完需要软件循环处理搬运变换一步完成硬件加速代码量需要写多层循环计算地址配置参数一次API调用完成性能软件循环开销大CPU占用高硬件自动处理效率提升3~5倍适用场景简单连续数据搬运复杂多维数据变换场景 典型应用场景5大功能一网打尽我们以官方样例data_copy_gm2ub_nddma为例看看NDDMA能实现哪些常见数据操作场景1Padding填充需求输入[16, 32]矩阵四周填充0输出[32, 64]// 参数配置 AscendC::NdDmaLoopInfo2 loopInfo{ {1, 32}, // 每个维度的step {1, 64}, // 目的维度step {32, 16}, // 源数据总长度 {15, 13}, // 左/上padding {17, 3} // 右/下padding }; AscendC::NdDmaParamsfloat, 2 params{loopInfo, 0}; // padding值为0 AscendC::DataCopyfloat, 2(xLocal, xGm, params);应用场景卷积层输入特征图边界填充保证输出尺寸不变。场景2Nearest Padding最近邻填充需求输入[28, 15]矩阵填充到[32, 32]填充区域使用边界数据而不是0AscendC::NdDmaLoopInfo2 loopInfo{{1, 15}, {1, 32}, {15, 28}, {11, 3}, {6, 1}}; AscendC::NdDmaParamsfloat, 2 params{loopInfo, 0}; static constexpr AscendC::NdDmaConfig dmaConfig {true}; // 开启最近邻填充 AscendC::DataCopyfloat, 2, dmaConfig(xLocal, xGm, params);应用场景图像预处理、对边界精度要求高的算子。场景3Transpose转置需求输入[16, 64]矩阵转置为[64, 16]// 关键交换源和目的的stride配置 AscendC::NdDmaLoopInfo2 loopInfo{{1, 64}, {16, 1}, {64, 16}, {0, 0}, {0, 0}}; AscendC::NdDmaParamsfloat, 2 params{loopInfo, 0}; AscendC::DataCopyfloat, 2(xLocal, xGm, params);应用场景矩阵乘法前维度转换、Transformer Attention层QKV维度交换。场景4Broadcast广播需求输入[1, 16]行向量广播为[3, 16]矩阵// 关键将被广播维度的源step设置为0重复读取同一行 AscendC::NdDmaLoopInfo2 loopInfo{{1, 0}, {1, 16}, {16, 3}, {0, 0}, {0, 0}}; AscendC::NdDmaParamsfloat, 2 params{loopInfo, 0}; AscendC::DataCopyfloat, 2(xLocal, xGm, params);应用场景偏置添加、归一化层参数广播、向量矩阵运算。场景5Slice切片需求从[32, 64]大矩阵中截取左上角[16, 16]子块AscendC::NdDmaLoopInfo2 loopInfo{{1, 64}, {1, 16}, {16, 16}, {0, 0}, {0, 0}}; AscendC::NdDmaParamsfloat, 2 params{loopInfo, 0}; AscendC::DataCopyfloat, 2(xLocal, xGm, params);应用场景特征图分块计算、大张量切片处理。⚙️ 核心代码深度解析参数怎么配NDDMA的核心是NdDmaLoopInfo这个参数结构体我们以二维为例拆解每个字段的含义// 二维NDDMA参数配置 AscendC::NdDmaLoopInfo2 loopInfo{ {srcStep0, srcStep1}, // 源数据每个维度的步长每走一步跳过多少元素 {dstStep0, dstStep1}, // 目的数据每个维度的步长 {srcLen0, srcLen1}, // 源数据每个维度的总长度 {padLeft0, padLeft1}, // 每个维度左边/上边的padding长度 {padRight0, padRight1} // 每个维度右边/下边的padding长度 };核心原理通过步长Step实现各种变换不同操作的本质就是对步长的不同配置转置交换源和目的的步长配置广播被广播维度的源步长设为0重复读取同一位置切片设置源长度为需要的切片大小Padding配置左右上下padding参数 完整实现流程从输入到输出我们以完整的官方样例实现为例看看NDDMA在算子中的集成流程第一步定义场景参数#if SCENARIO_NUM 1 constexpr uint32_t SRC_TOTAL_LENGTH 16 * 32; constexpr uint32_t DST_TOTAL_LENGTH 32 * 64; // 其他场景的参数定义... #endif第二步核函数实现template typename T class KernelDataCopy { public: __aicore__ inline void Init(GM_ADDR x, GM_ADDR y, uint32_t xCountIn, uint32_t yCountIn, AscendC::TPipe* pipeIn) { // 初始化全局内存指针和队列 xGm.SetGlobalBuffer(reinterpret_cast__gm__ T*(x)); yGm.SetGlobalBuffer(reinterpret_cast__gm__ T*(y)); pipe-InitBuffer(inQueueX, 1, xCount * sizeof(T)); pipe-InitBuffer(outQueueY, 1, yCount * sizeof(T)); } __aicore__ inline void Process() { CopyIn(); // 用NDDMA从GM搬运到UB同时完成变换 CopyOut(); // 从UB搬运回GM } private: __aicore__ inline void CopyIn() { AscendC::LocalTensorT xLocal inQueueX.AllocTensorT(); // 根据不同场景配置NDDMA参数 if constexpr (scenarioNum 1) { AscendC::NdDmaLoopInfo2 loopInfo{{1, 32}, {1, 64}, {32, 16}, {15, 13}, {17, 3}}; AscendC::NdDmaParamsT, 2 params{loopInfo, 0}; AscendC::NdDmaDci(); // 刷新cache AscendC::DataCopyT, 2(xLocal, xGm, params); } // 其他场景的参数配置... inQueueX.EnQue(xLocal); } __aicore__ inline void CopyOut() { // 结果从UB搬运回GM AscendC::LocalTensorT xLocal inQueueX.DeQueT(); AscendC::LocalTensorT yLocal outQueueY.AllocTensorT(); AscendC::DataCopy(yLocal, xLocal, yCount); outQueueY.EnQueT(yLocal); inQueueX.FreeTensor(xLocal); AscendC::LocalTensorT yOutLocal outQueueY.DeQueT(); AscendC::DataCopy(yGm, yOutLocal, yCount); outQueueY.FreeTensor(yOutLocal); } };第三步核函数调用__global__ __vector__ void datacopy_custom(GM_ADDR x, GM_ADDR y) { AscendC::TPipe pipe; KernelDataCopyfloat op; op.Init(x, y, SRC_TOTAL_LENGTH, DST_TOTAL_LENGTH, pipe); op.Process(); } 最佳实践总结避坑指南使用NDDMA的注意事项✅ 芯片兼容性检查首先确认目标芯片是否支持NDDMA目前只有Atlas 350及后续产品支持✅ 维度对齐要求不同数据类型有不同的对齐要求float类型建议对齐到32字节✅ 合理配置队列深度根据数据量大小配置合理的队列深度避免内存溢出✅ 调用NdDmaDci刷新cache每次NDDMA调用前建议刷新cache保证数据一致性✅ 优先使用硬件完成变换凡是能通过NDDMA完成的操作不要用软件循环实现❌ 不要在NDDMA后立即读取数据需要等待DMA搬运完成后再操作数据❌ 不要配置超过硬件支持的维度数目前最高支持6维配置性能优化技巧尽量将多个连续的小搬运合并成一次NDDMA调用减少DMA启动开销合理配置Stride参数尽量让内存访问连续提高缓存命中率对于复杂场景可以将多次变换合并到一次NDDMA搬运中完成 总结与回顾今天我们系统学习了昇腾NDDMA多维数据搬运技术NDDMA是什么硬件加速的多维数据搬运接口支持搬运变换一步完成5大典型场景Padding/Nearest Padding/Transpose/Broadcast/Slice参数配置方法核心是NdDmaLoopInfo结构体的5组参数完整实现流程从参数定义到核函数集成的全流程最佳实践使用注意事项和性能优化技巧NDDMA是昇腾算子开发中提升性能的利器尤其是对于数据密集型算子用好NDDMA可以大幅减少数据搬运开销把算力真正用在计算上。 参考资料CANN官方文档多维数据搬运 (ISASI)昇腾官方样例仓库data_copy_gm2ub_nddmaAscend C算子开发指南【免费下载链接】cann-learning-hubCANN 学习中心仓支持在线互动运行、边学边练提供教程、示例与优化方案一站式助力昇腾开发者快速上手。项目地址: https://gitcode.com/cann/cann-learning-hub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/NDDMA多维数据搬运优化

深入理解NDDMA多维数据搬运:昇腾算子开发性能优化利器 【免费下载链接】cann-learning-hub CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.…...

DouyinLiveRecorder:一键录制40+平台直播的终极解决方案

DouyinLiveRecorder:一键录制40平台直播的终极解决方案 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcasting、wink…...

工业踩坑实录(十七):从40分到高分:工业零件OCR,通用模型一上来就给我打脸

从40分到高分:工业零件OCR,通用模型一上来就给我打脸 工业零件上印一行字,你以为直接丢给OCR就能认。现实是,通用模型跑上去,准确率四十来分,跟瞎猜差不多。 2026-05-08 更新: 发这篇文章之前收…...

Python自动化抓取同花顺问财数据:量化投资的终极解决方案

Python自动化抓取同花顺问财数据:量化投资的终极解决方案 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 还在为获取股票数据而烦恼吗?每天手动登录同花顺问财网站,复制粘贴数据…...

RKDevTool.exe对update.img进行拆包和重新合并

...

交通预测实战:从数据到模型,构建AI驱动的时空预测系统

1. 项目概述:为什么交通预测值得用AI重做一遍?干了这么多年数据分析和算法工程,我越来越觉得,交通预测是个典型的“看起来简单,做起来掉坑”的领域。早些年,大家用ARIMA、卡尔曼滤波,后来上了一…...

超级个体崛起:一人公司(One-Person Company)的技术栈——软件测试从业者的全能武器库

在AI重构生产关系的2026年,“一人公司”已从概念变为触手可及的商业现实。对于深谙质量保障、逻辑严谨且具备工程化思维的软件测试从业者而言,这不仅是职业发展的备选路径,更是一次将“技术债”转化为“数字资产”的价值跃迁。当“单人成军”…...

Spring AI 1.0.7、1.1.6、2.0.0-M6 发布:143 项更新,含重要改进与安全修复

2026 年 5 月 8 日,Spring AI 1.0.7、1.1.6、2.0.0 - M6 版本正式发布,带来 143 项改进、错误修复和文档更新,还包含多项安全修复程序。版本总体亮点此次发布的三个版本在改进、稳定性、文档和安全性方面均有提升。共进行 42 项增强改进&…...

Council框架:构建可编排的智能决策委员会系统

1. 项目概述:从单体应用到分布式决策的演进在软件架构的演进历程中,我们常常面临一个核心挑战:如何将复杂的业务逻辑从臃肿的单体应用中剥离出来,构建出清晰、可维护且具备高内聚、低耦合特性的系统。传统的做法是引入微服务架构&…...

在多轮对话应用中如何利用Taotoken的路由能力保障服务连续性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多轮对话应用中如何利用Taotoken的路由能力保障服务连续性 多轮对话应用的核心在于维持连贯的上下文,为用户提供流畅…...

UE5 GameFeature创建与使用

UE5 的 GameFeature 机制,本质是将游戏功能拆解为独立的、可动态加载/卸载的模块。其设计目标聚焦于以下工程问题: 大世界与长线运营项目:如《堡垒之夜》在节日期间临时注入限时玩法(扔雪球、礼物空投),活…...

教育AI信任构建:透明度与可解释性如何破解多利益相关者困局

1. 项目概述:当AI走进课堂,我们到底在担心什么?最近和几位在一线教学的朋友聊天,发现一个挺有意思的现象:学校采购了一批据说能“智能批改作文”、“个性化推荐习题”的AI教学工具,但老师们用起来的积极性并…...

生成式AI重塑智能座舱:从多模态交互到车端部署的工程实践

1. 项目概述:当生成式AI“坐”进驾驶舱最近几年,生成式AI的浪潮席卷了各行各业,从写诗作画的ChatGPT、Midjourney,到能编程的Copilot,大家已经见怪不怪了。但你可能没太留意,这股风其实早就吹进了汽车行业&…...

可解释AI(XAI)技术解析:从原理到行业落地实践

1. 项目概述:为什么我们需要“看得懂”的AI?最近几年,AI模型的能力边界被不断刷新,从能写诗作画的生成式模型,到能精准预测蛋白质结构的AlphaFold,其表现常常令人惊叹。然而,一个越来越突出的矛…...

CANN/pypto设置立方体切片形状

pypto.set_cube_tile_shapes 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A2 …...

CANN学习中心:AddCustom算子工程示例

完整示例:AddCustom 算子工程 【免费下载链接】cann-learning-hub CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-…...

2025届必备的五大降重复率网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将文本里的AIGC痕迹予以降格处理,其关键环节在于对AI所具备的规律性表达予以破除…...

CANN/社区安全发布指南

版本发布网络安全质量要求 【免费下载链接】community 本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息 项目地址: https://gitcode.com/cann/community 为保障版本网络安全质量,版本发布前…...

在Node.js后端服务中集成Taotoken实现多模型智能对话功能

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken实现多模型智能对话功能 为Node.js后端服务添加智能对话能力,是现代应用开发中的常见…...

CANN/pypto设置Pass优化参数

pypto.set_pass_options 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Atlas A3 训练系列产品/Atlas A3 推理系列产…...

考PMP别乱报!双官方认证考试中心,合规有保障!

在PMP报考过程中,最核心的风险点在于机构资质。一旦误选非官方授权的机构,可能导致35小时培训证明不被认可、报名被驳回,甚至影响后续证书续期。而“双官方认证”是规避这些风险的根本保障。 才聚是国内少数同时持有PMI(美国项目管…...

CANN驱动带外通道状态查询

dcmi_get_device_outband_channel_state 【免费下载链接】driver 本项目是CANN提供的驱动模块,实现基础驱动和资源管理及调度等功能,使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_outband_channel_s…...

CANN Cumsum算子测试题

决赛题目:Cumsum 算子测试用例设计 【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 任务说明 本题目要求参赛者为 CA…...

AI/ML学习持久性研究:社会归属感与职业信心的双重引擎效应

1. 项目概述:为什么我们要关心“学生持久性”? 在机器学习与人工智能这个炙手可热的领域,我们常常被顶尖会议的论文、刷榜的模型、高薪的职位所吸引。然而,一个容易被忽视却至关重要的问题是:那些满怀热情踏入这个领域…...

可视化后台轻松维护PC管理系统

一、概述总结蘑菇云响应式企业官网是基于微擎框架开发的 PC 端企业官网搭建系统,支持响应式布局、独立域名绑定、可视化内容管理,可快速搭建适配多终端的企业官方网站。系统具备官方正品保障、源码加密安全稳定,配备产品管理、新闻资讯、在线…...

Snowflake DATEADD函数实战指南:时间计算、性能优化与跨时区处理

1. 为什么 DATEADD 是 Snowflake 里最值得你花时间吃透的函数之一在 Snowflake 实际项目里跑过上百个调度任务、处理过 TB 级时序数据、给金融客户搭过三年滚动预测模型之后,我越来越确信一件事:DATEADD 不是“又一个日期函数”,而是你 SQL 能…...

4G无线RS485/232对传模块:远程数传,赋能智慧园区升级

4G无线RS485/232模块有效解决传统有线方案在老旧园区改造、设备分散区域的数据采集与设备控制难题,适用于智慧园区的建设和改造。 4G无线RS485/232对传模块完全可以用在智慧园区,而且是智慧园区物联网组网的常用核心设备。一、核心适配逻辑 智慧园区里大…...

SQL Server UPDATE JOIN 实战指南:高效安全的跨表更新技术

1. 项目概述:为什么 UPDATE JOIN 是 SQL Server 里最常被低估的“数据缝合术”在真实业务场景里,数据库从来不是一张张孤立的表格,而是一张张彼此咬合的齿轮。你刚在客户表里把王建国的邮箱从wangold.com改成wangnew.com,销售系统…...

通过curl命令直接测试taotoken大模型api的完整步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令直接测试Taotoken大模型API的完整步骤 对于开发者而言,在集成或调试初期,直接使用curl命令测试…...

【3D】VTK教程:在Qt界面上加载3D画面

1、配置渲染环境 QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());在执行 QApplication app(argc, argv); 之前调用该接口,否则 Qt 可能已使用默认格式创建窗口,导致设置无效 QSurfaceFormat:是 Qt 中描述 OpenGL 渲染表面属性的类,包含OpenG…...