一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于人工智能和机器学习的向量加速器的制作方法

2021-12-17 18:16:00 来源:中国专利 TAG:

用于人工智能和机器学习的向量加速器
1.相关申请的交叉引用
2.本公开要求2020年8月17日提交的美国临时申请no.63/066,723的优先权权益,上述申请的全部内容通过引用合并于此。
技术领域
3.本公开总体上涉及一种用于人工智能(ai)和机器学习(ml)的加速器,尤其涉及一种被配置为支持处理神经网络的加速器,所述神经网络需要大量数据(例如向量或矩阵等)运算。


背景技术:

4.人工智能和机器学习已广泛应用于各个领域。应用于人工智能或机器学习的神经网络通常需要处理大量的数据。然而,传统的中央处理单元(cpu)或图形处理单元(gpu)结构不是专门为处理大数据而设计的,也不是为处理包括向量或矩阵运算在内的神经网络而优化的,这些运算通常需要大量数据。提高处理消耗大量数据的神经网络的性能对于提高整体执行性能具有重要意义。


技术实现要素:

5.参照以下描述和附图可以最佳地理解本公开,所述附图用于说明本公开实施例的用于人工智能和机器学习的向量加速器。
6.本公开的一个目的是实现提高处理神经网络的性能的加速器。
7.本公开实施例提供了一种用于处理向量或矩阵运算的加速器。所述加速器包括向量处理单元,所述向量处理单元包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;矩阵乘法单元,所述矩阵乘法单元包括第一矩阵乘法算子、第二矩阵乘法算子和累加器,所述第一矩阵乘法算子和所述第二矩阵乘法算子具有被配置为处理矩阵运算的电路,所述累加器具有被配置为累加所述第一矩阵乘法算子和所述第二矩阵乘法算子的输出结果的电路;以及存储器,用于存储向量运算或矩阵运算的输入数据,所述存储器被配置为与所述向量处理单元和所述矩阵乘法单元通信。
8.本公开实施例提供了一种用于在加速器上处理向量或矩阵运算的方法,所述加速器包括:向量处理单元,所述向量处理单元包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;矩阵乘法单元包括矩阵乘法算子,所述矩阵乘法算子具有被配置为处理矩阵运算的电路;存储器用于存储向量运算或矩阵运算的输入数据,并且所述存储器包括多个行,每个行被配置为存储可由所述多个计算单元或由所述矩阵乘法算子同时处理的数据。所述方法包括:将输入数据划分为多个数据段,并将每个数据段存储在所述多个行中的对应行中;将存储在所述多个行的第一行中的第一数据段提供给所述向量处理单元或所述矩阵乘法单元;以及由所述多个计算单元或由所述矩阵乘法算子对所述第一数据段同时执行向量运算或矩阵运算。
9.本公开实施例提供了一种设备,所述设备包括:主机单元;以及与所述主机单元通信耦合的加速器。所述加速器包括:向量处理单元,所述向量处理单元包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;矩阵乘法单元,所述矩阵乘法单元包括第一矩阵乘法算子、第二矩阵乘法算子和累加器,所述第一矩阵乘法算子和所述第二矩阵乘法算子具有被配置为处理矩阵运算的电路,所述累加器具有被配置为累加所述第一矩阵乘法算子和所述第二矩阵乘法算子的输出结果的电路;以及存储器,用于存储向量运算或矩阵运算的输入数据,并且所述存储器被配置为与所述向量处理单元和所述矩阵乘法单元通信。
10.通过上述方案,使得可以提高加速器处理神经网络的性能。
11.本公开实施例的附加特征和优点将在以下描述中部分阐述,并且部分将从描述中显而易见,或者可以通过实施例的实践来学习。本公开实施例的特征和优点可以通过权利要求中阐述的元件和组合来实现和获得。
12.应当理解,前面的一般描述和下面的详细描述都只是示例性的和解释性的,并且本公开的实施例不以此为限制。
附图说明
13.在下面的详细描述和附图中示出了本公开的实施例和各个方面。图中所示的各种特征没有按比例绘制。
14.图1a示出根据本公开实施例的示例性神经网络加速器结构。
15.图1b示出根据本公开实施例的示例性神经网络加速器核结构,所述神经网络加速器核结构包括向量加速单元。
16.图1c示出根据本公开实施例的示例性云系统的示意图,所述云系统包括神经网络加速器。
17.图2示出根据本公开实施例的示例性存储器结构和存储器布局。
18.图3示出根据本公开实施例的示例性向量处理单元(vector processing unit,vpu)结构。
19.图4示出根据本公开实施例的示例性通用矩阵乘法单元(general matrix multiplication unit,gemm)结构。
20.图5a示出根据本公开实施例的示例性矩阵乘法运算。
21.图5b示出根据本公开实施例的示例性在矩阵乘法单元处理图5a所示的矩阵乘法运算的数据流。
22.图6示出根据本公开实施例的用于处理向量运算或矩阵运算的示例性流程图。
具体实施例
23.现在将详细说明本公开的实施例,其示例在附图中示出。下面的描述引用附图,其中不同附图中的相同数字表示相同或类似的元件,除非另有表示。在示例性实施例的以下描述中阐述的实现并不代表与本发明一致的所有实现。相反,它们仅仅是与所附权利要求中所述的与本发明有关的方面一致的装置和方法的示例。下面更详细地描述本公开实施例的特定方面。如果与通过引用合并的术语和/或定义相冲突,则以本文提供的术语和定义为
准。
24.人工智能和机器学习已广泛应用于各个领域。应用于人工智能或机器学习的神经网络通常需要处理大量的数据。然而,传统的中央处理单元(cpu)或图形处理单元(gpu)结构不是专门为处理大数据而设计的,也不是为处理包括向量或矩阵运算在内的神经网络而优化的,这些运算通常需要大量数据。提高处理消耗大量数据的神经网络的性能对于提高整体执行性能具有重要意义。
25.根据本公开的一些实施例,加速器系统可以支持处理消耗大量数据的神经网络。根据本公开的一些实施例,处理各种向量或矩阵运算的性能可以得到改善,这些运算包括矩阵乘法运算、矩阵元素运算、矩阵激活运算、向量

向量运算、向量

标量运算,等等。根据本公开的一些实施例,提供了一种加速器系统,所述加速器系统具有能够优化处理神经网络的性能的紧密流水线化的功能内单元和功能间单元。
26.图1a示出了根据本公开实施例的示例性神经网络加速器结构。在本公开的上下文中,神经网络加速器也可称为机器学习加速器或深度学习加速器。在一些实施例中,加速器100可称为神经网络处理单元(npu)100。如图1a所示,加速器100可包括多个核102、命令处理器104、直接存储器访问(dma)单元108、联合测试动作组(joint test action group,jtag)/测试访问端(test access end,tap)控制器110、外围接口112、总线114,等等。
27.可以理解的是,核102可以基于所传送的数据执行算法运算。核102可包括一个或多个处理元件,所述处理元件可包括单指令多数据(simd)结构,所述单指令多数据结构包括一个或多个处理单元,所述处理单元被配置为基于从命令处理器104接收的命令执行一个或多个运算(例如,乘法、加法、乘加,等等)。为了对所传送的数据包执行运算,核102可以包括用于处理所述数据包中的信息的一个或多个处理元件。每个处理元件可以包括任意数量的处理单元。根据本公开的一些实施例,加速器100可以包括多个核102,例如四个核。在一些实施例中,所述多个核102可以彼此通信地耦合。例如,所述多个核102可与单向环形总线连接,其支持用于大型神经网络模型的高效流水线。将参照图1b详细说明核102的结构。
28.命令处理器104可以与主机单元120交互并将相关命令和数据传递到对应的核102。在一些实施例中,命令处理器104可以在内核模式驱动程序(kmd)的监督下与主机单元120交互。在一些实施例中,命令处理器104可以修改对每个核102的相关命令,使得核102可以尽可能并行地工作。修改后的命令可以存储在指令缓冲器中。在一些实施例中,命令处理器104可被配置为协调一个或多个核102以并行执行。
29.直接存储器访问单元108可以协助在主机存储器121和加速器100之间传送数据。例如,直接存储器访问单元108可以协助将数据或指令从主机存储器121加载到核102的本地存储器中。直接存储器访问单元108还可以协助在多个加速器之间传送数据。直接存储器访问单元108可以允许片外设备在不引起主机cpu中断的情况下访问片上存储器和片外存储器。此外,直接存储器访问单元108可以协助在加速器100的组件之间传送数据。例如,直接存储器访问单元108可以协助在多个核102之间或在每个核内传送数据。因此,直接存储器访问单元108还可以生成存储器地址并启动存储器读或写周期。直接存储器访问单元108还可以包含若干硬件寄存器,所述硬件寄存器可由一个或多个处理器写入和读取,所述硬件寄存器包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器和其他类型的寄存器。这些寄存器可以指定来源、目的地、传输方向(从输入/输出(i/o)设备读取或写入
输入/输出设备)、传输单元的大小或一次突发传输的字节数的某些组合。应当理解的是,加速器100可包括第二直接存储器访问单元,所述第二直接存储器访问单元可用于在其他加速器结构之间传输数据,以允许在不涉及主机cpu的情况下多个加速器结构直接通信。
30.联合测试动作组/测试访问端控制器110可以指定实现串行通信接口(例如,jtag接口)的专用调试端口,所述专用调试端口用于低开销访问加速器,而不需要直接外部访问系统地址和数据总线。联合测试动作组/测试访问端控制器110还可以具有片上测试访问接口(例如,tap接口),所述片上测试访问接口实现协议以访问一组测试寄存器,所述测试寄存器呈现芯片逻辑电平和各个部件的设备性能。
31.如果外围接口112(例如pcie接口)存在,则外围接口112用作(并且通常是)芯片间总线,外围接口112提供加速器和其他设备之间的通信。
32.总线114(例如i2c总线)包括芯片内总线和芯片间总线。正如系统结构要求的那样,芯片内总线将所有内部组件相互连接。虽然并非所有组件都连接到每个其他组件,但所有组件都连接一些与其需要通信的其他组件。芯片间总线连接加速器与其他设备,例如片外存储器或外围设备。例如,总线114可以提供跨核的高速通信,并且总线114还可以将核102与其他单元连接,所述其他单元例如是片外存储器或外围设备。通常,尽管在一些实现中,总线114仍可能与专用的总线间通信有关,但是如果存在外围接口112(例如,芯片间总线),则总线114仅与芯片内总线有关。
33.加速器100还可以与主机单元120通信。主机单元120可以是一个或多个处理单元(例如,x86中央处理单元)。如图1a所示,主机单元120可以与主机存储器121相关联。在一些实施例中,主机存储器121可以是与主机单元120相关联的集成存储器或外部存储器。在一些实施例中,主机存储器121可以包括主机盘,所述主机盘是配置成为主机单元120提供附加存储器的外部存储器。主机存储器121可以是双倍数据速率同步动态随机存取存储器(例如,ddr sdram)等。与集成在加速器芯片内的片上存储器相比,主机存储器121作为更高级的高速缓存,可以被配置成以较慢的访问速度存储大量数据。存储在主机存储器121中的数据可被传送到加速器100以用于执行神经网络模型。
34.在一些实施例中,具有主机单元120和主机存储器121的主机系统可以包括编译器(图中未示出)。编译器是程序或计算机软件,所述程序或计算机软件将用一种编程语言编写的计算机代码转换成指令,以为加速器100创建可执行程序。在机器学习应用中,编译器可以执行各种操作,例如,预处理、词法分析、解析、语义分析、输入程序到中间表示的转换、神经网络的初始化、代码优化、代码生成,以及其组合。例如,编译器可以编译神经网络以生成静态参数,例如神经元之间的连接和神经元的权重。
35.在一些实施例中,包括编译器的主机系统可以将一个或多个命令推送到加速器100。如上所述,这些命令可由加速器100的命令处理器104进一步处理,临时存储在加速器100的指令缓冲器中,并分配给对应的一个或多个核(例如,图1a中的核102)或处理元件。一些命令可以指示直接存储器访问单元(例如,图1a中的直接存储器访问单元108)从主机存储器(例如,图1a的主机存储器121)将指令和数据加载至加速器100。然后,可以将加载的指令分配给分配有相应任务的每个核(例如,图1a的核102),并且所述一个或多个核可以处理这些指令。
36.可以理解的是,核102接收到的前几个指令可以指示核102从主机存储器121将数
据加载/存储至核的一个或多个本地存储器(例如,图1b的存储器150)。然后,每个核102可以启动指令流水线,指令流水线包括从指令缓冲器取指令,译码指令(例如,通过图1a的直接存储器访问单元108),生成本地存储器地址(例如,对应于操作数),读取源数据,执行或加载/存储操作,然后写回结果。
37.根据一些实施例,加速器100可进一步包括用作主存储器的全局存储器(图中未示出),全局存储器具有存储器块(例如,8gb第二代高带宽存储器(hbm2)的4个块)。在一些实施例中,全局存储器可以通过直接存储器访问单元108存储来自主机存储器121的指令和数据。然后,指令可以被分配到分配有相应任务的每个核的指令缓冲器中,并且核可以相应地处理这些指令。
38.在一些实施例中,加速器100还可以包括存储器控制器(图中未示出),所述存储器控制器被配置为管理往来于全局存储器内的特定存储器块(例如,第二代高带宽存储器)的数据的读和写。例如,存储器控制器可以管理来自另一个加速器的核(例如,来自直接存储器访问单元108或对应于另一个加速器的直接存储器访问单元)或来自核102(例如,来自核102的本地存储器)的读/写数据。可以理解的是,在加速器100中可以提供不止一个存储器控制器。例如,全局存储器内的每个存储器块(例如,第二代高带宽存储器)可以有一个存储器控制器。
39.存储器控制器可以生成存储器地址和启动存储器读或写周期。存储器控制器可以包含几个硬件寄存器,所述硬件寄存器可以由一个或多个处理器写入和读取。所述寄存器可以包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、以及其他类型的寄存器。这些寄存器可以指定来源、目的地、传输方向(从输入/输出设备读取或写入输入/输出设备)、传输单元的大小、一次突发传输的字节数、或存储器控制器的其他典型特征的某些组合。
40.尽管在本公开的一些实施例中图1a的加速器100可用于卷积神经网络(cnn),但可以理解的是图1a的加速器100可用于各种神经网络,例如深度神经网络(dnn)、递归神经网络(rnn),等等。此外,一些实施例可被配置用于各种处理架构,例如神经网络处理单元(npu)、图形处理单元(gpu)、现场可编程门阵列(fpga)、张量处理单元(tpu)、专用集成电路(asic)、任何其他类型的异构加速器处理单元(hapu),等等。
41.图1b示出根据本公开实施例的示例性神经网络加速器核结构,所述神经网络加速器核结构包括向量加速单元。如图1b所示,核102可包括向量加速单元140、存储器150、命令队列160和响应队列170。如图1b所示,向量加速单元140可以包括向量处理单元141和矩阵乘法单元142。根据本公开的一些实施例,向量处理单元141和矩阵乘法单元142被紧密流水线化。例如,在向量处理单元141处理小块数据并将结果数据存储回共享存储器之后,矩阵乘法单元142可以通过从共享存储器读出结果数据来开始处理基于结果数据的运算,反之亦然。
42.根据本公开的一些实施例,向量处理单元141可以执行向量运算,所述向量运算包括向量

向量运算、n个向量运算、向量

标量运算、向量

立即数运算、向量元素运算、填充或向量重塑运算,等等。根据本公开的一些实施例,矩阵乘法单元142可以执行矩阵乘法运算、矩阵元素运算、矩阵修正线性单元(rectified linear unit,relu)激活运算,等等。
43.根据本公开的一些实施例,如图1b所示,可以提供控制信号给向量加速单元140,
所述控制信号包括时钟信号sclk、复位信号srst、开始信号sstrt等。在一些实施例中,向量加速单元140可以产生输出信号,所述输出信号包括完成信号scpl、空闲信号sidle等。在一些实施例中,当将图1b的核与其他系统或核集成时,可以使用这样的控制信号。例如,控制信号可用于与主机系统(例如,图1a的主机单元120)通信。
44.在一些实施例中,命令队列160可以向向量加速单元140提供命令。根据一些实施例,向量加速单元140可以向命令队列160发送读信号srd以从命令队列160请求命令。根据本公开的一些实施例,作为响应,命令队列160可以向向量加速单元160发送伴随命令的命令信号scom。在一些实施例中,命令队列160可以发送空信号sempty以通知向量加速单元140在命令队列160中不存在待处理的命令。在一些实施例中,在完成或部分完成某个操作的执行之后,向量加速单元140可以发送写信号swrt以通知响应队列170有执行结果要进来。在一些实施例中,与本公开的一些实施例一致,向量加速单元140可以向响应队列170发送伴随执行结果的结果信号srslt。执行结果可以包括完成、成功、失败等。在一些实施例中,响应队列170可以发送满信号sfull以通知向量加速单元140队列中没有剩余空间。在一些实施例中,在向响应队列170发送执行结果之前,向量加速单元140可以等待响应队列170被清空。
45.根据本公开的一些实施例,如图1b所示,存储器150可由向量处理单元141和矩阵乘法单元142共享。在一些实施例中,向量处理单元141和矩阵乘法单元142可以与存储器150通信并经由接口(例如,axi接口)向/从存储器150传送数据。例如,向量处理单元141和矩阵乘法单元142可以根据读取信号saxi

rd从存储器150读取数据,并且向量处理单元141和矩阵乘法单元142可以根据写入信号saxi

wrt将数据存储到存储器150。在一些实施例中,向量处理单元141和矩阵乘法单元142彼此可以不直接通信以交换数据。
46.图1c示出根据本公开实施例的示例性云系统的示意图,所述云系统包括神经网络加速器100。如图1c所示,云系统130可以提供具有人工智能能力的云服务,并且云系统130可以包括多个计算服务器(例如,计算服务器132和计算服务器134)。在一些实施例中,计算服务器132例如可以包括图1a的神经网络加速器100。在一些实施例中,加速器100可以经由外围接口112与主机单元120通信。在一些实施例中,主机单元120可以向加速器100发送命令,以便向量加速单元140可以处理命令。为了简单和清楚,图1a中以简化的方式示出了神经网络加速器100。在神经网络加速器100的协助下,云系统130可以提供图像识别、面部识别、翻译、3d建模等的扩展人工智能能力。可以理解的是,神经网络加速器100可以以其他形式部署到计算设备。例如,神经网络加速器100还可以集成在计算设备中,例如智能手机、平板电脑和可穿戴设备。
47.图2示出根据本公开实施例的示例性存储器结构和存储器布局。根据本公开的一些实施例,图2所示的存储器结构和存储器布局可以促进向量处理单元141和矩阵乘法单元142的功能的流水线化。
48.图2示出了属性数据矩阵(例如,激活矩阵a),属性数据矩阵作为要加载到存储器(例如,存储器150)的示例输入数据。例如,可以对作为输入数据的属性数据的至少一部分执行向量运算(例如,通过向量处理单元141)或矩阵运算(例如,通过矩阵乘法单元142)。虽然在图2中示出了大小为128
×
256的激活矩阵a,但是应当理解,任何矩阵大小都可以适用。根据本公开的一些实施例,当将数据加载到存储器150中时,数据被分割成更小的片段并存
储在存储器150中。
49.如图2所示,存储器150可以被构造成具有多个行,每行可以存储可由向量加速单元140同时处理的数据。例如,当向量处理单元141可以同时处理32个元素时,存储器150的一行可以存储32个元素(即,1024比特)。存储器150的行大小可以根据硬件架构、系统要求等而改变。在一些实施例中,当矩阵乘法单元142可以处理属性矩阵块时,存储器150的行可以具有与属性矩阵块的行相同的大小,属性矩阵块的行可以由矩阵乘法单元142一次处理。
50.在图2中,激活矩阵a的第1块212对应于大小为32
×
32的矩阵,并且第1块212的第1行211对应于大小为1
×
32的矩阵(或向量)。可以从第1行001顺序地将每个块的每一行加载到存储器150。例如,第1块212的第1行211可以加载到存储器150的第1行001,第1块212的第2行(图中未指示)可以加载到存储器150的第2行,并且类似地,第1块212的第3行到第32行可以加载到存储器150的第3行到第32行。类似地,可以从存储器150的第33行加载紧邻第1块212的第2块214的行。例如,可以将第2块214的第1行213加载到存储器150的第33行。类似地,在第1块行210中的所有块的所有行被加载到存储器150(例如,存储器150的第1行001至第256行256)之后,可以从存储器150的第257行将第2块行220加载到存储器150。类似地,可以从存储器150的第513行将第3块行230加载到存储器150。如图2所示,当数据被加载到存储器150时,数据可以被划分成更小的片段,并且每个片段可以被加载到存储器150的每一行。
51.根据本公开的一些实施例,输出数据也可以以类似于将输入数据加载到存储器150中的方式存储在存储器150中。在一些实施例中,输出数据240可以是对属性数据的某个运算(例如,向量运算)的结果。如图2所示,输出数据也可以被分解成更小的片段,并且每个片段可以从指定的行存储在存储器150中。根据一些实施例,向量加速单元140可以不同时生成整个输出数据(例如,正如240所示的那样),因为如上所述,向量加速单元140可以处理的数据大小受到限制。在一些实施例中,向量加速单元140可以生成具有单位数据大小的输出数据,单位数据大小的输出数据适于每次存储在一行中。因此,输出数据可以逐行顺序地存储在存储器150中。应当理解的是,输出数据可以是可用于后续运算的中间结果数据。
52.根据本公开的一些实施例,如图2所示,通过配置存储器150,数据按每次可在向量加速单元140中处理的单位数据大小存储,致使向量或矩阵运算的执行效率得以提高。此外,可以理解的是,由于输出数据或中间数据以单位数据大小存储在存储器150中,因此消耗输出数据或中间数据的后续运算的执行效率也可以得以提高。
53.图3示出根据本公开实施例的示例性向量处理单元结构。如图3所示,向量处理单元141可包括多个计算单元300、多个寄存器304、解码器305、环路控制器306、地址生成器307、数据加载单元308、存储单元309、标量寄存器310,等等。仅出于说明的目的,可在运行的向量处理单元141中使用的操作代码和指令的示例将在下面解释。
54.表1:示例性向量运算
[0055][0056][0057]
根据本公开的一些实施例,表1示出了表示可在向量处理单元141中执行的向量运算的示例性操作代码。表1还包括关于在哪里获得数据以执行相应的操作代码以及在执行
操作代码后在哪里存储结果数据的说明。在表1中,词语“mem_addr_src”、“mem_addr_dst”和“cmd”可以分别表示“源存储器地址”、“目标存储器地址”和“命令”。而且,在表1中,操作代码1至3表示向量

向量运算,操作代码4至7表示n个向量运算,操作代码8至10表示向量

标量运算或向量

立即数运算,操作代码11至13表示元素向量激活或累加运算,操作代码14表示向量填充运算,操作代码15表示向量重塑运算。
[0058]
表2:向量处理单元的示例性指令集
[0059][0060][0061]
表2示出了可在向量处理单元141中执行的示例性指令。在一些实施例中,根据从
命令队列160接收的指令,向量处理单元141可以执行任务。根据一些实施例,一条指令可以具有四个字的长度,并且每个字可以具有32位。在本例中,指令vpu_cfg_std表示为输入配置步长的指令。指令vpu_cfg_std的第一字定义指令类型、操作代码等。例如,某一指令的第一字的[1:0]中的最后两位可以指示指令类型。在本例中,最后两位00指示指令vpu_cfg_std,最后两位后面的[7:2]中下六位指示指令的操作代码,并且[8:8]中的一位指示静默响应标志。在一些实施例中,当[8:8]中的一位设置为1时,可以指示向量处理单元141不发送响应,因为主机系统(或cpu)不需要在计算之间处理响应,这使得能够提高总体性能。在本例中,[31:9]中的23个高位未使用。在指令vpu_cfg_std中,第二字定义第一输入数据的步长,第一输入数据例如是属性数据。例如,第一输入数据的步长1可以定义第一输入数据的模式,例如存储器150中输入数据的两个相邻行之间的距离。如果存储器150中的第1行、第3行和第5行用于第一输入数据,则步长1可以被定义为值2,值2定义两个相邻行之间的距离。类似地,第三字可以定义第二输入数据的步长,第四字可以定义输出数据的步长。
[0062]
指令vpu_cfg_loop表示用于配置要处理的向量的环路数和总环路数的指令。类似地,指令vpu_cfg_loop的第一字定义指令类型、操作代码等。在本例中,最后两位01指示指令vpu_cfg_loop,最后两位之后的[7:2]中下六位指示指令的操作代码,[8:8]中的一位指示静默响应标志。在本例中,[31:9]中的23个高位未使用。在指令vpu_cfg_loop中,第二字定义了环路数,所述环路数与指令vpu_sfg_std中定义的步长1相对应。在上述示例中,存储器150中的第1行、第3行和第5行用于输入数据1,最大环路数值可以设置为3。第三字可以定义要处理的向量的总数。例如,当三个向量被用于输入数据1并且三个向量被用于输入数据2时,第三字可以被设置为6。在本例中,如果有立即标量数用在由指令中的操作代码定义的向量运算中,第四字可以定义立即标量数。
[0063]
指令vpu_cfg_exc表示为相应的操作代码配置输入和输出地址的指令。在本例中,最后两位10指示指令vpu_cfg_exc,最后两位后面的[7:2]中下六位指示指令的操作代码,[8:8]中的一位指示静默响应标志。在本例中,[31:9]中的23个高位未使用。在指令vpu_cfg_exc中,第二字定义要从存储器150读出的输入数据1的存储器地址,第三字定义要从存储器150读出的输入数据2的存储器地址,并且第四字定义要存储的输出数据的存储器地址。
[0064]
指令vpu_response表示用于通知向量处理单元状态的指令。根据一些实施例,指令vpu_response可以具有一个字,并且任何信息都可以包括在指令中。例如,执行是否已经完成,执行是否成功或失败等都可以包含在指令中。如果执行失败,失败的原因也可以包含在指令中。例如,最后两位00可以指示执行成功,最后两位01可以指示失败的第一原因等。根据一些实施例,任何响应或状态都可以包括在指令vpu_response中。
[0065]
重新参考图3,向量处理单元141可以包括多个计算单元300(在图3中注释为pu)。尽管图3示出了两个计算单元300,但可以包括任意数目(大于两个)的计算单元300。例如,向量处理单元141可以包括8、16或32个处理单元。在一些实施例中,如参考编号314所示,计算单元300可以包括累加单元、加法单元、减法单元、乘法单元、指数函数(exp)单元、双曲正切函数(tanh)单元等中的至少一个。在一些实施例中,多个计算单元300可以具有彼此相同的结构。在一些实施例中,一个计算单元300可以在一个周期中执行输入矩阵的一个元素。因此,在一个示例中,包括32个处理单元,可以由32个处理单元300同时处理输入向量的32
个元素。
[0066]
根据一些实施例,向量处理单元141还可以包括命令加载单元316,命令加载单元316可以从命令队列160接收命令。为了便于说明,图3中示出了示例命令。在接收到的命令中,操作代码(例如,图3所示的操作码)可以在向量处理单元141的解码器305中被解码。在一些实施例中,解码器305可以确定要在向量处理单元141中执行的任务。例如,解码器305可以接收表1中的操作代码之一,并确定要在向量处理单元141中执行的操作。在一些实施例中,解码器305可以进一步确定哪个计算单元300将用于处理该操作。在一些实施例中,解码器305还可以确定数据加载类型或数据存储类型。在一些实施例中,解码器305可以识别要加载的数据是向量、标量数还是立即数。
[0067]
根据本公开的一些实施例,在所接收的命令中,步长和最大环路数值可以被转发到环路控制器。在一些实施例中,环路控制器306可以基于此确定如何从存储器150读出数据。例如,环路控制器306可以基于步长值确定模式,也可以基于用于读出输入数据或用于写回输出数据的最大环路数值来确定重复数。
[0068]
根据本公开的一些实施例,所确定的信息可以与来自命令加载单元316的第一源地址mem_addr_src1和第二源地址mem_addr_src2一起被转发到地址生成器307。在一些实施例中,基于接收到的信息,地址生成器307可以生成用于从存储器150加载输入数据1和输入数据2的地址。在一些实施例中,用于读出输入数据的所生成的地址可以被发送到数据加载单元308。在一些实施例中,地址生成器307可以在每个周期生成输入地址。根据一些实施例,目的地址mem_addr_dst可以从命令加载单元316转发到地址生成器307。地址生成器307还可以生成用于将输出数据存储到存储器150的地址。在一些实施例中,用于存储输出数据的所生成的地址可以被发送到存储单元309。
[0069]
根据一些实施例,数据加载单元308可以与存储器150通信以在存储器150的所述生成的地址处获得数据。在一些实施例中,数据加载单元308可以接收由解码器305确定的加载类型信息。根据本公开的一些实施例,数据加载单元308可以将加载类型信息转发到选择器303或相应的输入先进先出(first in first out,fifo)寄存器(例如,寄存器311和312)。
[0070]
根据本公开的一些实施例,向量处理单元141的选择器303可以从存储器150接收数据,并基于加载类型信息确定将接收到的数据发送到哪里。在一些实施例中,选择器303可以是多路复用器。例如,选择器303可以将输入数据1的向量数据发送到第一先进先出寄存器311,将输入数据2的向量数据发送到第二先进先出寄存器312,并将标量数发送到标量寄存器310。在一些实施例中,解码器305可以将立即数发送到标量寄存器310。
[0071]
根据一些实施例,加载到第一先进先出寄存器311、第二先进先出寄存器312和标量寄存器310的数据可以被转发到计算单元300。在一些实施例中,加载的数据可以存储在寄存器304中,并且可以被转发到计算单元300。寄存器304将在下文详细说明。在一些实施例中,计算单元300可以具有两个选择器301和302,并且每个选择器301和302可以基于操作代码确定要用于计算的数据。在一些实施例中,选择器301和302各自可以是多路复用器。例如,选择器301可以从寄存器304和对应的计算单元300的输出寄存器315接收数据,并确定在当前周期两者之中要使用的数据。选择器302可以从寄存器304和标量寄存器310接收数据,并确定在当前周期两者之中要使用的数据。根据本公开的一些实施例,如图3所示,计算
单元300可以具有两个输入端,每个输入端由选择器301或选择器302选择。
[0072]
如图3所示,计算单元300可以包括输出寄存器315,并且计算结果可以临时存储在输出寄存器315中。在一些实施例中,存储在输出寄存器315中的结果数据可用于以后周期中的计算。根据本公开的一些实施例,计算单元300的结果数据可以被转发到输出先入先出寄存器313。在一些实施例中,每个计算单元300可以具有其自己的输出先入先出寄存器313。
[0073]
根据一些实施例,向量处理单元141中的存储单元309可以接收输出数据的要存储在存储器141中的生成地址。在一些实施例中,存储单元309还可以从解码器305接收存储类型信息。根据一些实施例,存储类型信息可以包括是否将输出数据临时存储在寄存器304中以供以后使用或是否将输出数据存储在存储器150中的信息。在一些实施例中,存储单元309可以与存储器150和输出先入先出寄存器313共享加载类型信息和接收的地址信息。根据本公开的一些实施例,输出先入先出寄存器313可以基于由存储单元309接收的信息将输出数据转发到存储器150或寄存器304。
[0074]
根据本公开的一些实施例,如上所述,向量处理单元141可以包括多个寄存器304。在一些实施例中,每个计算单元300可以具有其对应的寄存器304。例如,当包括32个计算单元300时,向量处理单元141可以具有32个寄存器304。在一些实施例中,寄存器304可以具有用于对应计算单元300的输入数据的槽。在一些实施例中,寄存器304可以具有用于等待在后面的周期中使用的临时数据的附加槽。例如,附加槽可以存储要在以后的操作中使用的中间结果数据。
[0075]
在一些实施例中,向量处理单元141可以被配置为将多个计算单元300的输入数据从存储器150并行地加载到向量处理单元141。类似地,向量处理单元141可以被配置为将来自多个计算单元300的输出数据并行地存储到存储器150。根据本公开的一些实施例,向量处理单元141可进一步包括状态信令单元317,状态信令单元317向响应队列170发送状态信号,以指示处理某个指令或命令的状态。例如,解码器305、数据加载单元308、存储单元309或计算单元300的状态可以被发送到响应队列170。在一些实施例中,向量处理单元141可进一步包括错误处理单元318,如果有错误,错误处理单元318基于由状态信令单元317接收的状态信号来校正错误。例如,当来自数据加载单元308的状态信号指示由地址生成器307生成的某个地址不正确时,错误处理单元318可以将该错误通知系统以验证和校正地址。
[0076]
在一些实施例中,可以根据如下所述的数据流在向量处理单元141中执行向量运算。在一些实施例中,用于向量处理单元141的指令可以按顺序存储在命令队列160中。在一些实施例中,命令队列160可以是空的,并且这样的信号也可以被转发到向量处理单元141。当向量处理单元141准备好处理操作时或当向量处理单元141空闲时,向量处理单元141可以启用读信号,例如读信号cmd_fifo_rd,并接收指令。可以将接收到的指令加载到命令加载单元316中的命令寄存器。在接收到的指令中,可以将一个指令发送到解码器305。在一些实施例中,解码器305可以检测指令中的操作代码并选择要用于对应的操作代码的运算的计算单元300。在一些实施例中,命令加载单元316可以使数据从存储器150中由第一源地址mem_addr_src1和第二源地址mem_addr_src2定义的地址加载到寄存器304。基于加载的输入数据,每个计算单元300可以处理与指令中的操作代码相对应的运算。来自计算单元300的输出结果可以存储在对应的寄存器304或存储器150中。根据本公开的一些实施例,当向
量处理单元141完成对某个指令的处理时,向量处理单元141可以向响应队列170发送状态更新以指示某个指令的完成。
[0077]
图4示出根据本公开实施例的示例性矩阵乘法单元结构。如图4所示,矩阵乘法单元142可以包括控制器410、矩阵乘法算子420和累加器430。
[0078]
根据本公开的一些实施例,矩阵乘法单元142可以进一步包括用于访问存储器150的接口440。在一些实施例中,接口440可以是高级可扩展接口(advanced extensible interface,axi)。在一些实施例中,接口440可以包括第一接口440_1和第二接口440_2。在一些实施例中,第一接口440_1可被配置为访问并从存储器150读出权重数据或偏置。在一些实施例中,第二接口440_2可以被配置为从存储器150访问和读出属性数据以及将输出数据写回存储器150。在一些实施例中,第一接口440_1可以是主高级可扩展接口0,并且可以被配置为与从高级可扩展接口连接以获得权重数据。在一些实施例中,第二接口440_2可以是主高级可扩展接口1,并且可以被配置为与从高级可扩展接口连接以获得属性数据。
[0079]
根据本公开的一些实施例,矩阵乘法单元142可以进一步包括先入先出接口450,先入先出接口450被配置为与命令队列160和响应队列170通信。在一些实施例中,先入先出接口450还可被配置为解码矩阵乘法指令并将命令分派到矩阵乘法单元142中的负责组件。为了便于说明,将参考表3讨论可在矩阵乘法单元142中使用的矩阵乘法指令。
[0080]
表3:用于矩阵乘法单元142的示例性指令集
[0081]
[0082][0083]
表3示出了可以在矩阵乘法单元142中执行的示例性指令。在一些实施例中,矩阵乘法单元142可以根据从命令队列160接收的指令执行任务。根据一些实施例,一条指令可以具有两个字的长度,并且每个字可以具有32位。在本例中,指令gemm_init表示指定高级可扩展接口突发业务的信息或配置的指令。指令gemm_init的第一字定义指令类型、操作代码等。例如,某一指令的第一字的[5:0]中的最后五位可以指示指令类型和操作代码。在本例中,最后五位00000表示指令gemm_init_weight,指令gemm_init_weight指示准备从存储器150加载权重数据。类似地,最后五位00001表示指令gemm_init_attribute,指令gemm_init_attribute指示准备从存储器150加载属性数据。最后五位00010可以表示指令gemm_init_bias,指令gemm_init_bias指示准备加载偏置数据,并且,最后五位00011表示指令gemm_init_acc,指令gemm_init_acc指示准备将累积结果数据存储到存储器150。作为准备,矩阵乘法单元142可以在矩阵乘法单元142上配置寄存器以加载数据,或者矩阵乘法单元142可以通知对应的存储设备以准备存储来自矩阵乘法单元142的数据。在本例中,[31:6]中的26个高位未使用。在指令gemm_init中,第二个字在[15:0]中定义突发长度以及在[31:16]中定义突发大小,以同时加载数据或同时存储数据。在一些实施例中,8位可用于突发长度,3位可用于突发大小。
[0084]
指令gemm_rw可以表示指定权重数据、属性数据、偏置数据或累加结果数据的高级可扩展接口读/写业务的起始地址的指令。指令gemm_rw的第一字定义指令类型、操作代码等。在本例中,最后五位00100表示指令gemm_read_weight,指令gemm_read_weight指示从存储器150读出权重数据。类似地,最后五位00101表示指令gemm_read_attribute,指令gemm_read_attribute指示从存储器150读出属性数据。最后五位00110可以表示指令gemm_read_bias,指令gemm_read_bias指示读出偏置数据,并且,最后五位00111表示指令gemm_read_acc,指令gemm_read_acc指示将累加结果数据写入存储器150。在本例中,未使用[31:6]中的26个高位。在指令gemm_rw中,第二字定义在[31:0]中用于读出数据或写入数据的起始地址。
[0085]
指令gemm_start可以表示启动矩阵乘法运算的指令。指令gemm_start的第一字定
义指令类型、操作代码等。在本例中,最后五位1xxxx可以表示操作代码,所述操作代码指示开始处理矩阵乘法运算。在本例中,位[0]可以定义信息以将部分结果存储在累加器缓冲器中而不写回存储器150。类似地,当置位(例如,位[1]被设置为1)时,位[1]可以定义清除累加器缓冲器的信息,当置位时,位[2]可以定义启动累加结果的矩阵修正线性单元运算的信息,并且当置位时,位[3]可以定义加载偏置的信息。在本例中,没有使用[31:6]中的26个高位。在指令gemm_start中,第二字定义要在矩阵乘法单元142上计算的总块数。
[0086]
指令gemm_finish表示指示一个矩阵乘法运算结束的指令。根据一些实施例,指令gemm_finish可以具有一个字,并且关于执行结果的任何信息可以包括在指令中。例如,最后一位可以表示执行已经完成。在一些实施例中,执行是否成功或失败等也可以包括在指令中。如果执行失败,也可以在指令中包含失败的原因。根据一些实施例,任何响应或状态都可以包括在指令gemm_finish中。
[0087]
重新参考图4,矩阵乘法算子420可以包括多个矩阵乘法算子420_1和420_2。在一些实施例中,矩阵乘法算子420可以实现为脉动阵列。在一些实施例中,多个矩阵乘法算子420_1和420_2可以流水线方式并行操作。尽管图4中示出了两个乘法算子420_1和420_2,可以理解的是,在本公开的一些实施例中可以使用任意数量的矩阵乘法算子。将参考图5a和图5b详细说明矩阵乘法算子420的功能和操作。
[0088]
根据本公开的一些实施例,累加器430可以累加从多个矩阵乘法算子420接收的结果。在一些实施例中,控制器410可以被配置成根据数据流控制矩阵乘法单元142处理矩阵乘法单元142中的指令,这将参考图5b来解释。在一些实施例中,如图4所示,控制器410可以发送控制信号sacc_en和sacc_oen以启用或禁用累加器430。在一些实施例中,控制器410可以发送控制信号swt_sel以通知要加载的权重数据的矩阵乘法算子420。在一些实施例中,控制器410可以发送控制信号sgemm_done以通知先入先出接口450矩阵乘法运算的完成。
[0089]
图5a示出了示例性矩阵乘法运算,为了说明的目的,在解释矩阵乘法单元142中的数据流时将使用所述示例性矩阵乘法运算。如图5a所示,矩阵乘法运算计算属性矩阵a与权值矩阵w之间的矩阵乘法,并生成输出数据o。在本例中,属性矩阵a包括四个块a0至a3,每个块的大小为16
×
32,且权重矩阵w包括四个块w0至w3,每个块的大小为32
×
16。因此,输出数据o的大小为16
×
16。在本例中,图5a所示的矩阵乘法运算可以是一个矩阵乘法运算的第一矩阵乘法运算,所述一个矩阵乘法运算是属性矩阵a和其一半对应于权重矩阵w的权重矩阵之间的矩阵乘法。因此,为了完成整个矩阵乘法运算,可以执行如图5a所示的第一运算以及所述权重矩阵的后半部分矩阵的第二运算。这里,所述权重矩阵的后半部分矩阵可以具有与权重矩阵w相同的大小。
[0090]
在一些实施例中,矩阵乘法单元142可以计算大小为(n,k*(2*n))的矩阵1和大小为(k*(2*n),n)的矩阵2的矩阵乘法。这里,n是设计相关参数并且可以根据在矩阵乘法单元142上实现的硬件大小(例如,矩阵乘法算子420的维度大小)来确定,k是工作负载参数(例如,用于某一运算的输入数据大小)并且可以从矩阵乘法指令中获得。根据在硬件中实现的多个矩阵乘法算子420,矩阵大小(例如,(n,k*(2*n))或(k*(2*n),n))中的分量2*n可以设置为2
n
*n。这里,索引n可以是在硬件中实现的矩阵乘法算子(例如,脉动阵列)的对数。在一个示例中,如图4所示,有两个矩阵乘法算子420_1和420_2,索引n等于1。
[0091]
根据本公开的一些实施例,图5b示出了在矩阵乘法单元142处理图5a的第一矩阵
乘法运算时的示例性数据流。根据一些实施例,矩阵乘法指令可以按顺序存储在命令队列160中。在一些实施例中,命令队列160可以是空的,并且这样的信号也可以被转发到矩阵乘法单元142。在一些实施例中,当矩阵乘法单元142准备好处理运算时或当矩阵乘法单元142空闲时,矩阵乘法单元142可以通过控制器410和先入先出接口450使信号scmd_fifo_rd能够从命令队列160获得指令。根据本公开的一些实施例,在接收到指令之后,先入先出接口450可以解码操作代码,并且解码的信息可以存储在矩阵乘法单元142上的内部寄存器(图中未示出)中。根据本公开的一些实施例,如果接收到指令gemm_start,则可以暂停接收新指令。在一些实施例中,从乘法运算指令中,矩阵乘法单元142可以具有用于处理相应矩阵乘法运算的信息。在本例中,指令gemm_start可以是执行整个矩阵乘法运算的指令,整个矩阵乘法运算包括图5a所示的第一矩阵乘法运算和第二矩阵乘法运算。在一些实施例中,可以首先处理第一矩阵乘法运算,然后处理第二矩阵乘法运算。
[0092]
根据本公开的一些实施例,为了处理第一矩阵乘法运算,可以首先执行数据传输。根据本公开的一些实施例,当第一矩阵乘法运算使用偏置数据时,可以开始从存储器150读取偏置数据。在一些实施例中,可以从矩阵乘法指令获得用于加载数据的地址、突发长度和突发大小的信息。在一些实施例中,从存储器150读取的偏置数据可以存储在累加器缓冲器431的每一行中。根据本公开的一些实施例,在完成加载偏置数据之后,第一接口440_1可以开始从存储器150加载权重数据。类似地,第二接口440_2可以比权重数据晚一个块开始加载属性数据。在一些实施例中,不使用偏置数据,第一接口440_1可以开始读取权重数据,并且在一个块之后,第二接口440_2可以开始读取属性数据。
[0093]
根据本公开的一些实施例,再次参考图4和图5b,权重矩阵w和属性矩阵a可以加载到矩阵乘法单元142以进行矩阵乘法。在一些实施例中,权重矩阵w的第一权重块w0可以例如经由分段先入先出寄存器401加载到矩阵乘法单元142,然后一个块之后,属性矩阵a的第一属性块a0可以例如经由分段先入先出寄存器402加载到矩阵乘法单元142。在一些实施例中,在第一周期中,第一权重块w0可以被加载到图4中矩阵乘法单元142上的第一矩阵乘法算子420_1(例如,脉动阵列),并且,在第二周期中,第一属性块a0可以加载到第一矩阵乘法算子420_1。在第三周期中,第一矩阵乘法算子420_1可以计算第一权重块w0和第一属性块a0之间的矩阵乘法,并且可以生成第一输出块o0。
[0094]
同时,矩阵乘法单元142上的第二乘法算子420_2可以计算第二权重块w1和第二属性块a1之间的矩阵乘法。在第二周期中,当通过第二接口440_2加载第一属性块a0时,第二权重块w1可以通过第一接口440_1加载到第二矩阵乘法算子440_2。类似地,在第三周期中,当第一矩阵乘法算子420_1在计算中时,第二属性块a1经由第二接口440_2被加载到第二矩阵乘法算子420_2。在第四周期中,第二矩阵乘法算子420_2可以计算第二权重块w1和第二属性块a1之间的矩阵乘法,并且可以生成第二输出块o1。
[0095]
类似地,在第五周期,第一矩阵乘法算子420_1可以计算第三权重块w2和第三属性块a2之间的矩阵乘法,并且可以生成第三输出块o2。类似地,第四输出块o3可以在第六周期中由第二矩阵乘法算子420_2产生。如上所述,根据本公开的一些实施例,矩阵乘法单元142使得能够以流水线方式顺序和并行地处理矩阵乘法运算而不浪费资源。在一些实施例中,矩阵乘法单元142可以使用乒乓缓冲器来存储权重数据,使得权重数据切换可以被流水线化,而不中断矩阵乘法运算的流水线执行。
[0096]
根据本公开的一些实施例,矩阵乘法算子420的输出结果可以按照生成顺序被顺序发送到累加器430。在上面的示例中,可以从第三周期到第六周期将第一输出块o0到第四输出块o3发送到累加器430。在一些实施例中,累加器430可以开始累加接收的输出块。例如,在第三周期和第四周期中第一输出块o0和第二输出块o1分别被发送到累加器430,累加器430可以在第四周期中执行第一输出块o0和第二输出块o1之间的累加。类似地,在第五周期中累加器430可以执行第三输出块o2和部分输出块之间的累加,所述部分输出块是第一输出块o0和第二输出块o1的总和。类似地,在第六周期中累加器430可以执行第四输出块o3和部分输出块之间的累加,所述部分输出块是第一输出块o0、第二输出块o1和第三输出块o2的总和,并且可以生成最终输出块o。在一些实施例中,偏置数据存储在累加器缓冲器431中,可将偏置数据加到最终输出块o。在一些实施例中,累加器430的累加器缓冲器431可将累加输出延迟一个块,以进一步确保在矩阵乘法单元142上正确地并行处理矩阵乘法运算。例如,正如图5b所示的那样,累加器430的最终输出块o可以在第七周期输出。
[0097]
根据本公开的一些实施例,当来自累加器430的输出结果是部分结果时,第二接口440_2可以不开始将输出结果写回到存储器150,而可以将输出结果存储在累加器缓冲器431中。在上述示例中,在第五周期和第六周期中生成的部分输出块不被写回存储器150,而是被存储在累加器缓冲器431中来供以后使用。根据一些实施例,当来自累加器430的输出结果不是部分结果而是对应累加运算的最终结果时,第二接口440_2可以开始将输出结果写回存储器150,并且在完成写回之后清空累加器缓冲器431。在本例中,在第七周期中生成的最终输出块o可以被写回存储器150,并且累加器缓冲器431可以被清空。
[0098]
根据本公开的一些实施例,在完成第一矩阵乘法运算之后,可以自动启动第二矩阵乘法运算的处理。在一些实施例中,第二矩阵乘法运算可以使用与图5b所示的第一矩阵乘法运算相同的属性数据以及(如果有的话)偏置数据,并且第二矩阵乘法运算可以使用不同的权重数据集。在本例中,计算第二矩阵乘法运算的处理可以类似于上述的第一矩阵乘法运算的处理。应当注意,不需要加载偏置数据,因为与第一矩阵乘法运算的偏置数据相同的偏置数据可以用于第二矩阵乘法运算,并且所述偏置数据已经加载在累加器缓冲器431中以处理第一矩阵乘法运算。在本例中,用于新的权重数据集的地址可以具有步长值,所述步长值可以表示与用于第一矩阵乘法运算的第一权重数据集的距离。要加载的属性数据的地址和要存储的输出数据的地址可以与第一矩阵乘法运算的地址保持不变。
[0099]
根据本公开的一些实施例,在矩阵乘法单元142完成第二矩阵乘法运算的处理之后,运算结果数据可以被写回存储器150,并且矩阵乘法单元142可以向响应队列170发送状态更新以指示某一运算的完成。
[0100]
根据一些实施例,当矩阵乘法单元142准备好处理运算时或当矩阵乘法单元142空闲时,可以重复类似于如上所述的处理第一矩阵乘法运算和第二矩阵乘法运算的数据处理。在一些实施例中,可以重复这样的矩阵乘法运算。
[0101]
图6示出了根据本公开实施例的用于处理向量运算或矩阵运算的示例性方法。方法600的步骤可以由神经网络加速器(例如,图1a的神经网络加速器100)执行,或者可以至少部分地在神经网络加速器核(例如,图1b的向量加速单元140)上执行。为了说明的目的,将参考图1b的向量加速单元140来说明用于处理向量运算或矩阵运算的方法。
[0102]
在步骤s610中,可以分割输入数据并存储输入数据在存储器(例如,图1b的存储器
150)中。在一些实施例中,输入数据可以被划分为多个数据段,并且每个数据段可以被存储在存储器150的多个行的对应行中。在一些实施例中,存储器150的多个行中的每一行可以具有可由向量处理单元141的多个计算单元或由矩阵乘法单元142同时处理的大小。已经参考图2描述了输入数据的划分和存储,因此为了简单起见,这里将省略其详细说明。
[0103]
在步骤s620中,将存储在存储器中的数据段提供给向量处理单元或矩阵乘法单元。在一些实施例中,提供给向量处理单元141的数据段可以是存储在存储器150的多个行中一行的数据段。在一些实施例中,提供给矩阵乘法单元142的数据段可以是存储在存储器150的多个行中一行或多行中的数据块。
[0104]
在步骤s630中,对在步骤s620中提供的数据段执行向量运算或乘法运算。在一些实施例中,向量处理单元141可以对数据段执行向量运算。在一些实施例中,可以将存储在存储器150的另一行的另一个数据段提供给向量处理单元141,并且向量处理单元141可以基于两个数据段执行向量运算。在一些实施例中,矩阵乘法单元142可以对数据段执行矩阵运算。在一些实施例中,数据段可以是用于执行矩阵乘法运算的属性数据、偏置数据或权重数据。已经参照图3至图5b说明了由向量处理单元141执行的向量运算和由矩阵乘法单元142执行的矩阵乘法运算,因此为了简单起见,这里将省略其详细说明。
[0105]
在步骤s640中,可以存储向量运算或矩阵运算的输出数据。在一些实施例中,向量运算或矩阵乘法运算的输出数据可以存储在存储器150中。在一些实施例中,向量运算或矩阵乘法运算的输出数据是中间结果,所述输出数据可以存储在向量处理单元141上的寄存器304或矩阵乘法单元142上的累加器缓冲器431中。在一些实施例中,向量运算的输出数据可以是输出向量,并且所述输出向量可以存储在存储器150的多个行的一行中。在一些实施例中,矩阵乘法运算的输出数据可以是输出矩阵,并且所述输出矩阵可以存储在存储器150的多个行的一个或多个行中。在一些实施例中,存储在存储器150的输出数据可由向量处理单元141或矩阵乘法单元142访问以供以后使用。
[0106]
可以使用以下权利要求进一步描述实施例:
[0107]
1.一种用于处理向量或矩阵运算的加速器,包括:
[0108]
向量处理单元,包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;
[0109]
矩阵乘法单元,包括第一矩阵乘法算子、第二矩阵乘法算子和累加器,所述第一矩阵乘法算子和所述第二矩阵乘法算子具有被配置为处理矩阵运算的电路,所述累加器具有被配置为累加所述第一矩阵乘法算子和所述第二矩阵乘法算子的输出结果的电路;以及
[0110]
存储器,用于存储向量运算或矩阵运算的输入数据,所述存储器被配置为与所述向量处理单元和所述矩阵乘法单元通信。
[0111]
2.根据权利要求1所述的加速器,其中,所述多个计算单元中的每一个计算单元具有被配置为并行处理向量运算的元素计算的电路。
[0112]
3.根据权利要求1或2所述的加速器,其中,所述多个计算单元具有彼此相同的结构。
[0113]
4.根据权利要求1至3中任一个所述的加速器,其中,所述向量处理单元进一步包括多个寄存器,所述多个寄存器分别对应于所述多个计算单元。
[0114]
5.根据权利要求1至4中任一个所述的加速器,其中,所述向量处理单元或所述矩
阵乘法单元的输出数据存储在所述存储器中,并且所述向量处理单元或所述矩阵乘法单元被配置为访问所述存储器以使用所述输出数据。
[0115]
6.根据权利要求1至5中任一个所述的加速器,其中,所述存储器包括多个行,每一行被配置为存储可由所述多个计算单元同时处理的数据。
[0116]
7.根据权利要求6所述的加速器,其中,所述输入数据被划分为多个数据段,并且每个数据段被存储在所述多个行的对应行中。
[0117]
8.根据权利要求1至5中任一个所述的加速器,其中,所述第一矩阵乘法算子和所述第二矩阵乘法算子是脉动阵列。
[0118]
9.根据权利要求1至8中任一个所述的加速器,其中,所述输入数据包括权重矩阵和属性矩阵,所述第一矩阵算子被配置为在所述权重矩阵的第一权重块和所述属性矩阵的第一属性块被加载到所述第一矩阵乘法算子之后,计算所述第一权重块和所述第一属性块之间的第一矩阵乘法,在所述第一权重块被加载之后,所述第一属性块被加载。
[0119]
10.根据权利要求9所述的加速器,其中,所述第二矩阵乘法算子被配置为在所述第一矩阵乘法算子完成所述第一矩阵乘法的计算之后,计算所述权重矩阵的第二权重块和所述属性矩阵的第二属性块之间的第二矩阵乘法,并且,在所述第一属性块被加载到所述第一矩阵乘法算子时加载所述第二权重块,在所述第一矩阵算子计算所述第一矩阵乘法时加载所述第二属性块。
[0120]
11.根据权利要求10所述的加速器,其中,所述累加器被配置为:
[0121]
依次获取所述第一矩阵乘法的第一结果和所述第二矩阵乘法的第二结果;以及
[0122]
计算所述第一结果和所述第二结果的总和并且生成累加结果。
[0123]
12.根据权利要求11所述的加速器,其中,所述累加器包括累加器缓冲器,所述累加器缓冲器被配置为当所述累加结果是部分结果时存储所述累加结果。
[0124]
13.根据权利要求12所述的加速器,其中,所述输入数据还包括偏置数据,并且在所述第一权重块被加载到所述第一矩阵乘法算子之前,所述偏置数据被加载到所述累加器缓冲器。
[0125]
14.根据权利要求9

13中任一个所述的加速器,其中,所述矩阵乘法单元还包括第一接口和第二接口,所述第一接口被配置为加载所述权重矩阵,所述第二接口被配置为加载所述属性矩阵。
[0126]
15.根据权利要求9

14中任一个所述的加速器,其中,所述矩阵乘法单元还包括用于所述权重矩阵的乒乓缓冲器。
[0127]
16.根据权利要求9

15中任一个所述的加速器,其中,所述存储器包括多个行,每一行具有与所述第一属性块的行相同的大小。
[0128]
17.一种用于在加速器上处理向量或矩阵运算的方法,所述加速器包括:向量处理单元,包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;矩阵乘法单元,包括矩阵乘法算子,所述矩阵乘法算子具有被配置为处理矩阵运算的电路;以及存储器,用于存储向量运算或矩阵运算的输入数据,所述存储器包括多个行,每一行被配置为存储可由所述多个计算单元或所述矩阵乘法算子同时处理的数据,所述方法包括:
[0129]
将输入数据划分为多个数据段,并将每个数据段存储在所述多个行的对应行中;
[0130]
将存储在所述多个行的第一行中的第一数据段提供给所述向量处理单元或所述
矩阵乘法单元;以及
[0131]
由所述多个计算单元或由所述矩阵乘法算子对所述第一数据段同时地执行向量运算或矩阵运算。
[0132]
18.根据权利要求17所述的方法,所述方法还包括:
[0133]
将存储在所述多个行的第二行中的第二数据段提供给所述向量处理单元;以及
[0134]
其中,执行向量运算包括由所述多个计算单元同时对所述第一数据段和所述第二数据段执行向量运算。
[0135]
19.根据权利要求17或18所述的方法,其中,执行向量运算包括由所述多个计算单元并行地处理所述向量运算的元素计算。
[0136]
20.根据权利要求17至19中任一个所述的方法,所述方法还包括:
[0137]
将所述向量处理单元的输出向量存储在所述多个行的第三行中。
[0138]
21.根据权利要求17所述的方法,其中,所述输入数据包括权重矩阵和属性矩阵,所述矩阵乘法算子包括第一矩阵乘法算子和第二矩阵乘法算子,以及
[0139]
其中,提供所述第一数据段包括:
[0140]
向所述第一矩阵乘法算子提供所述权重矩阵的第一权重块,所述第一权重块包括所述第一数据段;
[0141]
向所述第一矩阵乘法算子提供所述属性矩阵的第一属性块;和
[0142]
其中,执行向量运算包括通过所述第一矩阵乘法算子在所述第一权重块和所述第一属性块之间执行第一矩阵乘法。
[0143]
22.根据权利要求21所述的方法,所述方法还包括:
[0144]
当所述第一属性块被提供给所述第一矩阵乘法算子时,将所述权重矩阵的第二权重块提供给所述第二矩阵乘法算子;
[0145]
当所述第一矩阵乘法算子执行所述第一矩阵乘法时,将所述属性矩阵的第二属性块提供给所述第二矩阵乘法算子;和
[0146]
通过所述第二矩阵乘法算子执行所述第二权重块和所述第二属性块之间第二矩阵乘法。
[0147]
23.根据权利要求22所述的方法,其中,所述矩阵乘法单元还包括累加器,所述方法还包括:
[0148]
将所述第一矩阵乘法的第一结果和所述第二矩阵乘法的第二结果顺序地提供给所述累加器;
[0149]
执行所述第一结果和所述第二结果的求和,并生成累加结果。
[0150]
24.根据权利要求23所述的方法,其中,所述累加器包括累加器缓冲器,所述方法还包括:
[0151]
当所述累加结果是部分结果时,将所述累加结果存储在所述累加器缓冲器中。
[0152]
25.根据权利要求24所述的方法,其中,所述输入数据还包括偏置数据,所述方法还包括:
[0153]
在所述第一权重块被提供给所述第一矩阵乘法算子前,将所述偏置数据提供给所述累加器缓冲器。
[0154]
26.根据权利要求23所述的方法,所述方法还包括:将所述累加结果存储在所述存
储器中。
[0155]
27.一种非瞬时性计算机可读介质,所述非瞬时性计算机可读介质存储可以由计算装置的至少一个处理器执行的指令集,以使得所述计算装置执行用于处理向量或矩阵运算的方法,所述计算装置包括:向量处理单元,包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;矩阵乘法单元,包括矩阵乘法算子,所述矩阵乘法算子具有被配置为处理矩阵运算的电路;存储器,用于存储向量运算或矩阵运算的输入数据,所述存储器包括多个行,每个行被配置为存储可以由所述多个计算单元或由所述矩阵乘法算子同时处理的数据,所述方法包括:
[0156]
将输入数据划分为多个数据段,并将每个数据段存储在所述多个行的对应行中;
[0157]
将存储在所述多个行的第一行中的第一数据段提供给所述向量处理单元或所述矩阵乘法单元;以及
[0158]
由所述多个计算单元或由所述矩阵乘法算子对所述第一数据段同时地执行向量运算或矩阵运算。
[0159]
28.根据权利要求27所述的计算机可读存储介质,其中,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0160]
将存储在所述多个行的第二行中的第二数据段提供给所述向量处理单元;和
[0161]
由所述多个计算单元同时对所述第一数据段和所述第二数据段执行向量运算。
[0162]
29.根据权利要求27或28所述的计算机可读存储介质,其中,执行向量运算包括由所述多个计算单元并行地处理所述向量运算的元素计算。
[0163]
30.根据权利要求27至27中任一个所述的计算机可读存储介质,其中,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0164]
将所述向量处理单元的输出向量存储在所述多个行的第三行中。
[0165]
31.根据权利要求27所述的计算机可读存储介质,其中,所述输入数据包括权重矩阵和属性矩阵,所述矩阵乘法算子包括第一矩阵乘法算子和第二矩阵乘法算子,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0166]
向所述第一矩阵乘法算子提供所述权重矩阵的第一权重块,所述第一权重块包括所述第一数据段;
[0167]
向所述第一矩阵乘法算子提供所述属性矩阵的第一属性块;和
[0168]
通过所述第一矩阵乘法算子执行所述第一权重块和所述第一属性块之间的第一矩阵乘法。
[0169]
32.根据权利要求31所述的计算机可读存储介质,其中,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0170]
当所述第一属性块被提供给所述第一矩阵乘法算子时,将所述权重矩阵的第二权重块提供给所述第二矩阵乘法算子;
[0171]
当所述第一矩阵乘法算子执行所述第一矩阵乘法时,将所述属性矩阵的第二属性块提供给所述第二矩阵乘法算子;和
[0172]
通过所述第二矩阵乘法算子执行所述第二权重块和所述第二属性块之间的第二矩阵乘法。
[0173]
33.根据权利要求32所述的计算机可读存储介质,其中,所述矩阵乘法单元还包括
累加器,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0174]
将所述第一矩阵乘法的第一结果和所述第二矩阵乘法的第二结果顺序地提供给所述累加器;和
[0175]
执行所述第一结果和所述第二结果的求和,并生成累加结果。
[0176]
34.根据权利要求33所述的计算机可读存储介质,其中,所述累加器包括累加器缓冲器,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0177]
当所述累加结果是部分结果时,将所述累加结果存储在所述累加器缓冲器中。
[0178]
35.根据权利要求34所述的计算机可读存储介质,其中,所述输入数据还包括偏置数据,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0179]
在所述第一权重块被提供给所述第一矩阵乘法算子之前,将所述偏置数据提供给所述累加器缓冲器。
[0180]
36.根据权利要求33所述的计算机可读存储介质,其中,所述可以由计算装置的至少一个处理器执行的指令集还使得所述计算装置执行:
[0181]
将所述累加结果存储在所述存储器中。
[0182]
37.一种装置,包括:
[0183]
主机单元;
[0184]
加速器,所述加速器与所述主机单元通信耦合,所述加速器包括:
[0185]
向量处理单元,包括多个计算单元,所述计算单元具有被配置为并行处理向量运算的电路;
[0186]
矩阵乘法单元,包括第一矩阵乘法算子、第二矩阵乘法算子和累加器,所述第一矩阵乘法算子和所述第二矩阵乘法算子具有被配置为处理矩阵运算的电路,所述累加器具有被配置为累加所述第一矩阵乘法算子和所述第二矩阵乘法算子的输出结果的电路;以及
[0187]
存储器,用于存储向量运算或矩阵运算的输入数据,所述存储器被配置为与所述向量处理单元和所述矩阵乘法单元通信。
[0188]
在一些实施例中,还提供了包括指令的非瞬时性计算机可读存储介质,并且所述指令可以由用于执行上述方法的设备(例如所公开的编码器和解码器)执行。非瞬时性介质的常见形式包括,例如软盘、软磁盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、cd

rom、任何其他光学数据存储介质、任何具有孔图案的物理介质、ram、prom和eprom、闪存

eprom或任何其他闪存、nvram、高速缓存、寄存器、任何其他存储器芯片或盒式存储器,以及它们的网络版本。所述设备可以包括一个或多个处理器(cpu)、输入/输出接口、网络接口和/或存储器。
[0189]
应当注意,这里的相关术语例如“第一”和“第二”仅用于将一个实体或操作与另一个实体或操作区分开来,并且不要求或说明这些实体或操作之间的任何实际关系或顺序。而且,此外,“具有”、“包含”和“包括”等词和其他类似形式的含义是等同的,并且是开放式的,因为在这些词中任何一个之后的一个或多个项目并不意味着详尽列出这些项目,也不意味着仅限于所列出的一个或多个项目。
[0190]
如本文所用,除非另有特别说明,术语“或”包括所有可能的组合,除非在不可行的情况下。例如,如果说明数据库可以包括a或b,则除非另有具体说明或不可行,否则数据库可以包括a或b,或a和b。作为第二示例,如果说明数据库可以包括a、b或c,则除非另有具体
说明或不可行,否则数据库可以包括a,或b,或c,或a和b,或a和c,或b和c,或a和b和c。
[0191]
可以理解,上述实施例可以通过硬件或软件(程序代码)或硬件和软件的组合来实现。如果通过软件实现,则可以将其存储在上述计算机可读介质中。当由处理器执行时,该软件可以执行所公开的方法。本公开中描述的计算单元和其他功能单元可以通过硬件或软件或硬件和软件的组合来实现。本领域普通技术人员还将理解,上述模块/单元中的多个模块/单元可组合为一个模块/单元,并且上述模块/单元中的每一个可进一步划分为多个子模块/子单元。
[0192]
在前述说明书中,已经参考许多具体细节描述了实施例,这些具体细节可以随实施方式而变化。可以对所描述的实施例进行某些适配和修改。通过考虑本公开的说明和实践,其他实施例对本领域技术人员来说是显而易见的。本说明书和实施例仅被认为是示例性的,本发明的真正范围和精神由下面的权利要求书指示。图中所示的步骤序列仅用于说明目的,而不限于任何特定的步骤序列。因此,本领域技术人员可以理解,在实现相同方法时,可以以不同的顺序执行这些步骤。
[0193]
在附图和说明书中,已经公开了示例性实施例。然而,可以对这些实施例进行许多变化和修改。因此,虽然使用了具体的术语,但它们仅用于一般性和描述性的意义,而不是为了限制的目的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献