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

CANN-Ascend-C存储体系-昇腾NPU的四级缓存怎么用才算对

写 Ascend C 算子最常犯的错误不是计算写错是数据搬运写错。昇腾NPU有四级存储每一级的容量、带宽、延迟都不同。数据该放在哪一级、什么时候搬、搬多少直接决定算子性能。四级存储级别名称容量带宽延迟用途L0HBM全局显存64GB1.2 TB/s~300ns权重、KV Cache、模型参数L1L2 Cache8MB6 TB/s~30ns自动缓存热点数据L2L1 Buffer1MB12 TB/s~5ns算子内部的中间数据L3Local Buffer256KB24 TB/s~1nsVector/Cube 当前计算的数据带宽差距是 20 倍HBM 到 Local Buffer。算子性能取决于数据在 L0 停留多久——停留越短越好。数据搬运方式DMA 搬运L0 ↔ L2由 DMA 引擎执行不占 Cube/Vector 单元。适合大批量数据搬运。// DMA 搬运HBM → L2 → L1DataCopyPad(l1_buf,hbm_buf,{block_len});// L0 → L1DataCopyPad(hbm_buf,l1_buf,{block_len});// L1 → L0Cube/Vector 自动搬运L1 ↔ L3Cube 或 Vector 单元执行计算时自动从 L1 读数据到 Local Buffer。程序员不需要手动搬。// Vector 计算时自动从 L1 读到 Local BufferAdd(z_local,x_local,y_local,block_len);// x_local, y_local 在 Local Buffer// z_local 写回 Local BufferDouble Buffer 技术单次搬运的计算流程[DMA搬入] → [计算] → [DMA搬出] → [DMA搬入] → [计算] → [DMA搬出] 计算单元空闲等待 计算单元空闲等待Double Buffer 让计算和搬运重叠Buffer A: [DMA搬入] → [计算] → [DMA搬出] Buffer B: [DMA搬入] → [计算] → [DMA搬出] ↑ 跟 Buffer A 的计算同时进行代码实现classMyKernel{__aicore__inlinevoidProcess(){// 双缓冲buf_a 和 buf_b 交替使用LocalTensorhalfbuf_apipe_.GetBufferhalf(0);LocalTensorhalfbuf_bpipe_.GetBufferhalf(1);// 预取第一块DataCopy(buf_a,x_gm_[0],block_len_);for(inti0;itiles_-1;i){// 当前块计算 下一块预取DataCopy(buf_b,x_gm_[(i1)*block_len_],block_len_);Compute(buf_a);// 计算第 i 块std::swap(buf_a,buf_b);}// 最后一块Compute(buf_a);}};Double Buffer 的前提L1 有足够空间放两个 buffer。1MB 的 L1 / 2 512KB per buffer。如果 block_len 4096 个 fp16 元素 8KB512KB 可以放 64 个 block空间充裕。常见性能反模式反模式 1计算完再搬运// ❌ 搬入全部数据 → 全部计算 → 搬出全部数据for(inti0;itiles_;i)DataCopy(l1[i],hbm[i],block_len_);for(inti0;itiles_;i)Compute(l1[i]);for(inti0;itiles_;i)DataCopy(hbm[i],l1[i],block_len_);// ✅ 分块计算搬运重叠for(inti0;itiles_;i){DataCopy(l1,hbm[i],block_len_);Compute(l1);DataCopy(hbm[i],l1,block_len_);}第一种 L1 放不下所有 tile会触发 L1 溢出到 L2性能降 50%。反模式 2忽略对齐// ❌ 非对齐搬运DataCopy(dst,src,17);// 17 不是 32 的倍数// ✅ 对齐搬运补零到 32 的倍数uint32_taligned_len(len31)~31;DataCopyPad(dst,src,{aligned_len});DMA 引擎的最小搬运单位是 32 bytes。非对齐长度会导致 DMA 多次发起效率降低。反模式 3L1 缓存未复用// ❌ 同一数据读两遍DataCopy(x_local,x_gm,len);// 第一次读Compute1(x_local);DataCopy(x_local,x_gm,len);// 重复读Compute2(x_local);// ✅ 读一次多步计算DataCopy(x_local,x_gm,len);Compute1(x_local);Compute2(x_local);// x_local 还在 L1 里L1 数据在算子执行期间一直有效不需要重复从 HBM 读。Ascend C 的性能调优本质上是存储调优。计算逻辑大家都差不多搬运策略决定了谁是 90 分谁是 60 分。掌握四级存储的层次关系和 Double Buffer 技术算子性能就能到 80 分以上。仓库在这里https://atomgit.com/cann/opbase
http://www.gsyq.cn/news/1352408.html

相关文章:

  • 深入了解指针(3)
  • 2026年最严重终端安全事件:Microsoft Defender双零日漏洞深度解析与防御实战
  • Ollama API 详解(学习笔记)
  • 北光恒电:安捷伦DSOS系列示波器(DSOS104/254/404/804)不开机、输出不正常故障排查
  • 什么是运算符
  • 【NotebookLM风格一致性终极指南】:20年AI产品专家亲授3大校准框架与5步落地法
  • 别再死磕论文修改!paperxie 一站式解决查重 + 降 AIGC 两大难题
  • CAN一致性-物理层--高压通信范围测试
  • 2026年评价高的惠州短视频剪辑/惠州短视频运营专业公司推荐 - 品牌宣传支持者
  • 图智能平台产品选型指南:如何用关系数据提升洞察、风控与决策能力
  • 2026 年 5 月 AI 热点:大模型、硬件、人形机器人全面升级
  • CANN内存优化实战:为什么HBM带宽总是第一个打满的
  • Python __slots__ 入门指南
  • 基于魔珐星云打造的办公室助理数字人:高效办公、智能协作、语音随时交互
  • 回测年化50%,实盘亏20%:99%量化新手都会犯的7个致命错误
  • 让ClaudeCode成本爆降89%,这个开源工具有点猛...
  • Spring Boot 集成阿里云 OSS 实现文件上传下载的完整指南(从概念到代码)
  • 用 PS 抠公章最详细步骤|零基础一键抠取透明公章
  • 解锁Linux无线网卡配置:RTL8821CU驱动实战深度指南
  • 量子纠错码与逻辑门优化实现技术解析
  • Keil µVision TAB显示异常问题分析与解决方案
  • A51汇编器Error 21解析与8051开发实践
  • 量子计算与人工智能融合:技术原理与应用前景
  • Cortex-M3/M4处理器模式判断与调试技巧
  • 量子退火与模拟退火在组合优化中的应用对比
  • RIS辅助MA系统的近场DM设计与优化
  • 好莱坞已悄悄启用AI拍片:2024年7部奥斯卡入围作品背后的生成式视频技术全拆解
  • 基于人工神经网络的船舶配员人数预测模型
  • AI安全简报与模型能力发布机制解析
  • 本地化PentestGPT实战指南:Llama 3-70B红队渗透五步工作流