CN116171431A - 用于加速器中多个并行数据路径通道的存储体式存储器架构 - Google Patents
用于加速器中多个并行数据路径通道的存储体式存储器架构 Download PDFInfo
- Publication number
- CN116171431A CN116171431A CN202180055367.1A CN202180055367A CN116171431A CN 116171431 A CN116171431 A CN 116171431A CN 202180055367 A CN202180055367 A CN 202180055367A CN 116171431 A CN116171431 A CN 116171431A
- Authority
- CN
- China
- Prior art keywords
- memory
- data
- vector
- vectors
- accelerator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/4076—Timing circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1006—Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1051—Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
- G11C7/1057—Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1072—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1048—Scalability
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Memory System (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
本公开涉及用于将存储体式存储器结构与加速器一起使用的设备和方法。这些设备和方法可以对加速器的数据路径和存储器中的数据流进行分段和隔离。这些设备和方法可以为每个数据通道提供其自己的寄存器存储器库。这些设备和方法可以使用存储器地址解码器来将局部变量放置在适当的存储器库中。
Description
背景技术
扩展深度神经网络(DNN)加速器时,会出现常见的存储器带宽问题。缩放加速器的计算吞吐量的一种方法是通过缩放独立数据路径的数目来增加数据并行度,每个独立数据路径对数据的不同部分(例如,矩阵中的不同行或不同的输入向量)并行操作。然而,如果这些数据路径中的每一个都必须从单个逻辑统一的存储器结构访问数据,那么支持对该结构的越来越多的独立访问的复杂度变得过高地昂贵。
发明内容
提供本发明内容是为了以简化形式介绍一组概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用作确定所要求保护的主题的范围的辅助。
一个示例实现涉及一种与加速器一起使用的存储体式存储器(banked memory)结构。该存储体式存储器结构可以包括多个本地存储器,其中多个本地存储器包括存储器解码器。该存储体式存储器结构可以包括多个计算单元;以及多个通道,其中多个通道中的每个通道与多个本地存储器中的单独的本地存储器和多个计算单元中的一个计算单元配对;并且其中存储器解码器接收用于加速器的数据,其中数据包括多个向量,并且多个向量中的每个向量由存储器解码器分配给多个通道中的一个通道,用于由与通道相关联的计算单元进行处理。
另一示例实现涉及一种由加速器的存储器解码器执行的方法。该方法可以包括:接收与用于加速器一起使用的数据。该方法可以包括:标识针对数据的多个向量。该方法可以包括:标识加速器中的多个本地存储器。该方法可以包括:针对多个向量中的每个向量:选择多个本地存储器中的单独的本地存储器以用于与向量一起使用;将单独的本地存储器的地址映射到向量;以及使用映射以将针对向量的数据发送到与单独的本地存储器相关联的数据通道。
另一示例实现涉及一种设备。该设备可以包括:一个或多个处理器;与一个或多个处理器进行电子通信的存储器;以及存储在存储器中的指令,指令可由一个或多个处理器执行以:接收与加速器一起使用的数据;标识数据的多个向量;标识加速器中的多个本地存储器;针对多个向量中的每个向量:选择多个本地存储器中的单独的本地存储器以与向量一起使用;将单独的本地存储器的地址映射到向量;以及使用映射将向量的数据发送到与单独的本地存储器相关联的数据通道。
附图说明
为了描述可以获得本公开的上述特征和其他特征的方式,将通过参考附图中所示的其具体实现来进行更具体的描述。为了更好地理解,在各个附图中用相同的附图标记来表示相同的元件。虽然一些附图可能是概念的示意性表示或夸张表示,但至少一些附图可能是按比例绘制的。了解到附图描绘了一些示例实现,将通过使用附图来更具体和详细地描述和解释这些实现,其中:
图1示出了针对加速器的现有架构。
图2示出了用于与加速器一起使用的现有多端口向量寄存器文件(vectorregister file,VRF)。
图3示出了用于与加速器一起使用的现有多端口VRF的硬件开销。
图4示出了根据本公开的一些实现的针对加速器的示例存储体式存储器架构。
图5示出了根据本公开的一些实现的针对加速器的示例架构。
图6示出了根据本公开的一些实现的用于与加速器一起使用的示例多存储体VRF。
图7示出了根据本公开的一些实现的用于与加速器一起使用的示例多存储体VRF。
图8A-图8D示出了根据本公开的一些实现的示例地址生成和向量到存储器的映射的视觉表示。
图9示出了根据本公开的一些实现的用于将参考地址映射到独立存储器库(memory bank)的示例方法。
图10示出了根据一些实现的用于与加速器一起使用的包括经由数据中心网络互连的节点的***的框图。
图11示出了根据一些实现的用于与加速器一起使用的包括分布式节点的***的框图。
图12示出了根据一些实现的用于与加速器一起使用的硬件节点的框图。
具体实施方式
本公开总体上涉及加速器。扩展深度神经网络(DNN)加速器时,会出现常见的存储器带宽问题。缩放加速器的计算吞吐量的一种方法是通过缩放独立数据路径(也被称为通道)的数目来增加数据并行度,每个独立数据路径对数据的不同部分(例如,矩阵中的不同行或不同的输入向量)并行操作。然而,如果这些数据路径中的每一个都必须从单个逻辑统一的存储器结构访问数据,那么支持对该结构的越来越多的独立访问的复杂度变得过高地昂贵。
图1示出了用于DNN加速器的现有架构100,其包括连接到单个多端口向量寄存器文件104(例如,MVM_IVRF)的矩阵向量乘法器102数据路径(例如,MVM)。当MVM数据路径增长到具有更高的峰值吞吐量时,例如在现场可编程门阵列(FPGA)设备中,架构100达到存储器带宽限制。那么,如果将数据路径添加到现有加速器以增加吞吐量,则增加数据路径所需的资源量可能会因添加数据路径而平方地增长。因此,现有的DNN加速器在尝试扩展现有架构的硬件时存在可扩展性问题。
图2示出了用于与DNN加速器一起使用的现有多端口VRF 200。示出了用于与多端口VRF 200一起使用的三个通道202、204、206。每个通道202、204、206具有单独的数据路径。此外,每个通道202、204、206具有单独的向量208、210、212,其中数据进入每个通道202、204、206。例如,数据可能需要被写入存储器214或从存储器214被读取。因此,通道202、204、206中的每一个通道可以从来自该存储器214的数据而被填充。多端口VRF 200可以允许通道202、204、206中的每一个通道访问所有存储器214空间。随着通道数目的增加,支持对存储空间的独立访问变得更加复杂。
图3示出了用于与DNN加速器一起使用的现有多端口VRF 300的硬件开销。多端口VRF 300可以具有复用(multiplexing)302和/或解复用(demultiplexing)306开销,如图所示。例如,多端口VRF 300可以平方地增长硬件资源使用,因为任何数据通道都需要访问一个共享寄存器文件中的任何字(word)。
因此,图1-图3所示的先前解决方案在面积和功率方面通常非常昂贵,并且限制了解决方案的可扩展性。
本文描述的设备和方法可以通过对数据路径和存储器中的数据流进行分段和隔离来增加加速器的有效吞吐量。本文描述的设备和方法为每个数据通道提供它自己的寄存器存储器库,从而确保新添加的数据通道不仅增加数据路径吞吐量,而且还增加存储器带宽,以防止存储器带宽成为加速器性能的瓶颈。本公开包括若干实际应用,其提供与改进加速器中的存储器相关联的益处和/或解决问题。
本文描述的设备和方法可以使用存储器地址解码器和分布式本地存储器结构,其生成独立的可并发执行的存储器访问模式和数据流。因此,该设备和方法在硬件实现中可以具有低成本,并且还可以保持简单的单线程编程模型。
以前的多端口VRF通常平方地增长的硬件资源使用,因为任何数据通道都需要访问一个共享寄存器文件中的任何字。本文描述的设备和方法将一个存储空间划分为多个空间。例如,如果有N个通道,其中N是整数,则将存储空间除以N,以便将一个寄存器存储器分成多个独立的存储器库,并去除额外的硬件开销,例如复用器、解复用器和/或多端口块RAM组件。
存储体式存储器架构中的一个重大挑战是如何将引用地址映射到独立的存储器库,使得来自每个数据通道的引用始终映射到本地存储器。本文描述的设备和方法使用高效且直接的解码方案,该方案假定数据通道在独立的循环迭代上操作,并自动将迭代局部变量放置在适当的存储器库中。
本文描述的设备和方法的一个技术优势是结构和/或硬件实现的低成本以及由此产生的更高的性能。这些设备和方法确保要并行化的数据流始终被限制在数据流自己的存储空间中而不交叉,因此,这些设备可以被实现为直接存储体式存储器。此外,一个存储体的任何控制逻辑可以在所有存储体之间共享,因为来自和/或去往第一存储体的数据流可以代表整个数据流。相反,许多现有的DNN加速器将一个连续的存储空间块分配给本地存储器,而没有在访问存储器时在并行数据流中充分利用优势,因此,现有的DNN加速器具有更昂贵的硬件来复用数据流、解复用数据流、复杂的存储器层级结构和控制逻辑、和/或复杂的多线程编程模型。
本文描述的设备和方法的另一技术优势是可扩展性。许多现有加速器具有一个物理存储器地址,其复杂的存储器层级结构(例如,高速缓存),这使得添加并行数据路径的成本比线性复杂度更昂贵。相比之下,本文描述的设备和方法在执行操作时在分布式存储器内维护本地化的数据流入和/或流出。因此,利用添加并行数据路径,设备的架构可以线性扩展。
现在参考图4,针对加速器的示例存储器架构400包括多个数据通道402、404、406,其中每个数据通道具有不同的或单独的寄存器存储器库408、410、412、430、432、434。在一些实现中,架构400与DNN加速器一起使用。存储器架构400可以使用具有并行数据流的存储体式存储器结构。每个数据通道402、404、406(例如,MVM和多功能单元(MFU))与它自己的本地寄存器存储器408、410、412(例如,VRF)配对,并且数据独立地流经每个VRF 408、410、412、430、432、434,MVM 418、420、422,MFU 424、426、428和交换机(switch)414,而不交叉进入不同的数据通道402、404、406。数据可以被推送到网络416或从网络416接收,并且可以穿过不同的数据路径,并且可以并行地执行操作,而不需要将数据交叉到不同的数据路径中。因此,数据可以保留在每个单独的数据路径中,而不会在不同的数据路径之间交叉。
在一些实现中,暂存器419用于将***中的寄存器存储器中的一个寄存器存储器保持为多端口,以允许数据跨不同通道移动。例如,第一VRF 408可以被设置为多端口VRF,并且可以用作数据洗牌器(shuffler)。在其他实现中,在交换机414中包括解串行器/串行器417以允许数据跨不同通道移动。多端口VRF和/或串行器417可用于在开始时将输入数据分发到不同通道,并在结束时收集输出数据。
应注意的是,跨不同通道的数据移动仅发生在组成一个深度学习层的整个多个链操作的开始和结束,例如,完全连接层或层归一化层,因此,成本被摊销在多个链操作上并且几乎是隐藏的。
通过为每个通道提供单独的或不同的寄存器存储器库,新增加数据通道不仅增加了数据路径吞吐量,而且还增加了存储器带宽,以防止存储器带宽成为性能的瓶颈。
现在参考图5,针对加速器的示例架构500可以包括张量存储器管理器(TMM)514、多个存储体VRF 502、504、506、允许数据跨越通道的一个多端口VRE 508、以及单端口VRF510、512。例如,诸如LayerNorm权重/偏置向量的某些常量需要被复制到所有存储器库,并且需要使用单端口VRF 510、512中的一个或多个在所有通道上来广播常量。在一些实现中,架构500与DNN加速器一起使用。
架构500的存储体式存储器结构可以连接到并行计算单元(例如,MVM_IVRF 508、MFU_IVRF 502和/或SPU 516),而不需要计算单元访问除了被本地连接到该计算单元的存储器库之外的任何其他存储器库中的数据的任何机制(例如,没有交叉开关(crossbar)、旋转单元或其他存储体间(inter-bank)互连网络)。
在一些实现中,存储器解码器包括在存储体VRF中,并且被配置为解码针对向量的存储地址并将向量映射到不同的存储器库中。存储器解码器可以选择向量并且可以选择要将向量放置到其中的通道。存储器解码器可以使用存储器地址策略或寻址方案,其使得并行计算单元(例如,MVM_IVRF 508、MFU_IVRF 502和/或SPU 516)能够紧密合作,从而以细粒度(例如,单个循环迭代)并行化计算。例如,存储器解码器可以使用单线程程序代码作为用于解码针对向量的存储器地址并将向量映射到不同存储器库中的存储器地址策略。
可以将串行器放置在交换机中以允许跨不同通道的移动数据。在一些实现中,使用暂存器来将***中的寄存器存储器中的寄存器存储器保持为多端口,以允许数据跨不同的通道移动。串行器和/或多端口VRF可用于在开始时将输入数据分发到不同的通道,并且在结束时收集输出数据。跨不同通道的数据移动可以在组成一个深度学习层的整个多个链操作的开始和/或结束时发生,该深度学习层例如是完全连接层或层归一化层。因此,跨不同通道移动的数据的成本可以在多个链操作上摊销,并且几乎是隐藏的。例如,在加速基于转换器(transformer)的模型(例如来自转换器的双向编码器表示法(BERT))时,成本可以忽略不计。
作为用于与架构500一起使用的简化示例用例,考虑以下表达式的求值:
D=A+B x C
其中所有值(A、B、C、D)都是6x4矩阵,并且所有运算都是逐元素执行的。此外,假设每个数据通道在元素的可变长度向量上操作。此外,每个矩阵被视为四元素向量的组,并且架构500可以使多达6个通道能够对这些向量进行并发操作(每通道一行)。如果所有数据都存储在逻辑统一的存储器中,则使所有6个通道能够从该存储器中并发读取数据将会有相当大的开销和复杂度。然而,使用具有存储体式存储器的架构500,每个通道可以独立地在每个矩阵的它自己的片上操作。通过将“贴片(tile)”设置为4,并且将“迭代”设置为6,架构500可以跨可用通道展开6个迭代(例如,如果可用通道小于6,则重用(reusing)通道),并且一次将元素4映射到每个通道。因此,每个通道需要访问的(多个)行将在其本地存储器库中被找到。在本示例中,每个通道操作并存储在每个存储器位置的本机数据类型是值(通常为128)的向量,因此将“贴片”设置为4表示512个值的向量。
因此,架构500可以提供更好的性能,并且可以通过添加并行数据路径来线性扩展。
现在参考图6,用于与架构400或架构500一起使用的示例多存储体VRF 600可以包括三个通道602、604、606,其中每个通道602、604、606被绑定到单独的或不同的本地存储器608、610、612。每个通道602、604、606具有单独的向量614、616、618,其中数据进入每个通道602、604、606。例如,数据可能需要被写入存储器608、610、612或从存储器608、610、612被读取。多存储体VRF 600可以将一个寄存器存储器分割成多个独立的存储器库608、610、612,并且可以去除额外的硬件开销,例如但不限于复用器/解复用器或多端口块RAM组件。因此,多存储体VRF 600可能不需要为用于复用和/或解复用的附加硬件付费。
存储器解码器可以包括在多存储体VRF 600中,并且被配置为对针对向量614、616、618的存储器地址进行解码,并将向量614、616、618映射到不同的存储器库608、610、612中。存储器解码器可以选择向量614、616、618,并且可以选择要放置向量614、616、618的通道602、604、606。多存储体VRF 600不允许数据跨越不同的存储器库608、610、612。在一个实现中,存储器解码器是跨越存储器库608、610、612的共享读/写控制信号(Wf_fsm 620、rd_fsm 622)。存储器解码器使用直接解码方案,其使用共享读/写控制信号的来执行存储器地址解码,而不会给多存储体VRF 600增加额外的复杂度。因此,多存储体VRF消除了复用器/解复用器状态,从而节省了资源。
现在参考图7,用于与架构400或架构500一起使用的示例多存储体VRF 700可以将一个存储空间划分为多个空间。例如,如果存在N个通道,其中N是整数,则多存储体700的存储空间除以N。在图示的示例中,N可以是4,并且多存储体VRF 700可以将存储空间分割成四个不同的存储器库702、704、706、708。每个存储器库702、704、706、708具有关联的通道714、716、718、720,其接收针对每个存储器库702、704、706、708的数据。
在一些实现中,多存储体VRF 700包括多存储体VRF 700内部的解串行器710和串行器712。解串行器710可以跨存储器库702、704、706、708分发针对多存储体VRF 700的传入数据流。例如,解串行器710可以将输入数据分发到存储器库702、704、706、708的不同通道714、716、718、720。串行器712可以访问所有不同的存储器库702、704、706、708,并且可以在结束时将来自不同存储器库702、704、706、708的输出数据收集到单个数据流中。通过将解串行器710和串行器712嵌入多存储体VRF 700内,数据可以跨数据通道714、716、718、720移动,并且多存储体VRF 700消除了跨越存储器库的约束。因此,多存储体VRF 700可以用于可能需要跨存储器库通信的数据值。
现在参考图8A,示出了针对一维存储器访问模式的示例地址生成和向量到存储器的映射的视觉表示。例如,一维存储器访问模式可以与多端口VRF 508一起使用。当使用多端口VRF时,从程序员的观点来看,一个存储器块是可用的。
程序代码800可以设置迭代次数,并且可以表示向量的数目和向量值。贴片的数目指示向量的大小。迭代次数指示来自存储器和数据路径的向量的数目。
程序代码802示出了示例循环,该循环将数据从网络流入加速器,将数据推入处理中,使得将数据写入存储器或从存储器读取,并将数据带回网络。存储器映射804示出了使用程序代码802中所示的循环在单个平面存储器空间中的一维存储器访问模式。
一个示例用例可以包括具有向量大小为256的16个向量。程序代码802可以将迭代设置为16,在该示例中为向量的数目。向量的贴片大小可以被设置成大小为128。在该示例中,由于向量大小是256并且贴片大小被设置为128,所以向量贴片大小可以是2。贴片索引可以指示向量号(vector number)和贴片大小。
在所示示例中,存储器映射804可以包括用于第一向量的贴片索引V1(0:127)和V1(128:255),以及用于第二向量的贴片索引V2(0:127)和V2(128:255)。虽然在该示例中仅示出了两个向量,但程序代码802的循环可以遍历这16个向量,并且可以映射所有16个向量以用于存储器访问。因此,存储器映射804可以继续用针对剩余向量的贴片索引来更新。
图8B是针对二维存储器访问模式的示例地址生成和向量到存储器的映射的视觉表示。二维存储器访问模式可由具有存储体式存储器的架构400或架构500使用。程序代码806可以使用直接单线程编程模型来将向量映射到可用存储器库的不同存储器地址。贴片的数目指示向量的大小。迭代次数指示来自存储器和数据路径的向量的数目。
程序代码806示出了示例循环,其将数据从网络流式传输到加速器,将数据推入处理中,使得数据被写入一个或多个存储器库或从一个或多个存储器库读取,并将数据带回网络。存储器映射808示出了使用程序代码806中所示的循环的存储体式存储器架构的二维存储器访问模式。每个向量的贴片索引可以指示向量号和贴片大小。此外,贴片索引可用于将向量映射到不同存储器库中的本地存储器。
用于与DNN加速器的架构400或架构500一起使用的存储器解码器可以使用该循环以用于解码针对向量816、818、820、822、824、826的存储器地址,并将向量816、818、820、822、824、826映射到不同的存储器库810、812、814中。存储器解码器可以选择向量并且可以选择要将向量放置到其中的通道。针对每个向量的贴片索引可以将向量贴片映射到针对存储器库的所选通道。存储器解码器可以将数据流循环的每个第i次迭代保持在一个指定的存储器库810、812、814中,从而允许并行链运行通过多个存储器库810、812、814。因此,每个向量贴片可以保持在相同的通道内,并且可能不会发生通道之间的数据交叉。
程序代码806可以提供高效且直接的解码方案,该方案假定数据通道在独立的循环迭代上操作,并且存储器解码器可以使用程序代码806来自动将迭代局部变量放置在适当的存储器库中。可以使用单线程程序模型来编写程序代码806,其中程序员提供附加信息以标识并行循环。首先,迭代计数器被设置为要处理的迭代的总次数,并且贴片被设置为要处理的向量的大小(以硬件本机向量大小的倍数)。然后,以贴片本机向量条目为单位跨存储体条带化针对给定向量阵列的存储器位置。当迭代被分布在跨不同的数据通道上时(示为“迭代”x轴),第一存储体存储器上的读/写地址可由所有存储体使用(示为“贴片”y轴)。
一个示例用例可以包括具有向量大小为256的16个向量。程序代码806可以将迭代设置为16,在该示例中为向量的数目。向量的贴片大小可以被设置成大小为128。在该示例中,由于向量大小是256并且贴片大小被设置为128,所以向量贴片大小可以是2。贴片索引可以指示向量号和贴片大小。
存储器解码器可以为存储器库810选择第一向量816,并且可以将针对第一向量816的两个贴片放置到存储器库810中。存储器映射808示出了针对被映射到存储器库810的第一向量816的贴片索引V1(0:127)和V1(128:255)。
存储器解码器可以为存储器库812选择第二向量818,并且可以将针对第二向量818的两个贴片放置到存储器库812中。存储器映射808示出了针对被映射到存储器库812的第二向量818的贴片索引V2(0:127)和V2(128:255)。
存储器解码器可以为存储器库814选择第三向量820,并且可以将针对第三向量820的两个贴片放置到存储器库814中。存储器映射808示出了针对被映射到存储器库814的第三向量820的贴片索引V3(0:127)和V3(128:255)。
存储器解码器可以为存储器库810选择第四向量822,并且可以将针对第四向量822的两个贴片放置到存储器库810中。由于存储器库的数目少于向量的数目,因此存储器解码器可以为剩余的向量重用可用的存储器库。存储器映射808示出了针对被映射到存储器库810的第四向量822的贴片索引V4(0:127)和V4(128:255)。
存储器解码器可以为存储器库812选择第五向量824,并且可以将第五向量824的两个贴片放置到存储器库812中。存储器映射808示出了映射到存储器库812的第五向量824的贴片索引V5(0:127)和V5(128:255)。
存储器解码器可以为存储器库814选择第六向量826,并且可以将针对第六向量826的两个贴片放置到存储器库814中。存储器映射808示出了针对被映射到存储器库814的第六向量826的贴片索引V6(0:127)和V6(128:255)。
虽然仅示出了六个向量,但对于每次循环迭代,存储器解码器可以继续将向量放置到不同的存储器库810、812、814中,直到已将总数目的向量放置到存储器库810、812、814中。对于该示例,存储器解码器可以继续顺序地放置针对每次循环迭代的向量,直到所有16个向量都被放置在存储器库810、812、814中。
在一些实现中,存储器解码器顺序地将向量分配给不同的存储器库,以确保指令在DNN加速器中顺序执行。此外,存储器解码器可以确保基址从第一存储器库开始索引。因此,当将向量分配给不同的存储器库时,存储器解码器可以从第一存储器库开始,并且顺序地移动到下一存储器库。公式(1)中示出了存储器解码器可以使用的一个示例公式
(1)range = [base_adr, base_adr + (# of iter) / channels * tileCols]其中,#of iter是迭代的次数,tileCols是向量的大小,channels等于可用通道的数目,并且基址是加速器中第一存储器库的存储器地址。
图8C示出了用于与存储器映射一起使用的两个代码示例,其执行相同操作并给出相同结果。程序代码828可以不包括多次迭代。例如,在程序代码828中,从SetIterationsCols()指令设置N次迭代,其中N是整数。
程序代码830可以包括多次迭代,并且可以由存储器解码器用来与架构400或架构500一起使用。这样,存储器解码器可以使用来自程序代码830的迭代次数的信息来最大化并行度。在一些实现中,存储器解码器使用程序代码830自动确定N个数据流,其中N是大于1的整数,并且并行运行N个数据流。存储器解码器将数据流划分为通道组的数目,其等于架构400或架构500中的可用存储器库的数目,并且将数据流隔离在多个存储器库中以并发地运行数据流。
逻辑程序员的观点是,当程序中有多个循环迭代经历相同的操作集时,数据向量及其数据流会自动跨存储体分布。程序员可以按第一存储体中的存储器地址将它们作为组来索引。
现在参考图8D,示出了针对三个连续链与存储器访问模式的示例地址生成和向量的映射的视觉表示。存储器访问模式可以由具有存储体式存储器的架构400或架构500使用。例如,架构400或架构500可以具有三个通道和三个可用存储器库。
不同程序代码832、834、836中所示的连续链可以具有相同数目的代码行,但具有不同的迭代数目和不同的贴片大小。存储器映射838、840、842示出了不同链的不同存储器访问模式。例如,存储器映射838示出了针对来自程序代码832的第一链的向量的贴片索引,存储器映射840示出了针对来自程序代码834的第二链的向量的贴片索引,并且存储器映射842示出了针对来自程序代码836的第三链的向量的贴片索引。
当划分数据时,存储器解码器可以选择所有可用存储器库或可用存储器库的子集以供使用。例如,用于第一链和第二链的向量的数目可以是可用存储器库的数目的倍数,因此,当划分用于第一链和第二链的向量时,存储器解码器可以使用所有可用存储器库。
另一示例是第三链的向量的数目不是可用存储器库的倍数的情况。例如,在第三链中可以有三个可用存储器库和四个向量,因此,在将前三个向量提供给三个可用存储器库之后,可以剩余第四向量。存储器解码器可以将可用存储器库的子集用于剩余的第四向量。例如,存储器解码器可以将第四向量放置在第一存储器库中。存储器解码器可以将第四向量的向量贴片(例如,三个向量贴片)一起保持在第一存储器库中,以防止来自第四向量的数据交叉到不同的通道或存储器库中。因此,数据可以保留在向量在其中操作的存储器库内。
现在参考图9,用于将参考地址映射到独立存储器库的方法900可以由加速器的存储器解码器执行。在一个实现中,存储器解码器是跨越存储器库608、610、612的共享读/写控制信号(Wf_fsm 620、rd_fsm 622)。存储器解码器可以执行方法900的一个或多个动作。下面可以参考图4-图7的架构来讨论方法900的动作。
在902,方法900包括接收用于与加速器一起使用的数据。可以从网络416推送或接收数据。存储器解码器可以从网络416接收用于加速器的数据流,并且可以将数据推入处理中,使得将数据写入存储器或从存储器读取。在一个实现中,加速器是深度神经网络(DNN)加速器。
在904,方法900包括标识针对数据的多个向量618、616、614。存储器解码器可以使用程序代码来标识针对数据的多个向量618、616、614。例如,程序代码可以表示向量的数目和向量值,并且可以设置迭代次数。迭代次数指示来自存储器和数据路径的向量的数目。此外,贴片的数目指示向量的大小。在一个实现中,程序代码是单线程程序代码。
在906,方法900包括标识加速器中的多个本地存储器608、610、612。例如,存储器解码器可以标识加速器中的多个本地存储器608、610、612。多个本地存储器可以包括具有多个本地存储器的存储体式存储器架构。本地存储器可以包括向量寄存器文件(VRF)。此外,可以针对独立的可并发执行的存储器访问模式来访问多个本地存储器中的每个单独的或不同的本地存储器。
在908,方法900包括选择单独的本地存储器以用于与向量一起使用。存储器解码器可以选择单独的本地存储器以用于与向量一起使用。例如,存储器解码器可以按多个本地存储器的顺序选择单独的本地存储器,以确保指令在加速器中顺序执行。当选择单独的本地存储器以与向量一起使用时,存储器解码器可以确保基址从第一单独的本地存储器开始索引,并且顺序地移动到下一单独的本地存储器。当对数据进行划分时,存储器解码器可以选择所有可用本地存储器或本地存储器的子集来使用。
在910,方法900包括将单独的本地存储器的地址映射到向量。存储器解码器可以将单独的本地存储器的地址映射到向量。例如,存储器解码器可以基于针对向量的向量大小来标识针对向量的贴片数目,并且可以为向量的每个贴片提供贴片索引,以用于将分离的本地存储器的地址映射到向量。针对每个向量的贴片索引可以将向量贴片映射到针对存储器库的所选通道。
在912,方法900可以包括使用映射将针对向量的数据发送到与单独的本地存储器相关联的数据通道602、604、606。例如,存储器解码器可以使用映射来划分数据,并且将针对向量的数据发送到与单独的本地存储器相关联的数据通道。存储器解码器可以将数据流循环的每个第i次迭代保持在一个指定的存储器库中,并且因此允许并行链运行通过多个存储器库。向量的每个贴片可以保留在与单独的本地存储器相关联的数据通道中。因此,每个向量贴片可以保留在相同的通道内,并且可能不会发生通道之间的数据交叉。存储器解码器可以使用程序代码来自动地将迭代局部变量放置在适当的存储器库中。
每个单独的或不同的本地存储器可以与计算单元相关联,该计算单元对单独的或不同的本地存储器的数据执行处理。计算单元可能不能访问除本地连接到计算单元的存储器库之外的任何其他存储器库中的数据。因此,单独的或不同的本地存储器中的每一个的多个计算单元并行地执行数据的处理,并且共同工作,从而以细粒度(例如,单独的循环迭代)并行化计算。
方法900可以返回到908并重复,直到所有向量都被映射到单独的本地存储器。因此,方法900可用于通过在方法900的每次迭代时对数据进行划分来提供数据的细粒度并行化。
图10是根据一个示例的包括经由数据中心网络1010互连的节点的***1000的框图。例如,如图10所示,多个节点1002、1004和1006可以经由数据中心网络耦合。这样的节点可以被实例化并且用于并行化神经网络的多层,例如长短期记忆(LSTM)网络。在一个示例中,每个节点被实现为服务器,并且还可以包括至少一个硬件节点(例如,FPGA)。因此,节点1002可以包括FPGA 1022,节点1004可以包括FPGA 1024,并且节点1006可以包括FPGA1026。这些FPGA可以经由基于光传输层协议的***互连。在一个示例中,FPGA 1022的第一实例经由传输链路1032与FPGA 1024的第一实例耦合,并且FPGA 1022的第一实例还可以经由传输链路1034与FPGA 1024的第二实例耦合。FPGA 1024的第一实例可以经由传输链路1036与FPGA 1026的第一实例耦合,并且FPGA 1024的第一实例还可以经由传输链路1040与FPGA 1026的第一实例耦合。类似地,FPGA 1024的第二实例可以经由传输链路1042与FPGA1026的第一实例耦合,并且FPGA 1024的第二实例还可以经由传输链路1038与FPGA 1026的第二实例耦合。光传输层协议可以向FPGA提供经由数据中心网络1010彼此发送或接收分组或其它此类数据的能力。FPGA也可以在其他配置中互连。例如,FPGA 1022的若干实例可以经由多条传输链路1052耦合到FPGA 1024的若干实例。类似地,FPGA 1024的若干实例可以经由传输链路1054耦合到FPGA 1026的若干实例。尽管图10示出了一定数目和排列的节点,包括FPGA,但可能有更多或更少数目的以不同方式排列的节点。
图11是根据一个示例的包括分布式节点的***1100的框图。在本示例中,多个节点被实现为数据中心中的服务器机架。每台服务器都可以耦合到架顶式(TOR)交换机。其他机架虽然未显示,但可能具有类似的配置。每个服务器可以包括至少一个节点或多个节点。每个节点可以包括服务器(例如,服务器1104、服务器1106或服务器1108),并且每个服务器可以耦合到TOR交换机(例如,TOR交换机1110)。服务器1104可以包括主机组件,其包括中央处理单元(CPU),诸如CPU 1114和CPU 1116,其可以经由本地链路(例如,PCIe)1120耦合到硬件节点,例如,FPGA 1118。每个硬件节点还可以通过网络接口控制器1122耦合(例如,用于在数据中心的网络基础设施上通信)。图11所示的***可以允许节点对从TOR交换机或其他交换机接收到(和/或发送到它们)的消息执行处理。使用该示例***,各个节点可以直接彼此发送包括分组的消息,因此这可以允许在多个FPGA上划分甚至单个神经网络,而不会导致不可接受的时延。为了通信,节点可以使用轻量级协议,包括例如RDMA。尽管图11示出了以某种方式排列的***的一定数目的组件,但是可以有更多或更少数目的以不同方式排列的组件。
还可以通过在多个节点上拆分神经权重来在神经网络的一层内执行并行化。作为示例,可以跨多个节点划分和固定单个递归神经网络(RNN)模型(例如,包括LSTM权重矩阵)。在该示例的一个实现中,RNN模型可以分布在多个FPGA中的每一个的存储器(例如,BRAM)上。在该示例配置中,多级流水线中的每个单独的FPGA可以将LSTM权重矩阵的一部分存储在快速片上存储器(例如,BRAM)中。这可以有利地导致高吞吐量和低时延的***。在服务启动时,LSTM权重矩阵可以被分解成特定大小的矩阵(例如,N×M矩阵,其中N和M中的每一个都是等于或大于8的整数),然后被加载到FPGA的片上存储器中。运行时管理层可以实现对FPGA的分配、调度和管理。在一个示例中,每个节点可以实现为基于一个或多个FPGA的HaaS附接的LSTM聚焦向量处理器。每个节点可以被设计为将神经网络评估作为PCIe附接的FPGA或作为HaaS池的一部分来运行。
图12是根据一个示例的硬件节点1200的框图。每个硬件节点1200可以包括用于从其他节点接收消息的输入消息处理器(IMP)1210和用于处理到其他节点或组件的输出消息的输出消息处理器(OMP)1240。每个节点还可以包括控制/标量处理器(CSP)1220和神经功能单元(NFU)1230。尽管未示出,但节点接收到的消息可以存储在至少两个不同的队列中:(1)IMP到CSP辅助队列和(2)IMP到NFU数据队列。尽管未示出,但传出消息可以存储在至少两个不同的队列中:(1)CSP到IMP辅助队列和(2)NFU到OMP数据队列。在该示例中,节点可以接受包含诸如控制和标量数据的辅助信息以及有效负载数据(例如,向量、矩阵或其他张量数据结构)两者的片外消息。辅助信息可以包括对有效负载执行计算密集型操作的请求,然后以输出消息的形式返回结果。在该示例中,输入消息由轻量级输入消息处理器(IMP)1210处理,其将辅助信息发送到控制/标量处理器(CSP)1220(其可以是基于NIOS的控制处理器)并且将有效负载数据(例如,输入张量)发送到神经功能单元(NFU)1230,其可以实现为矩阵向量处理器。作为示例,CSP 1220然后可以解释该请求,并且可以基于其固件向NFU 1230发送一系列指令。在一定的处理时延之后,NFU可以产生请求的结果,该结果可以在轻量级输出消息处理器(OMP)1240中与CSP 1220产生的辅助数据组合,然后发送到芯片外。CSP固件可以向NFU 1230提供指令。作为指令集架构(ISA)的一部分,将讨论示例指令的更多细节。还可以执行CSP 1220的固件的运行时重新加载。因此,在本示例中,架构在很大程度上是事件驱动的。输入消息可以来自许多来源(包括通过网络)。IMP可以检查消息队列的头部,并且它可以将需要执行的任何指令出列并将其馈送通过***。尽管图12示出了以某种方式排列的示例节点的一定数目的组件,但是可以有更多或更少数目以不同方式排列的组件。
在一个示例中,NFU被实现为矩阵向量处理器,其被设计为扩展到大部分的FPGA资源。在本示例中,NFU的主要硬件加速目标是通过应用数千个乘法加法器,利用其矩阵向量单元(MVU)以高吞吐量和低时延执行矩阵向量乘法。NFU可以接收系数(例如,常量)矩阵,并且可以用于将这些系数与动态输入向量数据相乘。因此,不是将系数存储在对应于CPU/图形处理单元(GPU)的动态随机存取存储器(DRAM)中,而是可以在服务启动时将系数预加载到对应于NFU的片上存储器(例如,FPGA的块随机存取存储器(BRAM))中。在一个示例中,一旦加载了系数,则可能再也不会重新加载系数,除非修改正在使用的神经网络模型或重新启动服务。作为该示例的一部分,可以以分布式方式将模型划分并固定到多个节点(例如,FPGA)的片上存储器,它们以它们可以直接彼此传输消息或分组而不依赖于来自CPU资源的辅助的方式连接。
在一个示例中,MVU是完全流水线的,并且能够在O(n)时间内执行O(n.sup.2)复杂度矩阵-向量乘法,性能为每秒4000-18000亿次定点运算。虽然矩阵-向量乘法可能代表评估LSTM层所需的绝大多数定点运算,但评估也可以包含各种向量约简、超越和偏差向量的相加。NFU还可以实现流水线多功能单元(MFU)以在O(n)时间内处理这些O(n)复杂度向量函数。这些MFU可以被组织成链架构,其中MVU将数据传递给第一MFU,第一MFU将数据传递给第二MFU,依此类推。在NFU的一个示例实现中,可以使用1个MVU和5个MFU。
基于向量函数可能潜在地在向量和矩阵-向量运算花费大致相同的时间量来计算的架构中主导LSTM求值时间的观察,链架构可以允许NFU利用单个矩阵-向量乘法和若干向量函数之间的大规模流水线并行度。NFU的存储器子***也可以被配置为支持高吞吐量。作为示例,存储器子***可以支持高达1.8TB/s的矩阵值吞吐量以及支持同时加载6个向量和存储6个向量。
本文描述的技术可以以硬件、软件、固件或其任何组合来实现,除非具体描述为以特定方式来实现。被描述为模块、组件等的任何特征也可以在集成逻辑设备中一起实现,或者分开实现为离散但可互操作的逻辑设备。如果以软件实现,则这些技术可以至少部分地通过包括指令的非瞬态处理器可读存储介质来实现,指令当由至少一个处理器执行时,执行本文描述的一个或多个方法。指令可以被组织成例程、程序、对象、组件、数据结构等,其可以执行特定任务和/或实现特定数据类型,并且可以根据需要在各种实施例中组合或分布。
计算机可读介质可以是可由通用或专用计算机***访问的任何可用介质。存储计算机可执行指令的计算机可读介质是非瞬态计算机可读存储介质(设备)。承载计算机可执行指令的计算机可读介质是传输介质。因此,作为示例而非限制,本公开的实施例可以包括至少两种截然不同的计算机可读介质:非瞬态计算机可读存储介质(设备)和传输介质。
如本文所使用的,非瞬态计算机可读存储介质(设备)可包括RAM、ROM、EEPROM、CD-ROM、固态驱动器(“SSD”)(例如,基于RAM)、闪存、相变存储器(“PCM”)、其他类型的存储器、其他光盘存储、磁盘存储或其他磁存储设备、或可用于以计算机可执行指令或数据结构的形式存储期望的程序代码装置并可由通用或专用计算机访问的任何其他介质。
本文描述的方法的步骤和/或动作可以在不脱离权利要求的范围的情况下彼此互换。除非所描述的方法的正确操作需要特定顺序的步骤或动作,否则可以在不脱离权利要求范围的情况下修改特定步骤和/或动作的顺序和/或使用。
术语“确定”包括各种各样的动作,因此,“确定”可以包括计算、运算、处理、推导、调查、查找(例如,在表、数据库或另一数据结构中查找)、确认等。此外,“确定”可以包括接收(例如,接收信息)、访问(例如,访问存储器中的数据)等。此外,“确定”可以包括解析、选择、挑选、建立等。
冠词“一”、“一个”和“该”旨在表示存在前述描述中的一个或多个元素。术语“包括”、“包含”和“具有”旨在是包含性的,并且意味着可能存在除所列元素之外的其他元素。此外,应当理解,提及本公开的“一个实现”或“实现”并不是旨在被解释为排除也结合所记载特征的附加实现的存在。例如,本文关于一个实现描述的任何元素可以与本文描述的任何其他实现的任何元素组合。本文声明的数字、百分比、比率或其他值旨在包括该值,以及如本公开实现所包括的本领域普通技术人员所理解的那样,也包括与所声明的值“接近”或“近似”的其他值。因此,所声明的值应该被解释得足够宽泛,以包含至少与所声明的值足够接近的值,以执行预期的功能或实现预期的结果。所声明的值至少包括在适当的制造或生产过程中预期的变化,并且可以包括在所声明的值的5%、1%、0.1%或0.01%范围内的值。
本领域普通技术人员应当认识到,考虑到本公开,等同的构造并不脱离本公开的精神和范围,并且可以在不脱离本公开的精神和范围的情况下对本文公开的实现进行各种改变、替换和更改。包括功能上的“装置加功能”子句的等同构造旨在涵盖本文描述为执行所记载的功能的结构,包括以相同方式操作的结构等同形式和提供相同功能的等同结构。申请人的明确意向是,不对任何权利要求援引装置加功能或其他功能性权利要求,但“装置”一词与相关联的功能一起出现的权利要求除外。落入权利要求的含义和范围内的对实现的每一种添加、删除和修改都将被权利要求所包含。
工业适用性
本公开总体上涉及用于使用与加速器一起使用的存储体式存储器结构的设备和方法。示例加速器可以包括DNN加速器。存储体式存储器结构可以被连接到并行计算单元,而不需要计算单元访问除本地连接到计算单元的存储器库之外的任何其他存储器库中的数据的任何机制(例如,没有交叉开关、旋转单元或其他存储体间互连网络)。交叉开关或其他存储体间互连通常在面积和功率方面非常昂贵,并且限制了解决方案的可扩展性。因此,使用没有用于计算单元访问任何其他存储器库中的数据的任何机制的存储体式存储器结构可以随着并行数据路径的增加而线性扩展。
此外,本公开的存储体式存储器结构可以使用寻址方案,该寻址方案使得并行计算单元能够紧密合作,从而以细粒度(例如,单个循环迭代)并行化计算。当在其他设计中采用单独的、非通信的计算/存储单元时,通过以粗粒度划分计算来实现该技术,例如,给予每个单元更大的独立任务,而不是单个循环迭代。这种粗略的划分在软件级别上可能更加困难,并且可能导致负载不平衡。
本公开的设备和方法可以将严格划分的存储体式存储器与细粒度并行化相结合的一个原因是,在数据路径中有多个存储器结构,并且至少一个存储器结构是允许跨存储体通信的更传统的种类(例如,隐含地包括交叉开关的多端口存储器)。因此,需要跨存储体通信的数据值可以使用该其他存储器,并且存储体式存储器结构仅用于不需要这种通信的数据。
本文描述的设备和方法可以通过对数据路径和存储器中的数据流进行分段和隔离来增加加速器的有效吞吐量。这些设备和方法为每个数据通道提供它自己的寄存器存储器库,从而确保新添加数据通道不仅增加了其数据路径吞吐量,而且增加了其存储器带宽,从而防止存储器带宽成为性能的瓶颈。
本文描述的设备和方法使用存储器地址解码器和分布式本地存储器结构,其生成独立的可并发执行的存储器访问模式和数据流。本文描述的设备和方法不仅在其硬件实现中具有低成本,而且保持了直接的单线程编程模型。例如,以前的多端口VRF平方地增长硬件资源使用,因为任何数据通道都需要访问一个共享寄存器文件中的任何字。相反,这些方法和设备将一个存储空间划分为多个空间(例如,如果存在N个通道,则存储空间除以N),以便将一个寄存器存储器分割为多个独立的存储器库,并去除额外的硬件开销(例如,复用器/解复用器或多端口块RAM组件)。
存储体式存储器架构中的一个重大挑战是如何将引用地址映射到独立的存储器库,使得来自每个数据通道的引用始终映射到本地存储器。本文描述的设备和方法使用高效且直接的解码方案,该方案假定数据通道在独立的循环迭代上操作,并自动将迭代局部变量放置在适当的存储器库中。
这些设备和方法可以使用利用单线程编程模型编写的程序。在一个实现中,程序员可以提供附加信息来标识并行循环。首先,将“迭代”计数器设置为要处理的迭代的总次数,并且将“贴片”设置为要处理的向量的大小(以硬件本机向量大小的倍数表示)。然后,针对给定向量阵列的存储器位置以“贴片”本机向量条目为单位跨存储体条带化。当迭代分布在跨不同的数据通道上时,第一存储体存储器上的读/写地址可由所有存储体使用。
逻辑程序员的观点是,当程序中有多个循环迭代经过同一操作集合时,数据向量及其数据流会自动跨存储体分布。并且程序员可以根据第一存储体中的存储器地址将它们作为组来索引。
作为一个简化的示例用例,考虑以下表达式的求值:
D=A+B x C
其中所有值(A、B、C、D)都是6x4矩阵,并且所有运算都是逐元素执行的。此外,假设每个数据通道在元素的可变长度向量上操作。接下来,将每个矩阵被视为四元素向量的组,并且使多达6个通道能够同时对这些向量进行操作(每通道一行)。如果所有数据都存储在逻辑统一的存储器中,则使所有6个通道能够同时从该存储器中读取数据将会有相当大的开销和复杂度。然而,使用本公开的存储体式存储器,每个通道可以独立地在每个矩阵的它自己的片上操作。通过将“贴片”设置为4,并且将“迭代”设置为6,我们的***将跨可用通道展开6个迭代(如果可用通道小于6,则重用通道),并且一次将元素4映射到每个通道。因此,每个通道需要访问的(多个)行将在其本地存储器库中找到。
数据通道之间的数据移动需要额外的逻辑,但这种额外的数据移动逻辑可以通过将***中的一个寄存器存储器保留为多端口或在交换机中放置解串行器/串行器来轻松实现。此外,额外的数据移动逻辑可以通过在多存储体VRF内嵌入解串行器和串行器来实现。此外,应注意的是,跨不同通道的数据移动只发生在组成一个深度学习层(如完全连接层或层归一化层)的整个多个链操作的开始和结束,因此其成本被摊销到多个链操作上并且几乎是隐藏的。
这些设备和方法的一个技术优势是结构和/或硬件实现的低成本以及由此产生的更高的性能。这些设备和方法确保要并行化的数据流始终被限制在数据流自己的存储空间中而不交叉,因此,这些设备可以被实现为直接存储体式存储器。此外,一个存储体的任何控制逻辑可以在所有存储体之间共享,因为来自和/或去往第一存储体的数据流可以代表整个数据流。相反,许多现有的DNN加速器将一个连续的存储空间块分配给本地存储器,而没有在访问存储器时在并行数据流中充分利用优势,因此,现有的DNN加速器具有更昂贵的硬件来复用数据流、解复用数据流、复杂的存储器层级结构和控制逻辑、和/或复杂的多线程编程模型。
这些设备和方法的另一技术优势是可扩展性。许多现有加速器具有一个物理存储器地址,其具有复杂的存储器层级结构(例如,高速缓存),这使得添加并行数据路径的成本比线性复杂度更昂贵。相比之下,这些设备和方法在执行操作时在分布式存储器内维护本地化的数据流入和/或流出。因此,通过添加并行数据路径,设备的架构可以线性扩展。
(A1)一些实现包括用于与加速器一起使用的存储体式存储器结构(例如,架构400、架构500或多存储体VRF 600)。存储体式存储器结构(例如,架构400、架构500或多存储体VRF 600)可以包括多个本地存储器(例如,VRF 408、410、412、430、432、434;VRF 502、504、506;或单独的本地存储器608、610、612),其中多个本地存储器包括存储器解码器(例如,跨越存储器库608、610、612的共享读/写控制信号(Wf_fsm 620、rd_fsm 622))。存储体式存储器结构(例如,架构400、架构500或多存储体VRF 600)可以包括多个计算单元(例如,MVM 418、420、422,MFU 424、426、428;或MVM_IVRF 508、MFU_IVRF 502和/或SPU 516)。存储体式存储器结构(例如,架构400、架构500或多存储体VRF 600)可以包括多个通道(例如,数据通道402、404、406;或通道602、604、606),其中多个通道(例如,数据通道402、404、406;或通道602、604、606)中的每个通道与多个本地存储器(例如,VRF 408、410、412、430、432、434;VRF 502、504、506;或单独的本地存储器608、610、612)中的单独的本地存储器和多个计算单元中的一个计算单元(例如,MVM 418、420、422,MFU 424、426、428;或MVM_IVRF 508、MFU_IVRF 502和/或SPU 516)配对。存储器解码器(例如,共享读/写控制信号(Wf_fsm 620、rd_fsm 622))接收针对加速器的数据,其中数据包括多个向量(例如,向量614、616、618),并且多个向量(例如,向量614、616、618)中的每个向量由存储器解码器分配给多个通道(例如,数据通道402、404、406;或通道602、604、606)中的一个通道,以由与该通道相关联的计算单元进行处理。
(A2)在A1的存储体式存储器结构的一些实现中,每个计算单元被配置为处理被提供给它的数据而不访问来自其他通道的数据或与其他通道共享数据。
(A3)在A1或A2的存储体式存储器结构的一些实现中,每个计算单元被配置为将数据写入与通道相关联的单独的本地存储器中,并且从与通道相关联的单独的本地存储器中读取数据。
(A4)在A1-A3中任一项的存储体式存储器结构的一些实现中,存储解码器被配置为在由计算单元处理之后将数据发送回网络。
(A5)在A1-A4中任一项的存储体式存储器结构的一些实现中,存储器解码器被配置为使用存储器地址策略来将多个向量中的每个向量映射到单独的本地存储器的存储器地址。存储器解码器被配置为使用存储器地址策略来迭代多个向量中的每个向量,并且在每次迭代中,存储器解码器顺序地将多个向量中的每个向量映射到多个本地存储器中的下一单独的本地存储器。
(A6)在A1-A5中任一项的存储体式存储器结构的一些实现中,多个计算单元中的每个计算单元被配置为在分配给每个计算单元的数据上并行操作。
(A7)在A1-A6中任一项的存储体式存储器结构的一些实现中,单独的本地存储器包括向量寄存器文件(VRF)。
(A8)在A1-A7中任一项的存储体式存储器结构的一些实现中,每个通道包括矩阵向量乘法器(MVM)。
(A9)在A1-A8中任何项的存储体式存储器结构的一些实现中,加速器是深度神经网络(DNN)加速器。
(B1)一些实现包括由加速器的存储器解码器(例如,共享读/写控制信号(Wf_fsm620、rd_fsm 622))执行的方法。该方法可以包括接收与用于加速器一起使用的数据。该方法可以包括标识针对数据的多个向量(例如,向量614、616、618)。该方法可以包括标识加速器中的多个本地存储器(例如,单独的本地存储器608、610、612)。该方法可以包括:针对多个向量(例如,向量614、616、618)中的每个向量:选择多个本地存储器(例如,单独的本地存储器608、610、612)中的单独的本地存储器以用于与该向量一起使用;将单独的本地存储器的地址映射到该向量;以及使用该映射以将针对该向量的数据发送到与该单独的本地存储器(例如,存储器库608、610、612)相关联的数据通道(例如,通道602、604、606)。
(B2)在一些实现中,B1的方法可以包括基于针对向量的向量大小来标识针对向量的贴片的数目;以及为向量的每个贴片提供贴片索引,以用于与将单独的本地存储器的地址映射到该向量一起使用。
(B3)在B1或B2的方法的一些实现中,向量的每个贴片保留在与单独的本地存储器相关联的数据信道中。
(B4)在B1-B3中任一项的方法的一些实现中,选择针对向量的单独的本地存储器是以多个本地存储器的顺序的次序进行的。
(B5)在B1-B4中任一项的方法的一些实现中,多个本地存储器的子集被用于选择针对向量的单独的本地存储器。
(B6)在B1-B5中任一项的方法的一些实现中,每个单独的本地存储器与多个计算单元中的计算单元相关联,并且该计算单元对该单独的本地存储器的数据执行处理。
(B7)在B1-B6中任一项的方法的一些实现中,多个计算单元并行地对数据执行处理。
(B8)在B1-B7中任一项的方法的一些实现中,针对独立的可并发执行的存储器访问模式,访问多个本地存储器中的每个单独的本地存储器。
(B9)在B1-B8中任一项的方法的一些实现中,单独的本地存储器是向量寄存器文件(VRF),并且加速器是深度神经网络(DNN)加速器。
(C1)一些实现包括一种设备(例如,FPGA 1022、FPGA 1024和FPGA 1026)。该设备(例如,FPGA 1022、FPGA 1024和FPGA 1026)可以包括一个或多个处理器(例如,IMP 1210、CSP 1220、OMP 1240)。该设备可以包括与一个或多个处理器(例如,IMP 1210、CSP 1220、OMP 1240)进行电子通信的存储器。该设备可以包括存储在存储器中的指令,指令可由一个或多个处理器(例如,IMP 1210、CSP 1220、OMP 1240)执行,以:接收用于加速器(例如,FPGA1022、FPGA 1024和FPGA 1026)的数据;标识数据的多个向量(例如,向量614、616、618);标识加速器中的多个本地存储器(例如,单独的本地存储器608、610、612);针对多个向量(例如,向量614、616、618)中的每个向量:选择多个本地存储器(例如,单独的本地存储器608、610、612)中的单独的本地存储器以与该向量一起使用;将该单独的本地存储器的地址映射到该向量;以及使用该映射将该向量的数据发送到与该单独的本地存储器(例如,存储器库608、610、612)相关联的数据通道(例如,通道602、604、606)。
本公开可以在不脱离其精神或特征的情况下以其他具体形式实施。所描述的实施例将被认为是说明性的而不是限制性的。因此,本公开的范围由所附权利要求指示,而不是由前述描述指示。权利要求的含义和等同范围内的改变应包括在其范围内。
Claims (15)
1.一种用于与加速器一起使用的存储体式存储器结构,包括:
多个本地存储器,其中所述多个本地存储器包括存储器解码器;
多个计算单元;以及
多个通道,其中所述多个通道中的每个通道与所述多个本地存储器中的单独的本地存储器和所述多个计算单元中的一个计算单元配对,其中
所述存储器解码器接收针对所述加速器的数据,其中所述数据包括多个向量,并且所述多个向量中的每个向量由所述存储器解码器分配给所述多个通道中的一个通道,以用于由与所述通道相关联的所述计算单元进行处理。
2.根据权利要求1所述的存储体式存储器结构,其中每个计算单元被配置为处理被提供给该计算单元的所述数据而不访问来自其他通道的数据或与所述其他通道共享所述数据。
3.根据权利要求1所述的存储体式存储器结构,其中每个计算单元被配置为将所述数据写入与所述通道相关联的所述单独的本地存储器,并且从与所述通道相关联的所述单独的本地存储器读取所述数据,并且
其中所述存储器解码器被配置为在由所述计算单元进行所述处理之后将所述数据发送回以下一项或多项:动态随机存取存储器(DRAM)、所述本地存储器中的任何向量寄存器文件(VRF)、或网络。
4.根据权利要求1所述的存储体式存储器结构,其中所述存储器解码器被配置为使用存储器地址策略,以通过迭代通过所述多个向量中的每个向量来将所述多个向量中的每个向量映射到所述单独的本地存储器的存储器地址,并且在每次迭代中,所述存储器解码器顺序地将所述多个向量中的每个向量映射到所述多个本地存储器中的下一单独的本地存储器。
5.根据权利要求1所述的存储体式存储器结构,其中所述多个计算单元中的每个计算单元被配置为在被分配给每个计算单元的所述数据上并行操作。
6.根据权利要求1所述的存储体式存储器结构,其中所述单独的本地存储器包括向量寄存器文件(VRF),并且每个通道包括矩阵-向量乘法器(MVM)。
7.根据权利要求1所述的存储体式存储器结构,其中所述加速器是深度神经网络(DNN)加速器。
8.一种由加速器的存储器解码器执行的方法,包括:
接收用于与所述加速器一起使用的数据;
标识针对所述数据的多个向量;
标识所述加速器中的多个本地存储器;
针对所述多个向量中的每个向量:
选择所述多个本地存储器中的单独的本地存储器以用于与所述向量一起使用;
将所述单独的本地存储器的地址映射到所述向量;以及
使用所述映射以将针对所述向量的所述数据发送到与所述单独的本地存储器相关联的数据通道。
9.根据权利要求8所述的方法,还包括:
基于针对所述向量的向量大小,标识针对所述向量的贴片的数目;以及
为所述向量的每个贴片提供贴片索引,以用于与将所述单独的本地存储器的所述地址映射到所述向量一起使用,其中所述向量的每个贴片保留在与所述单独的本地存储器相关联的所述数据通道中。
10.根据权利要求9所述的方法,其中选择针对所述向量的所述单独的本地存储器是以所述多个本地存储器的顺序的次序发生的。
11.根据权利要求8所述的方法,其中多个本地存储器的子集被用于选择针对所述向量的所述单独的本地存储器。
12.根据权利要求8所述的方法,其中每个单独的本地存储器与多个计算单元中的计算单元相关联,并且所述计算单元在针对所述单独的本地存储器的所述数据上并行地执行处理。
13.根据权利要求8所述的方法,其中所述多个本地存储器中的每个所述单独的本地存储器针对独立的并发可执行的存储器访问模式而被访问。
14.根据权利要求8所述的方法,其中所述单独的本地存储器是向量寄存器文件(VRF),并且所述加速器是深度神经网络(DNN)加速器。
15.一种设备,包括:
一个或多个处理器;
存储器,与所述一个或多个处理器进行电子通信;以及
被存储在所述存储器中的指令,所述指令由所述一个或多个处理器可执行以:
接收用于与加速器一起使用的数据;
标识针对所述数据的多个向量;
标识所述加速器中的多个本地存储器;
针对所述多个向量中的每个向量:
选择所述多个本地存储器中的单独的本地存储器以用于与所述向量一起使用;
将所述单独的本地存储器的地址映射到所述向量;以及
使用所述映射以将针对所述向量的数据发送到与所述单独的本地存储器相关联的数据通道。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063072427P | 2020-08-31 | 2020-08-31 | |
US63/072,427 | 2020-08-31 | ||
US17/097,205 US11347652B2 (en) | 2020-08-31 | 2020-11-13 | Banked memory architecture for multiple parallel datapath channels in an accelerator |
US17/097,205 | 2020-11-13 | ||
PCT/US2021/031000 WO2022046205A1 (en) | 2020-08-31 | 2021-05-06 | Banked memory architecture for multiple parallel datapath channels in an accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116171431A true CN116171431A (zh) | 2023-05-26 |
Family
ID=76284152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180055367.1A Pending CN116171431A (zh) | 2020-08-31 | 2021-05-06 | 用于加速器中多个并行数据路径通道的存储体式存储器架构 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11347652B2 (zh) |
EP (1) | EP4204970A1 (zh) |
CN (1) | CN116171431A (zh) |
WO (1) | WO2022046205A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11176043B2 (en) * | 2020-04-02 | 2021-11-16 | International Business Machines Corporation | Distributed memory-augmented neural network architecture |
US20220180152A1 (en) * | 2020-12-09 | 2022-06-09 | Electronics And Telecommunications Research Institute | Information processing apparatus and method for analyzing errors of neural network processing device therein |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6880056B2 (en) * | 2002-03-28 | 2005-04-12 | Hewlett-Packard Development, L.P. | Memory array and method with simultaneous read/write capability |
US7296112B1 (en) | 2002-12-10 | 2007-11-13 | Greenfield Networks, Inc. | High bandwidth memory management using multi-bank DRAM devices |
US7627735B2 (en) * | 2005-10-21 | 2009-12-01 | Intel Corporation | Implementing vector memory operations |
US7940575B2 (en) * | 2008-03-28 | 2011-05-10 | Qimonda Ag | Memory device and method providing logic connections for data transfer |
US8583896B2 (en) | 2009-11-13 | 2013-11-12 | Nec Laboratories America, Inc. | Massively parallel processing core with plural chains of processing elements and respective smart memory storing select data received from each chain |
US20130311753A1 (en) * | 2012-05-19 | 2013-11-21 | Venu Kandadai | Method and device (universal multifunction accelerator) for accelerating computations by parallel computations of middle stratum operations |
US20150279431A1 (en) * | 2014-04-01 | 2015-10-01 | Micron Technology, Inc. | Stacked semiconductor die assemblies with partitioned logic and associated systems and methods |
EP3035204B1 (en) | 2014-12-19 | 2018-08-15 | Intel Corporation | Storage device and method for performing convolution operations |
US10417171B1 (en) * | 2015-09-15 | 2019-09-17 | Xilinx, Inc. | Circuits for and methods of enabling the communication of serialized data in a communication link associated with a communication network |
US10817802B2 (en) | 2016-05-07 | 2020-10-27 | Intel Corporation | Apparatus for hardware accelerated machine learning |
US10236975B2 (en) * | 2017-02-10 | 2019-03-19 | Intel Corporation | Programmable photonic-electronic integrated circuit for optical testing |
US10817587B2 (en) * | 2017-02-28 | 2020-10-27 | Texas Instruments Incorporated | Reconfigurable matrix multiplier system and method |
US11157801B2 (en) | 2017-02-28 | 2021-10-26 | Microsoft Technology Licensing, Llc | Neural network processing with the neural network model pinned to on-chip memories of hardware nodes |
US10261786B2 (en) * | 2017-03-09 | 2019-04-16 | Google Llc | Vector processing unit |
US10331445B2 (en) | 2017-05-24 | 2019-06-25 | Microsoft Technology Licensing, Llc | Multifunction vector processor circuits |
US10338925B2 (en) | 2017-05-24 | 2019-07-02 | Microsoft Technology Licensing, Llc | Tensor register files |
US10372456B2 (en) | 2017-05-24 | 2019-08-06 | Microsoft Technology Licensing, Llc | Tensor processor instruction set architecture |
CN109871236A (zh) | 2017-12-01 | 2019-06-11 | 超威半导体公司 | 具有低功率并行矩阵乘法流水线的流处理器 |
US11194477B2 (en) * | 2018-01-31 | 2021-12-07 | Micron Technology, Inc. | Determination of a match between data values stored by three or more arrays |
KR102559581B1 (ko) * | 2018-05-23 | 2023-07-25 | 삼성전자주식회사 | 재구성 가능 로직을 포함하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법 |
US11080210B2 (en) * | 2018-09-06 | 2021-08-03 | Micron Technology, Inc. | Memory sub-system including an in package sequencer separate from a controller |
CN112840356B (zh) * | 2018-10-09 | 2023-04-11 | 华为技术有限公司 | 运算加速器、处理方法及相关设备 |
US11347477B2 (en) * | 2019-09-27 | 2022-05-31 | Intel Corporation | Compute in/near memory (CIM) circuit architecture for unified matrix-matrix and matrix-vector computations |
KR20210042757A (ko) * | 2019-10-10 | 2021-04-20 | 삼성전자주식회사 | Pim을 채용하는 반도체 메모리 장치 및 그 동작 방법 |
US11468002B2 (en) * | 2020-02-28 | 2022-10-11 | Untether Ai Corporation | Computational memory with cooperation among rows of processing elements and memory thereof |
US11222258B2 (en) * | 2020-03-27 | 2022-01-11 | Google Llc | Load balancing for memory channel controllers |
US20210312266A1 (en) | 2020-04-01 | 2021-10-07 | Microsoft Technology Licensing, Llc | Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations |
US11321607B2 (en) * | 2020-04-03 | 2022-05-03 | SiMa Technologies, Inc. | Machine learning network implemented by statically scheduled instructions, with compiler |
-
2020
- 2020-11-13 US US17/097,205 patent/US11347652B2/en active Active
-
2021
- 2021-05-06 CN CN202180055367.1A patent/CN116171431A/zh active Pending
- 2021-05-06 WO PCT/US2021/031000 patent/WO2022046205A1/en unknown
- 2021-05-06 EP EP21730339.5A patent/EP4204970A1/en active Pending
-
2022
- 2022-04-27 US US17/730,707 patent/US11704251B2/en active Active
-
2023
- 2023-05-30 US US18/203,527 patent/US20230305967A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4204970A1 (en) | 2023-07-05 |
US20220066943A1 (en) | 2022-03-03 |
WO2022046205A1 (en) | 2022-03-03 |
US11347652B2 (en) | 2022-05-31 |
US20220253384A1 (en) | 2022-08-11 |
US20230305967A1 (en) | 2023-09-28 |
US11704251B2 (en) | 2023-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110998570B (zh) | 具有带有块浮点处理的矩阵矢量单元的硬件节点 | |
Mittal et al. | A survey of techniques for optimizing deep learning on GPUs | |
US20230305967A1 (en) | Banked memory architecture for multiple parallel datapath channels in an accelerator | |
US10936230B2 (en) | Computational processor-in-memory with enhanced strided memory access | |
CN111630505B (zh) | 深度学习加速器***及其方法 | |
CN112005214B (zh) | 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 | |
US20110060891A1 (en) | Parallel pipelined vector reduction in a data processing system | |
TW202215227A (zh) | 組態檔案之運行時間修補 | |
Ranade | Fluent parallel computation | |
Pavel et al. | Integer sorting and routing in arrays with reconfigurable optical buses | |
US8792786B2 (en) | Photonically-enabled in-flight data reorganization | |
Kang et al. | Improving all-to-many personalized communication in two-phase i/o | |
WO2022060929A1 (en) | Compile time logic for detecting streaming compatible and broadcast compatible data access patterns | |
US20230289189A1 (en) | Distributed Shared Memory | |
Charif et al. | Detailed and highly parallelizable cycle-accurate network-on-chip simulation on GPGPU | |
AU2018248439A1 (en) | General-purpose parallel computing architecture | |
Page | Scalability of irregular problems | |
WO2022010810A1 (en) | Runtime virtualization of reconfigurable data flow resources | |
McColl | Mathematics, Models and Architectures | |
Tabuchi et al. | The 16,384-node parallelism of 3D-CNN training on an arm CPU based supercomputer | |
Sakai et al. | Design and implementation of a circular omega network in the EM-4 | |
Shen et al. | Memory partition for simd in streaming dataflow architectures | |
RU2795887C2 (ru) | Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память | |
Bošanský et al. | Parallel Approach To Solve Of The Direct Solution Of Large Sparse Systems Of Linear Equations | |
Johnsson | Ensemble architectures and their algorithms: an overview |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |