CANN/cannbot-skills内存层次详解

发布时间:2026/7/11 15:33:01

CANN/cannbot-skills内存层次详解
内存层次详解【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词AddressSpace, GM, L1, L0A, L0B, L0C, UB, MTE2, MTE1, MTE3, FIX, 数据通路, 随路操作, 紧耦合缓冲区概述Ascend NPU 的内存层次是其计算性能的关键基础。与通用处理器不同NPU 的各级存储空间与特定的计算单元和执行流水线紧密绑定数据在不同存储层次之间的搬运由专用的 DMA 引擎MTE 系列 Pipeline完成而非通过统一的缓存层次自动管理。理解内存层次对于编写高效的 HIVM IR 至关重要每个memref必须通过#hivm.address_space...属性标注其所在的存储空间每个数据搬运操作必须使用正确的 Pipeline且不同存储空间之间的数据通路存在严格的硬件约束。本文档从 NPUTargetSpec.td 和 HIVMAttrs.td 中精确提取各级存储的容量、对齐要求和数据通路信息。完整内存层次通用可寻址存储空间层次IR 标识符枚举值说明所属计算单元GMgm1全局内存 (HBM/L2)设备外部存储所有单元共享L1cbuf2一级缓存Cube 单元L0Aca3矩阵 A 输入缓存Cube A 端L0Bcb4矩阵 B 输入缓存Cube B 端L0Ccc5矩阵乘法结果缓存Cube C 端UBub6统一缓冲区Vector 单元专用硬件缓冲区缓冲区大小对齐说明访问方式BT Buffer (BiasTable)1KB64B存放矩阵乘法的 Bias 数据通过copy_cbuf_to_bt从 L1 拷贝FP Buffer (FixPipe)7KB128BFixPipe 流水线的中间缓冲区通过hivm.fixpipe隐式使用各级存储的容量和对齐要求Ascend910B / 910_93 系列源文件NPUTargetSpec.td:64-74存储空间大小对齐要求源码值bitsUB192KB32BUbSize1572864, UbAlignSize256L1512KB32BL1Size4194304, L1AlignSize256L0A64KB-L0aSize524288L0B64KB-L0bSize524288L0C128KB512BL0cSize1048576, L0cAlignSize4096Ascend310B 系列源文件NPUTargetSpec.td:156-166存储空间大小对齐要求源码值bitsUB256KB32BUbSize2097152, UbAlignSize256L11024KB32BL1Size8388608, L1AlignSize256L0A64KB-L0aSize524288L0B64KB-L0bSize524288L0C128KB512BL0cSize1048576, L0cAlignSize4096Ascend910_95 / 950PR / 950DT 系列源文件NPUTargetSpec.td:196-208存储空间大小对齐要求源码值bitsUB248KB预留 8KB32BUbSize2031616, UbAlignSize256DCache32KB ~ 120KB-MinimalDCacheSize262144, MaximumDCacheSize983040L1512KB32BL1Size4194304, L1AlignSize256L0A64KB-L0aSize524288L0B64KB-L0bSize524288L0C256KB512BL0cSize2097152, L0cAlignSize4096数据通路详解AddressSpace 枚举与硬件存储的完整映射表源文件HIVMAttrs.td:171-197枚举值C 符号数值IR 标识符硬件存储说明ZeroAddressSpace::Zero0zero-默认/零地址空间GMAddressSpace::GM1gmHBM/L2全局内存L1AddressSpace::L12cbufL1 CacheCube 一级缓存L0AAddressSpace::L0A3caL0A Buffer矩阵 A 输入缓存L0BAddressSpace::L0B4cbL0B Buffer矩阵 B 输入缓存L0CAddressSpace::L0C5ccL0C Buffer矩阵乘法结果缓存UBAddressSpace::UB6ubUB统一缓冲区IR 使用示例memref?x?x?x?xf32, #hivm.address_spacecbuf memref?x?x?x?xf32, #hivm.address_spacecc memref256x256xf16, #hivm.address_spacegm源-目标地址空间到 Pipeline 的映射源文件HIVMDMAOps.cpp:616-622源地址空间目标地址空间PipelineIR 操作说明GML1PIPE_MTE2hivm.nd2nzGM 到 L1支持 ND-NZ 转换GMUBPIPE_MTE2hivm.loadGM 到 UB支持 PaddingL1GMPIPE_MTE2copy_cbuf_to_gmL1 到 GM支持 NZ-ND 转换L1L0APIPE_MTE1内部指令L1 到矩阵 A 缓存L1L0BPIPE_MTE1内部指令L1 到矩阵 B 缓存L1BT BufferPIPE_MTE1copy_cbuf_to_btL1 到 Bias Table 缓存L1UBPIPE_MTE1hivm.l12ubL1 到 UBL0A/L0BL0CPIPE_MCube 计算矩阵乘法L0CGMPIPE_FIXhivm.fixpipeL0C 到全局内存L0CL1PIPE_FIXhivm.fixpipeL0C 到 L1 缓存L0CUBPIPE_FIXhivm.fixpipeL0C 到 UB仅 950 系列UBUBPIPE_Vhivm.copyUB 内复制UBGMPIPE_MTE3hivm.storeUB 到全局内存UBL1PIPE_MTE3hivm.copyUB 到 L1仅 950 系列Cube 数据通路Cube 计算路径涉及从 GM 加载数据到 L1再从 L1 加载到 L0A/L0B经 Cube 计算后结果写入 L0C最后通过 FixPipe 输出。GM ──[MTE2]──▶ L1 ──[MTE1]──▶ L0A/L0B/BT Buffer ──[M]──▶ L0C ──[FIX]──▶ GM/L1/UB详细步骤MTE2: 从 GM 加载矩阵 A、矩阵 B 数据到 L1MTE2: 从 GM 加载 Bias 数据到 L1MTE1: 从 L1 加载矩阵 A 数据到 L0AMTE1: 从 L1 加载矩阵 B 数据到 L0BMTE1: 从 L1 加载 Bias 数据到 BT BufferM: Cube 执行矩阵乘法结果写入 L0CFIX: L0C 数据通过 FixPipe 输出到 GM/L1/UBVector 数据通路Vector 计算路径从 GM 加载数据到 UB在 UB 中完成向量计算后写回 GM。GM ──[MTE2]──▶ UB ──[V]──▶ UB ──[MTE3]──▶ GM910_95 特殊通路Ascend950 架构引入了两条特殊数据通路L0C - UB 直通通路Cube 计算结果可直接通过 FixPipe 输出到 UB无需经过 GM 中转。这使得 Cube-Vector 混合计算路径更高效910_95: GM ──[MTE2]──▶ L1 ──[MTE1]──▶ L0A/L0B ──[M]──▶ L0C ──[FIX]──▶ UB ──[V]──▶ UB ──[MTE3]──▶ GM 非910_95: GM ──[MTE2]──▶ L1 ──[MTE1]──▶ L0A/L0B ──[M]──▶ L0C ──[FIX]──▶ GM ──[MTE2]──▶ UB ──[V]──▶ UB ──[MTE3]──▶ GMUB - L1 通路Vector 处理后的数据可从 UB 搬运到 L1供后续 Cube 操作使用。随路操作汇总表随路操作是指在数据搬运过程中由硬件 DMA 引擎自动完成的附加操作无需额外的计算指令。Pipeline数据流向支持的随路操作IR 属性/操作备注MTE1L1 - L0A/L0B矩阵转置a_transpose/b_transpose在mmadL1等操作中设置MTE1L1 - L0A/L0B布局转换zN - nZ支持格式互转MTE2GM - L1ND - NZ 布局转换hivm.nd2nz将 ND 格式转为 NZ 格式MTE2L1 - GMNZ - ND 布局转换hivm.nz2nd将 NZ 格式转为 ND 格式MTE2GM - UBPaddingpad_mode,pad_value,left_padding_num,right_padding_num在hivm.load中设置MTE2GM - UB隐式转置may_implicit_transpose_with_last_axis在hivm.load中设置MTE3UB - GM原子操作atomic_kind支持 add, max, min, and, or, xor, CAS, XCHGMTE3UB - GM隐式转置may_implicit_transpose_with_last_axis在hivm.store中设置FIXL0C - GM/L1/UB预量化pre_quantFP32-FP16, FP32-BF16, INT32-INT8FIXL0C - GM/L1/UB预激活pre_reluReLU, Leaky ReLU, P-ReLUFIXL0C - GM/L1/UB布局转换dma_modeNZ2ND, NZ2DN, NZ2NZFIXL0C - UB双目标模式dual_dst_modeROW_SPLIT, COLUMN_SPLIT仅 950 系列FIXL0C - GM/L1/UBChannel Splitchannel_split仅 950 系列紧耦合缓冲区TightlyCoupledBuffer源文件HIVMAttrs.td:1010-1017紧耦合缓冲区是Ascend950 架构特有的 CVCube-Vector通信机制用于在 Cube 操作和 Vector 操作之间高效传递数据无需经过全局内存中转。IR 表示#hivm.tightly_coupled_bufferid : optionali32工作原理紧耦合缓冲区通过InsertCVTightCoupledBufferPass 在 Fixpipe 和 Vector 操作之间插入支持两种数据搬运模式模式数据流向说明MoveToUbL0C - UB将 Cube 计算结果从 L0C 直接搬运到 UBMoveToL1UB - L1将 Vector 处理后的数据从 UB 搬运到 L1Pipeline 选择逻辑if (isAscend950(target)) { if (enableLayoutOptimization) { InsertCVDataMovement // A5 新布局优化路径 } else { InsertCVTightCoupledBuffer // 传统紧耦合缓冲区路径 } } else { InsertLoadStoreForMixCV // 非 950 设备的混合 CV 路径 }数据流 ASCII 图Ascend910B / 910_93 架构----------------------------------------------------------------------------- | Global Memory (GM / HBM) | ---------------------------------------------------------------------------- | -------------------------------------- | | -----v----- -----v----- | MTE2 | | MTE2 | | GM - L1 | | GM - UB | | (双向) | | (单向) | ---------- ---------- | | v v ----------------------- ----------------- | L1 | | UB | | (cbuf, 512KB) | | (ub, 192KB) | | Cube输入缓存 | | Vector工作区 | ---------------------- ---------------- | | ---------------------- | | | | | -----v----- ---v--- -----v----- | | MTE1 | | MTE1 | | MTE1 | | | L1 - L0A | |L1-L0B| |L1 - BT Buf| | ---------- ------ ---------- | | | | | v v v | ----------- ----------- ----------- | | L0A | | L0B | | BT Buffer | | | (ca,64KB) | | (cb,64KB) | | (1KB) | | | 矩阵A输入 | | 矩阵B输入 | | Bias数据 | | ---------- ---------- ---------- | | | | | -------------------------- | | | v | ------------------ | | Cube | | | (MatMul) | | ----------------- | | | v | ------------------ | | L0C | | | (cc, 128KB) | | | 矩阵乘法结果 | | ----------------- | | | ---------------------- | | | | | -----v----- ---v--- | | FIX | | FIX | | | L0C - GM | |L0C-L1| | ---------- ------ | | | | v v | ----------- ----------- | | GM | | L1 | | ----------- ----------- | | ------------------------------- | -----v----- | MTE3 | | UB - GM | | (单向) | ---------- | v ----------- | GM | -----------Ascend910_95 / 950PR / 950DT 架构----------------------------------------------------------------------------- | Global Memory (GM / HBM) | ---------------------------------------------------------------------------- | -------------------------------------- | | -----v----- -----v----- | MTE2 | | MTE2 | | GM - L1 | | GM - UB | | (双向) | | (单向) | ---------- ---------- | | v v ----------------------- ---------------------- | L1 | | UB | | (cbuf, 512KB) | | (ub, 248KB,预留8KB) | | Cube输入缓存 | | Vector工作区 | ---------------------- --------------------- | | ---------------------- | | | | | -----v----- ---v--- -----v----- | | MTE1 | | MTE1 | | MTE1 | | | L1 - L0A | |L1-L0B| |L1 - BT Buf| | ---------- ------ ---------- | | | | | v v v | ----------- ----------- ----------- | | L0A | | L0B | | BT Buffer | | | (ca,64KB) | | (cb,64KB) | | (1KB) | | | 矩阵A输入 | | 矩阵B输入 | | Bias数据 | | ---------- ---------- ---------- | | | | | -------------------------- | | | v | ------------------ | | Cube | | | (MatMul) | | ----------------- | | | v | ------------------ | | L0C | | | (cc, 256KB) | | | 矩阵乘法结果 | | ----------------- | | | --------------------------------- | | | | | | -----v----- ---v--- -----v----- | | | FIX | | FIX | | FIX | | | | L0C - GM | |L0C-L1| | L0C - UB |---- | | | | | | (950特有) | | ---------- ------ ---------- | | | | | v v v | ----------- ----------- ---------------------- | | GM | | L1 | | UB (紧耦合缓冲区) |--------- ----------- ----------- --------------------- | | | -----v----- | | MTE3 | | | UB - GM | | ---------- | | | v | ----------- | | GM | | ----------- |常见问题Q: 为什么 L0A/L0B 没有对齐要求字段A: 在 NPUTargetSpec.td 的TargetSpec基类中只定义了UbAlignSize、L1AlignSize和L0cAlignSize三个对齐字段L0A/L0B 的对齐要求未在 TableGen 中显式描述。Q: 950 系列的 UB - L1 通路使用哪个 PipelineA: 根据源码 HIVMDMAOps.cpp:616-622{AddressSpace::UB, AddressSpace::L1}映射到PIPE::PIPE_MTE3。Q:hivm.copy操作支持哪些地址空间组合A: 根据源码 HIVMDMAOps.cpp:440-448copy支持的组合为UB - UB和GM - L1。对于 950 系列还额外支持UB - L1。Q: 紧耦合缓冲区和普通数据通路有什么区别A: 紧耦合缓冲区是 950 架构特有的 CV 通信机制它允许 Cube 和 Vector 之间直接传递数据而无需经过 GM 中转。普通数据通路中非 950 设备的 Cube 结果必须先写回 GM再由 Vector 从 GM 加载到 UB。相关文档源码参考NPUTargetSpec.td源码参考HIVMAttrs.td源码参考HIVMDMAOps.td源码参考HIVMDMAOps.cpp上一节01-npu-hardware-overview.md — NPU 硬件架构总览下一节03-pipeline-execution-model.md — Pipeline 执行模型【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

3步轻松搞定:如何用智慧教育平台电子课本下载工具告别在线浏览烦恼?

3步轻松搞定:如何用智慧教育平台电子课本下载工具告别在线浏览烦恼?

2026/7/11 15:33:01

3步轻松搞定:如何用智慧教育平台电子课本下载工具告别在线浏览烦恼? 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获…

AutoRemesher完全解析:开源自动四边形网格重拓扑工具的终极指南

AutoRemesher完全解析:开源自动四边形网格重拓扑工具的终极指南

2026/7/11 15:33:01

AutoRemesher完全解析:开源自动四边形网格重拓扑工具的终极指南 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher AutoRemesher是一款功能强大的开源自动四边形网格重拓扑工具&…

旗舰手机真实体验:参数之外的人机关系深度复盘

旗舰手机真实体验:参数之外的人机关系深度复盘

2026/7/11 15:33:01

1. 项目概述:一场真实用户视角的旗舰机深度体验复盘 “被网评种草买了小米17,用了一个月,才发现和他们说的有点不一样”——这句话不是段子,是我上个月的真实经历。作为连续三年深度使用小米数字系列的用户(从12S Ultr…

MA12070与PIC18F4458高保真音频系统设计解析

MA12070与PIC18F4458高保真音频系统设计解析

2026/7/11 17:13:06

1. 项目概述:基于MA12070与PIC18F4458的高保真音频系统设计在便携式音频设备和智能家居场景中,如何平衡功率输出、音质表现与系统能耗一直是硬件设计师面临的挑战。英飞凌的MA12070数字音频放大器IC与Microchip的PIC18F4458微控制器组合,提供…

JSON API Serializer自定义配置:灵活适应不同项目需求的完整指南

JSON API Serializer自定义配置:灵活适应不同项目需求的完整指南

2026/7/11 17:13:06

JSON API Serializer自定义配置:灵活适应不同项目需求的完整指南 【免费下载链接】jsonapi-serializer A Node.js framework agnostic library for (de)serializing your data to JSON API 项目地址: https://gitcode.com/gh_mirrors/jso/jsonapi-serializer …

WinDiskWriter:在macOS上轻松制作Windows启动U盘的终极解决方案

WinDiskWriter:在macOS上轻松制作Windows启动U盘的终极解决方案

2026/7/11 17:13:06

WinDiskWriter:在macOS上轻松制作Windows启动U盘的终极解决方案 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI &…

如何用茉莉花插件彻底解决Zotero中文文献管理难题

如何用茉莉花插件彻底解决Zotero中文文献管理难题

2026/7/11 17:13:06

如何用茉莉花插件彻底解决Zotero中文文献管理难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 如果你是一位使用Zotero管理学术…

CANN/runtime异步内存复制Stream错误

CANN/runtime异步内存复制Stream错误

2026/7/11 17:13:06

aclrtMemcpyAsync在错误的Stream上下发失败 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 问题现象描述 现象1:调用aclrtMemcpyAsync接口返回设备不匹配错误码 调用 aclrtMemcpyAsync 异…

企业AI落地boss增长营:AI数字人做IP效果真的好吗?从技术架构到落地场景拆解

企业AI落地boss增长营:AI数字人做IP效果真的好吗?从技术架构到落地场景拆解

2026/7/11 17:03:05

AI数字人做IP是2025到2026年最热门的话题之一。从技术角度看,AI数字人的效果取决于底层架构设计和内容生产流程的合理性,而不是单纯看"数字人逼真不逼真"。本文从技术实操角度拆解AI数字人做IP的关键环节和效果验证方法。 一、AI数字人IP的技…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…