数据通路【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitAI Core硬件架构与存储单元AI Core是昇腾处理器的核心计算单元以NPU架构版本2201为例其内部分层存储架构如图1所示主要包含以下组成部分计算单元图中黄色高亮包括Cube矩阵计算单元、Vector矢量计算单元和Scalar标量计算单元分别负责矩阵乘加、向量运算和标量控制流。存储单元按层级由外到内依次为Global MemoryGM位于AI Core外部、L1 Buffer、L0A/L0B/L0C Buffer、Unified BufferUB、BiasTable Buffer、Fixpipe Buffer等。各存储单元的容量与对齐要求各异详情参见内存层级架构。搬运单元图中黄色高亮包括MTE1Memory Transfer Engine 1、MTE2、MTE3和FixPipe负责数据在不同存储单元之间的DMA传输。其中MTE2负责GM - Local Memory方向的搬运MTE3负责Local Memory - GM方向的搬运MTE1负责L1 Buffer - L0 Buffer方向的数据搬运FixPipe负责将计算结果从L0C Buffer中通过随路量化和随路激活的方式搬出。图 1NPU架构版本2201下AI Core硬件架构示意图以NPU架构版本3510为例其内部分层存储架构如图2所示该架构在数据通路上有如下变化新增L0C Buffer到UB的单向数据通路。新增UB到L1 Buffer的数据通路。删除GM到L0A Buffer、L0B Buffer的数据通路。删除L1 Buffer到GM的数据通路。图 2NPU架构版本3510下AI Core硬件架构示意图[!NOTE]说明同一个物理内存可能对应多个不同的TPosition例如Unified BufferUB同时映射到VECIN、VECCALC和VECOUT三个逻辑位置分别代表矢量计算的输入、中间计算和输出阶段。L1 Buffer同时映射到A1、B1、C1和TSCM具体含义取决于当前所服务的计算流程矩阵左/右矩阵暂存或共享通信。这种设计使得同一物理内存可以在不同计算阶段被赋予不同的逻辑语义开发者可根据编程模型的阶段需求选择合适的TPosition。同一个逻辑位置在不同产品型号中可能对应不同的物理内存例如逻辑位置CO2在Atlas A2 训练系列产品/Atlas A2 推理系列产品中映射到Global Memory而在Atlas训练及推理系列产品中映射到Unified Buffer详细情况请参考逻辑位置和物理存储的映射关系。数据通路与搬运流水基于上述存储单元和搬运单元AI Core内的数据通路及其对应的硬件流水如下表所示。每条数据通路指定了源SRC与目的DST存储单元以及执行搬运的硬件流水理解这些通路是选择正确数据搬运接口参数的基础。[!NOTE]说明 下表为所有产品型号的数据通路汇总。具体每条数据通路是否在特定产品上支持请以对应API接口文档中的产品支持情况表格为准。表 1数据搬运功能总览源SRC目的DST流水Pipeline功能支持的APIGlobal MemoryL1 BufferMTE2将Global Memory中的矩阵数据连续搬运至L1 Buffer做中转。DataCopyGlobal MemoryL1 BufferMTE2将Global Memory中的矩阵数据通过高维切分方式搬运至L1 Buffer做中转。DataCopyGlobal MemoryL1 BufferMTE2将Global Memory中的矩阵数据搬运到L1 Buffer的同时实现ND到NZ格式的随路转换。DataCopyGlobal MemoryL1 BufferMTE2将Global Memory中的矩阵数据搬运到L1 Buffer的同时实现DN到NZ格式的随路转换。DataCopyGlobal MemoryL1 BufferMTE2将Global Memory中的非对齐数据搬运至L1 Buffer并对边界无效区域做Padding填充。DataCopyPadGlobal MemoryL1 BufferMTE2将Global Memory中的NZ格式数据搬运至L1 Buffer。LoadData2D矩阵搬运Global MemoryL1 BufferMTE2将Global Memory中的NZ格式数据搬运至L1 Buffer。LoadData2D矩阵搬运V2Global MemoryL0A BufferMTE2将Global Memory中的2D格式分形矩阵搬运至L0A Buffer作为矩阵计算的左矩阵输入。LoadData2D矩阵搬运Global MemoryL0B BufferMTE2将Global Memory中的2D格式分形矩阵搬运至L0B Buffer作为矩阵计算的右矩阵输入。LoadData2D矩阵搬运Global MemoryUnified BufferMTE2将Global Memory中的矩阵数据连续搬运至Unified Buffer。DataCopyGlobal MemoryUnified BufferMTE2将Global Memory中的矩阵数据通过高维切分方式搬运至Unified Buffer。DataCopyGlobal MemoryUnified BufferMTE2将Global Memory中的数据按切片方式搬运至Unified Buffer。DataCopyGlobal MemoryUnified BufferMTE2将Global Memory中的数据搬运至Unified Buffer的同时完成ND到NZ格式的随路转换。DataCopyGlobal MemoryUnified BufferMTE2将Global Memory中的数据以NDDMA方式多维搬运至Unified Buffer。DataCopyGlobal MemoryUnified BufferMTE2将Global Memory中的非对齐数据搬运至Unified Buffer并对边界无效区域做Padding填充。DataCopyPadUnified BufferGlobal MemoryMTE3将Unified Buffer中的数据搬运到Global Memory的同时完成NZ到ND格式的随路转换。DataCopyUnified BufferGlobal MemoryMTE3将Unified Buffer中的非对齐数据搬运到Global Memory并对边界无效区域做Padding填充。DataCopyPadUnified BufferL1 BufferMTE3将Unified Buffer中的数据连续搬运至L1 Buffer。DataCopyUnified BufferL1 BufferMTE3将Unified Buffer中的数据通过高维切分方式搬运至L1 Buffer。DataCopyUnified BufferL1 BufferMTE3将Unified Buffer中的数据搬运到L1 Buffer的同时完成ND到NZ格式的随路转换。DataCopyUnified BufferL1 BufferMTE3将Unified Buffer中的非对齐数据搬运到L1 Buffer并对边界无效区域做Padding填充。DataCopyPadL1 BufferUnified BufferMTE3将L1 Buffer中的数据连续搬运至Unified Buffer。DataCopyL1ToUBL1 BufferUnified BufferMTE3将L1 Buffer中的数据通过高维切分方式搬运至Unified Buffer。DataCopyL1ToUBL1 BufferL0A BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。LoadData2D矩阵搬运L1 BufferL0A BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。LoadData2D矩阵搬运V2L1 BufferL0A BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer作为Cube矩阵乘的左矩阵输入。LoadDataMX矩阵搬运L1 BufferL0A BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0A Buffer的同时完成转置。LoadDataWithTransposeL1 BufferL0A BufferMTE1将L1 Buffer中的3D格式分形矩阵搬运至L0A Buffer支持3D-Tile规则搬运。LoadData卷积数据搬运L1 BufferL0A BufferMTE1将L1 Buffer中的3D格式分形矩阵搬运至L0A Buffer支持3D-Tile规则搬运支持配置输出矩阵K轴方向偏移量。LoadDataWithStrideL1 BufferL0B BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0B Buffer作为Cube矩阵乘的右矩阵输入。LoadData2D矩阵搬运L1 BufferL0B BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0B Buffer作为Cube矩阵乘的右矩阵输入。LoadData2D矩阵搬运V2L1 BufferL0B BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0B Buffer作为Cube矩阵乘的右矩阵输入。LoadDataMX矩阵搬运L1 BufferL0B BufferMTE1将L1 Buffer中的2D格式分形矩阵搬运至L0B Buffer的同时完成转置。LoadDataWithTransposeL1 BufferL0B BufferMTE1将L1 Buffer中的3D格式分形矩阵搬运至L0B Buffer支持3D-Tile规则搬运。LoadData卷积数据搬运L1 BufferL0B BufferMTE1将L1 Buffer中的3D格式分形矩阵搬运至L0B Buffer支持3D-Tile规则搬运支持配置输出矩阵K轴方向偏移量。LoadDataWithStrideL1 BufferL0B BufferMTE1将L1 Buffer中的稠密权重矩阵搬运至L0B Buffer同时支持稀疏解压。LoadDataWithSparseL1 BufferBiasTable BufferMTE1将L1 Buffer中的偏置数据连续搬运至BiasTable Buffer供矩阵计算使用。DataCopyL1 BufferBiasTable BufferMTE1将L1 Buffer中的偏置数据通过高维切分方式搬运至BiasTable Buffer。DataCopyL1 BufferFixpipe BufferFixPipe将矩阵数据搬出需要的随路量化和随路relu参数从L1 Buffer连续搬运至Fixpipe Buffer。DataCopyL1 BufferFixpipe BufferFixPipe将矩阵数据搬出需要的随路量化和随路relu参数从L1 Buffer通过高维切分方式搬运至Fixpipe Buffer。DataCopyL0C BufferGlobal MemoryFixPipe将Cube计算结果从L0C Buffer搬运到Global Memory支持随路量化和激活后处理。DataCopyL0C BufferGlobal MemoryFixPipe将Cube计算结果从L0C Buffer搬运到Global Memory通过FixPipe流水完成量化、激活、格式转换。FixPipeL0C BufferL1 BufferFixPipe将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转支持随路量化和激活。DataCopyL0C BufferL1 BufferFixPipe将Cube计算结果从L0C Buffer搬运至L1 Buffer做中转通过FixPipe完成量化、激活、格式转换。FixPipeL0C BufferUnified BufferMTE3将Cube计算结果从L0C Buffer搬运至Unified Buffer支持随路量化和激活后处理。DataCopyL0C BufferUnified BufferMTE3将Cube计算结果从L0C Buffer搬运至Unified Buffer通过FixPipe完成量化、激活、格式转换。FixPipeUnified BufferUnified BufferPIPE_VUnified Buffer内部连续数据搬移。DataCopyUnified BufferUnified BufferPIPE_VUnified Buffer内部通过高维切分方式搬移数据。DataCopyUnified BufferUnified BufferPIPE_VUnified Buffer内部连续数据搬移。CopyUnified BufferUnified BufferPIPE_VUnified Buffer内部掩码式高维数据搬移。Copy【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考