CANN/cannbot-skills:Ascend910_95硬件速查手册
Ascend910_95 硬件速查手册面向 Triton Agent【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills触发条件当 Triton Agent 遇到以下场景时需要参考本文档目标设备为 Ascend910_95 / 950PR / 950DT 系列架构代号dav-c310需要确定内存分配策略UB/L1/L0C 容量、对齐约束需要选择正确的 Pipeline 或数据通路尤其是 L0C-UB 直通、UB-L1 通路需要判断 Reg-based vs Mem-based 架构行为差异SIMT VF 模式、同步机制、归约降级需要使用紧耦合缓冲区TightlyCoupledBuffer需要确认对齐要求以避免硬件异常核心知识规格速查表AI Core 架构每个 AI Core 1 Cube (AIC) 2 Vector (AIV) Scalar VectorCoreCount 2 * CubeCoreCount 2 * AiCoreCountAscend910_95 系列规格表型号AI CoreCube CoreVector CoreUBDCacheL1L0AL0BL0CArchAscend910_950z448248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_9579282856248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_957b282856248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_957d282856248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_9581323264248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_9589323264248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_958a323264248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_958b323264248KB32~120KB512KB64KB64KB256KBdav-c310Ascend910_9599363672248KB32~120KB512KB64KB64KB256KBdav-c310UB 248KB 256KB - 8KB预留 8KB 给编译器源码值UbSize2031616 bits内存层次速查层次IR 标识符枚举值大小 (910_95)大小 (910B)对齐所属单元GMgm1HBM/L2HBM/L2-共享L1cbuf2512KB512KB32BCubeL0Aca364KB64KB-Cube A 端L0Bcb464KB64KB-Cube B 端L0Ccc5256KB128KB512BCube C 端UBub6248KB192KB32BVectorDCache--32~120KB无-SIMT VectorIR 声明示例memref?x?x?x?xf32, #hivm.address_spacecbuf memref?x?x?x?xf32, #hivm.address_spacecc memref256x256xf16, #hivm.address_spacegm memref128x128xf32, #hivm.address_spaceub专用硬件缓冲区缓冲区大小对齐访问方式BT Buffer (BiasTable)1KB64Bcopy_cbuf_to_bt从 L1 拷贝FP Buffer (FixPipe)7KB128Bhivm.fixpipe隐式使用对齐要求所有架构一致存储空间对齐源码值 (bits)UB32B256L132B256L0C512B4096910_95 特别注意与 910B 的关键差异速查特性910B (dav-c220)910_95 (dav-c310)架构类型Mem-based(A2/A3)Reg-based(A5)SIMT VF 模式不支持支持UB192KB248KB预留 8KBL0C128KB256KBDCache无32~120KBL0C - UB 直通不支持支持FixPipeUB - L1 通路不支持支持PIPE_MTE3紧耦合缓冲区不支持支持Fixpipe Dual Dst不支持支持ROW_SPLIT / COLUMN_SPLITFixpipe NZ2DN不支持支持同步方式FFTS基于内存SetFlag/WaitFlag基于寄存器归约标量降级i64/argmax/argmin 会降级基本归约不降级vcmp(NE) 规范化vnot(vcmp(EQ))不做规范化数据通路 ASCII 图910_95 特有----------------------------------------------------------------------------- | 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 | | ----------- |910_95 vs 910B 关键通路差异910_95: GM - L1 - L0A/L0B - L0C - UB - V - UB - GM ^^^^^^^^^^^^ L0C直通UB省去GM中转 910B: GM - L1 - L0A/L0B - L0C - GM - UB - V - UB - GM ^^^^^^^^ 必须经过GM中转Reg-based vs Mem-based 架构差异910_95 是Reg-based (A5)架构910B 是Mem-based (A2/A3)架构。判断函数bool isRegBasedArch(TargetDevice targetDevice) { return isAscend310B(targetDevice) || isAscend950(targetDevice); } bool isMemBasedArch(TargetDevice targetDevice) { return isAscend910B(targetDevice) || isAscend910_93(targetDevice); }核心区别维度Mem-based (910B)Reg-based (910_95)SIMT VF 模式不支持编译器跳过 InferVFMode支持运行 InferVFMode 推断 SIMD/SIMT/MIX数据访问模型全部基于 UB 缓冲区SIMDSIMT 基于寄存器SIMD 基于 UBSIMT 编译路径无SIMT VF 拆分后走 Triton GPU 编译路径DCache无有32~120KB同步方式FFTS基于内存SetFlag/WaitFlag基于寄存器跨核同步SetCrossCoreInstrOpIntraBlockSet / IntraBlockRegInstrOpPipe Barrier对所有 Pipe 生成 barrier跳过 PIPE_V 的 barrier归约降级i64 归约和整数 argmax/argmin 标量降级基本归约不降级除 argmax/argmin 对齐问题vcmp(NE)规范化为 vnot(vcmp(EQ))不做规范化内存规划SIMT/MIX 下不需要动态调整 UBSIMT/MIX 下需动态调整 UB考虑 DCache入口配置configureEntryForMembaseArchconfigureEntryForRegbaseArchPipeline 枚举速查枚举IR 标识符数值硬件单元数据流典型操作PIPE_SPIPE_S0Scalar标量计算循环控制、条件判断PIPE_VPIPE_V1VectorUB - UBvadd,vmul,vcast,vreducePIPE_MPIPE_M2CubeL0A/L0B - L0CmmadL1中的矩阵乘法PIPE_MTE1PIPE_MTE13MTE1 DMAL1 - L0A/L0B/BTmmadL1中的数据加载,l12ubPIPE_MTE2PIPE_MTE24MTE2 DMAGM - L1/UBload,nd2nzPIPE_MTE3PIPE_MTE35MTE3 DMAUB - GM/L1store,nz2nd, UB-L1PIPE_FIXPIPE_FIX10FixPipeL0C - GM/L1/UBfixpipe完整枚举还包括PIPE_ALL(6), PIPE_MTE4(7), PIPE_MTE5(8), PIPE_V2(9), VIRTUAL_PIPE_MTE2_L1A(11), VIRTUAL_PIPE_MTE2_L1B(12), PIPE_NUM(13), PIPE_UNASSIGNED(99)源-目标到 Pipeline 映射源目标PipelineIR 操作GML1PIPE_MTE2hivm.nd2nzGMUBPIPE_MTE2hivm.loadL1GMPIPE_MTE2copy_cbuf_to_gmL1L0APIPE_MTE1内部指令L1L0BPIPE_MTE1内部指令L1UBPIPE_MTE1hivm.l12ubL0A/L0BL0CPIPE_MCube 计算L0CGMPIPE_FIXhivm.fixpipeL0CL1PIPE_FIXhivm.fixpipeL0CUBPIPE_FIXhivm.fixpipe仅 950UBUBPIPE_Vhivm.copyUBGMPIPE_MTE3hivm.storeUBL1PIPE_MTE3hivm.copy仅 950紧耦合缓冲区910_95 特有IR 表示#hivm.tightly_coupled_bufferid : optionali32两种模式模式数据流向说明MoveToUbL0C - UBCube 结果直通 Vector 工作区MoveToL1UB - L1Vector 处理结果回传 Cube 输入缓存Pipeline 选择逻辑if (isAscend950(target)) { if (enableLayoutOptimization) { InsertCVDataMovement // A5 新布局优化路径 } else { InsertCVTightCoupledBuffer // 传统紧耦合缓冲区路径 } } else { InsertLoadStoreForMixCV // 非 950: 必须经过 GM 中转 }VFMode 枚举仅 Reg-based 架构使用枚举IR 标识符数值说明SIMD#hivm.vf_modeSIMD0传统 Vector 执行基于 UBSIMT#hivm.vf_modeSIMT1类 GPU 线程级并行基于寄存器MIX#hivm.vf_modeMIX2混合模式通过--enable-simd-simt-mix-compile启用核心类型枚举速查操作级 TCoreType枚举IR 标识符说明CUBE#hivm.tcore_typeCUBE在 Cube 核心执行VECTOR#hivm.tcore_typeVECTOR在 Vector 核心执行CUBE_OR_VECTOR#hivm.tcore_typeCUBE_OR_VECTOR可在任一核心执行CUBE_AND_VECTOR#hivm.tcore_typeCUBE_AND_VECTOR需 CubeVector 同时执行函数级 TFuncCoreType枚举IR 标识符说明AIC#hivm.func_core_typeAIC运行在 AI Cube 核心AIV#hivm.func_core_typeAIV运行在 AI Vector 核心MIX#hivm.func_core_typeMIX混合使用 CubeVector相关文档链接01-npu-hardware-overview.md -- NPU 硬件架构总览完整型号规格、架构分类详解02-memory-hierarchy.md -- 内存层次详解完整数据通路、随路操作、910B ASCII 图03-pipeline-execution-model.md -- Pipeline 执行模型同步机制、Trait 定义、Event ID04-data-layout.md -- 数据布局详解ND/NZ/zN/nZ/Fractal、布局转换操作NPUTargetSpec.td -- 型号规格 TableGen 源文件HIVMAttrs.td -- IR 属性枚举源文件【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考