Ascend C矩阵计算内存结构 L1 Buffer、L0A Buffer/L0B Buffer内存结构介绍【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit为提升数据访问效率和吞吐量Buffer采用了等容量的内存模块Bank结构设计。内存空间被划分为多个Bank并以Bank为单位进一步分组形成多个Bank GroupBG每个Bank Group包含若干Bank每个Bank都是一个可独立操作的存储单元子模块。下面将介绍Cube侧相关内存L1 Buffer、L0A Buffer、L0B Buffer的详细结构。L1 Buffer内存结构L1 Buffer的总容量为512K字节由16个Bank组成。每个Bank的容量为32K字节由1024行组成每行的宽度为32字节。同一Bank最多同时允许一读或一写。这16个Bank被进一步组织为8个Bank Group。每个Bank Group包含2个BankBank0和Bank1。同属于一个Bank Group的两个Bank支持一个读、另一个写但不支持同时读或同时写。L1 Buffer的内存结构如图1所示地址编码格式如下L1_ADDR[18:0] {BANK[0:0], BANK_DEPTH[9:0], BG[2:0], BANK_WIDTH[4:0]} // bit位顺序为从高位到低位共19位 // BANK表示地址所在Bank的编号占用1位bit位取值范围为[0, 1] // BANK_DEPTH表示地址在Bank中的行数占用10位bit位取值范围为[0, 1023] // BG表示地址所在Bank Group的编号占用3位bit位取值范围为[0, 7] // BANK_WIDTH表示地址在Bank一行上的偏移量占用5位bit位取值范围为[0, 31]图1L1 Buffer内存结构图![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/l1_memory_bank.png L1内存结构图?utm_sourcegitcode_repo_files)L0A Buffer/L0B Buffer内存结构L0A Buffer/L0B Buffer的总容量为64K字节只包含1个Bank有128行每行的宽度为512字节。不允许同时读写同一个地址允许LoadData同时写入和Mmad同时读取同一Bank的不同地址。L0A Buffer/L0B Buffer的内存结构如图2所示L0A Buffer和L0B Buffer采用相同的地址编码格式L0A_ADDR[15:0] { BANK_DEPTH[6:0], BANK_WIDTH[8:0] } // bit位顺序为从高位到低位共16位 L0B_ADDR[15:0] { BANK_DEPTH[6:0], BANK_WIDTH[8:0] } // BANK_DEPTH表示地址在Bank中的行数占用7位bit位取值范围为[0, 127] // BANK_WIDTH表示地址在Bank一行上的偏移量占用9位bit位取值范围为[0, 511]图2L0A Buffer/L0B Buffer内存结构图![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/l0al0b_memory_bank.png L0A-B内存结构图?utm_sourcegitcode_repo_files)【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考