- Ascend C异构并行程序设计:昇腾算子编程指南
- 苏统华 杜鹏 闫长江编著
- 2843字
- 2025-04-17 18:50:01
1.3.2 存储系统
AI Core 的片上存储单元和相应的数据通路构成了存储系统。众所周知,几乎所有的深度学习算法都是数据密集型的应用。对于昇腾 AI 处理器的芯片来说,合理设计的数据存储和传输结构对于系统最终的运行性能至关重要。不合理的设计往往成为性能瓶颈,从而白白浪费了片上海量的计算资源。AI Core 通过各种类型的分布式缓冲区之间的相互配合,为深度神经网络计算提供了大容量和及时的数据供应,消除了数据流传输的瓶颈,从而实现了深度学习计算中所需要的大规模、高并发数据的快速和有效的提取与传输。
1.存储单元
芯片中的计算资源要想发挥强劲算力,必要条件是保证输入数据能够及时、准确地出现在计算单元中。达·芬奇架构通过精心设计的存储单元确保了计算资源所需数据的供应,这样的存储单元相当于AI Core的后勤系统。如图1-19中虚线框包含的区域所示,AI Core的存储单元由存储控制单元(张量DMA和向量DMA)、缓冲区和寄存器(图中省略)组成。L1缓冲区(L1 Buffer)是矩阵计算模块中较大的一块数据中转区,暂存模块中需要反复使用的数据,以减少总线的数据搬运;张量DMA用于将数据从L1缓冲区搬运至L0缓冲区,其中L0A缓冲区和L0B缓冲区对应存储矩阵计算的输入,L0C缓冲区则对应存储矩阵计算的输出内容;UB是向量和标量计算输入和输出的存储位置;MBI用于和总线进行数据交互。此外,L2缓冲区(L2 Buffer)位于达·芬奇架构外,是矩阵计算模块和向量计算模块(AIV)共用的内存,未在图中展示。

图1-19 AI Core的存储单元
在AI Core的存储控制单元中,DMA用于数据搬运,一次既可以搬运一块连续的数据,也可以搬运带步长的数据。需要注意的是,用DMA搬运数据有一定的对齐要求。
DMA通过MBI不仅可以直接访问AI Core之外的更低层级的缓存,也可以通过DDR或HBM直接访问内存。DMA中还设置了存储转换单元,其目的是将输入数据转换成AI Core的各类型计算单元所兼容的数据格式。缓冲区包括用于暂存输入数据的L1缓冲区、矩阵计算单元的张量缓冲区,以及处于中心的用于暂存各种形式中间数据的UB。AI Core的各类寄存器资源主要被标量计算单元使用。
在AI Core中,通过精密的电路设计和板块组织架构的调节,在不产生板块冲突的前提下,无论是缓冲区还是寄存器都可以实现数据的单时钟周期访问。程序员可以通过底层软件显式地控制所有的缓冲区和寄存器的读写。有经验的程序员也可以通过巧妙的编程方式来防止存储单元中出现存储体冲突(bank conflict),以免影响流水线的进程。所谓存储体冲突,即当两个或更多的线程在同一时钟周期内尝试访问同一个存储体中的不同地址时,就会发生存储体冲突。由于每个存储体在一个时钟周期内只能服务一个线程,因此这些访问会被序列化,从而导致延迟。对于类似矩阵这样规律性极强的计算模式,高度优化的程序可以实现全程无阻塞的流水线执行。
MBI作为AI Core的“大门”,实现与系统总线交互,并与外部相连。AI Core通过MBI从外部L2缓冲区、DDR或HBM中读取或写回数据。MBI在这个过程中可以将AI Core内部发出的读写请求转换为符合总线要求的外部读写请求,并完成协议的交互和转换等工作。
输入数据从MBI读入后就会由存储转换单元进行处理。存储转换单元作为AI Core内部数据通路的传输控制器,负责AI Core内部数据在不同缓冲区之间的读写管理,以及完成一系列的格式转换操作,如补零、Im2Col、转置、解压缩等。存储转换单元还可以控制AI Core内部的L1缓冲区,从而实现局部数据的核内缓存。
在深度神经网络计算中,由于输入图像的特征数据通道众多且数据量庞大,往往会采用L1缓冲区来暂时保留需要频繁使用的数据,以达到节省功耗、提高性能的效果。当L1缓冲区被用来暂存使用率较高的数据时,就不需要每次通过MBI到AI Core的外部读取,从而在减少总线上数据访问频次的同时,降低了总线上产生拥堵的风险。在神经网络计算中,往往可以把每层计算的中间结果放在L1缓冲区中,从而在进入下一层计算时方便地获取数据。由于通过总线读取数据的带宽低、延迟大,如果充分利用L1缓冲区,就可以大大提升计算效率。另外,当存储转换单元进行数据的格式转换操作时,会产生巨大的带宽需求。达·芬奇架构要求源数据必须被存放于L1缓冲区中,这样才能够进行格式转换。在矩阵计算模块中,L1 缓冲区常用作输入缓冲区,它有利于将大量用于矩阵计算的数据一次性地搬运到 AI Core内部,同时利用固化的硬件极大地提升了数据格式转换的速度,避免了矩阵计算单元的阻塞,也消除了数据转换过程缓慢带来的性能瓶颈。
正如前文介绍AI Core中的计算单元时提到的那样,矩阵计算单元中的张量缓冲区就是专门为矩阵计算提供服务的。其中矩阵乘法的左矩阵数据、右矩阵数据,以及矩阵计算的最终结果或过往计算的中间结果都存放在张量缓冲区中。
AI Core 采用了片上张量缓冲区设计,从而为各类型的计算带来了更高的速率和更大的带宽。存储系统为计算单元提供源源不断的数据,高效适配计算单元的强大算力,从而综合提升了AI Core的整体计算性能。与谷歌张量处理器(Tensor Processing Unit,TPU)设计中的UB设计理念相类似,AI Core采用了大容量的片上缓冲区设计理念,通过增大片上缓存的数据量来减少数据从片外存储系统搬运到AI Core中的频次,从而可以降低数据搬运过程中的功耗,有效控制了计算的整体能耗。
达·芬奇架构通过存储转换单元中内置的定制电路,在进行数据传输的同时,就可以实现诸如Im2Col或其他类型的格式转换操作,不仅降低了格式转换过程中的消耗,也减小了数据转换的指令开销。这种能将数据在传输的同时进行转换的指令被称为随路指令。硬件单元对随路指令的支持为程序设计提供了便捷性。
2.数据通路
数据通路指的是AI Core在完成一个计算任务时,数据在AI Core中的流通路径。前文已经以矩阵乘法为例简单介绍了数据的搬运路径。数据通路包含HBM和L2缓冲区,这些都属于AI Core的核外存储系统。
可以通过LOAD指令将核外存储系统中的数据搬运到矩阵计算单元中的张量缓冲区中进行计算,输出的结果也被保存在张量缓冲区中。除了直接将数据通过LOAD指令搬运到张量缓冲区,也可以通过LOAD指令将其先行搬运到L2缓冲区,再通过其他指令将其搬运到张量缓冲区中。这样做的好处是利用大容量的缓冲区来暂存需要被矩阵计算单元反复使用的数据。
在计算过程中,输入神经网络的数据往往种类繁多且数量巨大,如多个通道、多个卷积核的权重和偏置值,以及多个通道的特征值等。而AI Core中对应这些数据的存储单元相对独立且固定,并通过并行输入的方式来提高数据输入的效率,以满足海量计算的需求。AI Core中设计多个输入数据通路的好处是对输入数据流的限制少,能够为计算源源不断地输送源数据。与此相反,深度神经网络计算将多种输入数据处理完成后,往往只生成输出特征矩阵,数据种类相对单一。根据深度神经网络输出数据的特点,AI Core设计了单输出的数据通路,一方面节约了芯片硬件资源;另一方面可以统一管理输出数据,将数据输出的控制硬件降到最低。综上所述,达·芬奇架构中的各个存储单元之间的数据通路及多进单出的核内外数据交换机制,是研究人员在深入研究了以卷积神经网络为代表的主流深度学习算法后开发出来的,目的是在保障数据良好的流动性前提下,减少芯片成本、提升计算性能、降低系统功耗。