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

运算单元、相关装置和方法与流程

2022-09-02 19:23:06 来源:中国专利 TAG:


1.本公开涉及芯片领域,更具体而言,涉及一种运算单元、相关装置和方法。


背景技术:

2.深度神经网络(dnn)使用大量的矩阵和向量运算,例如矩阵和矩阵相乘,矩阵与向量相乘。深度神经网络具有多层节点,每个节点与前一层的节点连接,相当于接收前一层的节点的输出作为输入,与节点的权重矩阵进行运算(乘法、卷积等)。可以将深度神经网络的输出结果看作权重矩阵与输入的激励向量或激励矩阵的乘积。由于矩阵运算的计算量很大,为了降低计算强度和内存开销,提出了剪枝技术来去除dnn中的冗余连接,相当于将权重矩阵中大量对结果影响不大的元素变成0,为0的元素不用参加矩阵乘法运算,从而通过提高稀疏度来降低计算强度和内存开销。例如,稀疏度为30%的权重矩阵中有30%的元素是非0,只要计算这30%的元素与激励向量中相应元素的乘积并累加,就能得到最后结果。
3.在稀疏矩阵与激励向量相乘(稀疏矩阵与激励矩阵相乘可以化为稀疏矩阵与一个个激励向量相乘)中,一般需要3次加载。首先,需要到稀疏矩阵中加载未被剪枝的权重值(不为0的权重值)。对于被剪枝的元素值为0,不需要参与运算。然后,需要到稀疏矩阵中加载未被剪枝的权重的索引(不为0的权重的索引),这些索引就是激励向量中需要参与运算的有效元素的索引。激励向量中其它位置的索引处的元素对应于0的权重,相乘的结果仍然等于0,没有实际意义。接着,需要按照这些索引在激励向量中加载与这些索引对应的元素。这3次加载后,将激励向量中按索引选出的元素与稀疏矩阵中未被剪枝的权重的乘积累加,得到稀疏矩阵与激励向量的相乘结果。
4.由于上述3次加载需要3个不同指令,处理单元需要频繁取指令和译码,处理开销大,速度慢。现代处理单元,尤其是低功耗处理单元,通常具有有限取指宽度,加载所用的缓存空间不足。大量的上述指令严重影响运算效率和增大处理开销。


技术实现要素:

5.有鉴于此,本公开旨在提高上述稀疏矩阵相关运算中的运算效率,减少其处理开销。
6.根据本公开的一方面,提供了一种运算单元,包括:
7.指令缓存单元,用于接收索引与有效元素加载指令,所述索引与有效元素加载指令用于在稀疏矩阵与待相乘向量的乘法中,从所述待相乘向量中获取与稀疏矩阵中未剪枝元素对应的有效元素向量,所述索引与有效元素加载指令包括第一源地址、第二源地址和目的地地址,所述第一源地址表示所述稀疏矩阵中未剪枝元素索引的起始存储地址,所述第二源地址表示所述待相乘向量的起始存储地址,所述目的地地址表示所述有效元素向量要存放回的地址;
8.未剪枝元素索引读取单元,用于根据所述第一源地址读取未剪枝元素索引;
9.有效元素读取单元,用于根据所述第二源地址和读取的未剪枝元素索引,在所述
待相乘向量中读取用于与稀疏矩阵中未剪枝元素相乘的有效元素;
10.回存单元,用于将所述有效元素组装成有效元素向量,按照所述目的地地址存储。
11.可选地,所述有效元素读取单元将所述第二源地址和读取的未剪枝元素索引分别相加,得到各有效元素的存储地址,并按照所述存储地址读取所述有效元素。
12.可选地,所述指令缓存单元还用于接收未剪枝元素值加载指令,所述未剪枝元素值加载指令在稀疏矩阵与待相乘向量的乘法中,获取所述稀疏矩阵中的未剪枝元素值,所述未剪枝元素值加载指令包括第三源地址,所述第三源地址表示所述未剪枝元素值的起始存储地址;所述运算单元还包括:未剪枝元素值读取单元,用于根据所述目的地地址,读取所述未剪枝元素值。
13.可选地,所述指令缓存单元还用于接收向量乘法指令,所述向量乘法指令在稀疏矩阵与待相乘向量的乘法中,基于所述未剪枝元素值与所述有效元素向量,得到稀疏矩阵与待相乘向量的相乘结果向量;所述运算单元还包括:相乘结果向量获取单元,用于通过所述未剪枝元素值与所述有效元素向量中有效元素的乘法,得到所述相乘结果向量。
14.可选地,所述第一源地址包括第一基源地址,所述第二源地址包括第二基源地址。
15.可选地,所述第一源地址包括第一基源地址和第一立即数,所述第二源地址包括第二基源地址和第二立即数;所述未剪枝元素索引读取单元根据所述第一基源地址和所述第一立即数的和得到的地址,来读取未剪枝元素索引;所述有效元素读取单元根据所述第二基源地址和所述第二立即数的和得到的地址、以及读取的未剪枝元素索引,在所述待相乘向量中读取所述有效元素。
16.可选地,所述第一源地址包括第一基源地址和第一系数,所述第二源地址包括第二基源地址和第二系数;所述未剪枝元素索引读取单元根据所述第一系数、向量长度与向量中元素大小的积、以及所述第一基源地址的和得到的地址,来读取未剪枝元素索引;所述有效元素读取单元根据所述第二系数、向量长度与向量中元素大小的积、以及所述第二基源地址的和得到的地址、以及读取的未剪枝元素索引,在所述待相乘向量中读取所述有效元素。
17.可选地,所述第一源地址包括第一基源地址和第三系数,所述第二源地址包括第二基源地址和第四系数;所述未剪枝元素索引读取单元根据所述第三系数与向量中元素大小的积、以及所述第一基源地址的和得到的地址,来读取未剪枝元素索引;所述有效元素读取单元根据所述第四系数与向量中元素大小的积、以及所述第二基源地址的和得到的地址、以及读取的未剪枝元素索引,在所述待相乘向量中读取所述有效元素。
18.可选地,所述待相乘向量的元素分在紧耦合存储器中的多个存储体中存储,其中,允许并行访问所述多个存储体中的元素;所述稀疏矩阵中未剪枝元素索引按组存储,单个组中包含从所述稀疏矩阵中的多个行中各取出的一个未剪枝元素的索引,同一个组中的不同索引对应于所述紧耦合存储器的不同存储体。
19.可选地,所述多个行是从所述稀疏矩阵中按照行索引顺次取出的所述多个存储体的存储体数目个行。
20.可选地,所述未剪枝元素索引读取单元从所述第一源地址开始,读取一个组的未剪枝元素索引,并用第一源地址加上一个组的长度的和更新所述第一源地址。
21.可选地,所述有效元素向量在高速缓存组装,并从所述高速缓存按照所述目的地
地址移回所述运算单元所在的处理单元。
22.可选地,所述有效元素向量在所述紧耦合存储器组装,并从所述紧耦合存储器按照所述目的地地址移回所述运算单元所在的处理单元。
23.根据本公开的一方面,提供了一种处理单元,包括:
24.取指令单元,用于从存储器取出索引与有效元素加载指令;
25.指令译码单元,用于对取出的索引与有效元素加载指令进行译码;
26.如上所述的运算单元,用于接收并执行译码后的索引与有效元素加载指令。
27.根据本公开的一方面,提供了一种计算装置,包括:
28.存储器,用于存储所述索引与有效元素加载指令;
29.如上所述的处理单元。
30.根据本公开的一方面,提供了一种片上系统,包括如上所述的处理单元。
31.根据本公开的一方面,提供了一种数据中心,包括如上所述的计算装置。
32.根据本公开的一方面,提供了一种有效元素向量获取方法,所述有效元素向量是在稀疏矩阵与待相乘向量的乘法中,从所述待相乘向量中获取的与稀疏矩阵中未剪枝元素对应的有效元素组成的向量,所述方法包括:
33.接收索引与有效元素加载指令,所述索引与有效元素加载指令用于获取所述有效元素向量,所述索引与有效元素加载指令包括第一源地址、第二源地址和目的地地址,所述第一源地址表示所述稀疏矩阵中未剪枝元素索引的起始存储地址,所述第二源地址表示所述待相乘向量的起始存储地址,所述目的地地址表示所述有效元素向量要存放回的地址;
34.根据所述第一源地址读取未剪枝元素索引;
35.根据所述第二源地址和读取的未剪枝元素索引,在所述待相乘向量中读取用于与稀疏矩阵中未剪枝元素相乘的有效元素;
36.将所述有效元素组装成有效元素向量,按照所述目的地地址存储。
37.可选地,所述根据所述第二源地址和读取的未剪枝元素索引,在所述待相乘向量中读取用于与稀疏矩阵中未剪枝元素相乘的有效元素,包括:
38.将所述第二源地址和读取的未剪枝元素索引分别相加,得到各有效元素的存储地址;
39.按照所述存储地址读取所述有效元素。
40.可选地,所述待相乘向量的元素在紧耦合存储器中的多个存储体中存储,其中,允许并行访问所述多个存储体中的元素;所述稀疏矩阵中未剪枝元素索引按组存储,单个组中包含从所述稀疏矩阵中的多个行中各取出的一个未剪枝元素的索引,同一个组中的不同索引对应于所述紧耦合存储器的不同存储体。
41.可选地,所述多个行是从所述稀疏矩阵中按照行索引顺次取出的所述多个存储体的存储体数目个行。
42.可选地,所述根据所述第一源地址读取未剪枝元素索引,包括:从所述第一源地址开始,读取一个组的未剪枝元素索引,并用第一源地址加上一个组的长度的和更新所述第一源地址。
43.本公开实施例中,对于稀疏矩阵与激励向量相乘中的三次加载中的后两次加载(从稀疏矩阵中加载未被剪枝的权重的索引、按照该索引从激励向量中加载这些索引对应
的有效元素),用一个指令来执行。该指令中包含第一源地址、第二源地址、和目的地地址。第一源地址指示未剪枝元素索引的存储地址,而第二源地址指示激励向量的存储地址。根据第一源地址从稀疏矩阵中加载未被剪枝的权重的索引。根据第二源地址和上述索引从激励向量中加载索引对应的有效元素。再按照目的地地址回存。通过这样一个指令,达到同时执行上述三次加载中的后两次加载的目的。相比于现有技术三条指令执行三条加载,本公开实施例大大提高了上述稀疏矩阵与激励向量的乘法运算中的运算效率,减少了处理开销。
附图说明
44.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
45.图1是本公开一个实施例所应用的数据中心的结构图;
46.图2是本公开一个实施例的数据中心中一个服务器的内部结构图;
47.图3是根据本公开一个实施例的作为指令执行单元的运算单元的内部结构图;
48.图4是根据本公开一个实施例的紧耦合存储器(tcm)按存储体存储待相乘向量中的元素的示意图;
49.图5a是根据本公开一个实施例的根据稀疏矩阵中的未剪枝元素索引从待相乘向量中加载有效元素的示意图;
50.图5b是根据本公开另一个实施例的根据稀疏矩阵中的未剪枝元素索引从待相乘向量中加载有效元素的示意图;
51.图6a是本公开一个实施例中按照未剪枝元素值加载指令获取的稀疏矩阵中的未剪枝元素值的示意图;
52.图6b是本公开一个实施例中按照索引与有效元素加载指令的第一源地址读取的各组未剪枝元素索引的示意图;
53.图6c是本公开一个实施例中按照索引与有效元素加载指令的第二源地址和图6b得到的索引从待相乘向量加载有效元素的示意图;
54.图6d是本公开一个实施例中得到的有效元素向量的示意图;
55.图6e是本公开一个实施例中与图6b的未剪枝元素索引对应的未剪枝元素值的示意图;
56.图6f是本公开一个实施例中图6e所示的未剪枝元素组成的向量与
57.图6d所示的有效元素向量相乘的结果示意图;
58.图7是本公开实施例的各种寻址模式及对应的操作数情况列表;
59.图8是本公开实施例与现有技术相比在占用时钟周期数方面的比较直方图;
60.图9是根据本公开一个实施例的有效元素向量获取方法的流程图。
具体实施方式
61.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过
程、流程没有详细叙述。另外附图不一定是按比例绘制的。
62.在本文中使用以下术语。
63.深度神经网络(dnn):深度神经网络是机器学习领域中一个新的研究方向,它引入机器学习使其更接近于最初的目标——人工智能(ai)。深度神经网络学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。
64.权重:深度神经网络具有多层节点,每个节点与前一层的节点连接,相当于接收前一层的节点的输出作为输入,并对这些输入进行处理,产生输出到下一层的节点的输出,由于其输入包括前一层多个节点的输出,其输出又包括对下一层多个节点的不同输出,因此,其内部处理过程可以看作将前一层节点的输出乘以某个值(可能还要加上某个偏移量),输出到下一层节点的过程,该值叫做权重。由于输入输出不是单个数值,而是呈现向量或矩阵的形式(在单独一个时间点接收前一层的多个节点的输出可表示为一个向量,在不同时间点前一层的多个节点具有不同输出,因此可表示为矩阵),其输出也可以表示为向量或矩阵的形式(在单独一个时间点,向后一层多个节点的输出可表示为一个向量,在不同时间点这些输出又不同,因此可表示为矩阵)。因此,不同时间点对不同前一层节点的权重常常排列成矩阵的形式,即权重矩阵。
65.激励:当深度神经网络的各节点的权重训练好后,节点的真实输入叫做激励。其同一时间点接收的来自多个前一层节点的多个输入体现为激励向量,不同时间点接收的来自多个前一层节点的多个输入体现为激励矩阵。
66.稀疏矩阵:对矩阵中的元素作判断,如果该元素对整个矩阵的影响不大,则将其变成0,即剪枝,从而在与其它向量或矩阵进行乘法运算时,由于为0的元素实际上不用参加乘法运算,大大降低计算强度和内存开销。实践中,常常对上述权重矩阵作剪枝,即将对深度神经网络的运算结果影响不大的权重在权重矩阵中变成0。这样,在如上所述的权重矩阵与激励向量或激励矩阵相乘时,为0的权重不用进行乘法,从而降低计算强度和内存开销。
67.剪枝:即上述稀疏化过程中由于矩阵中某一元素不重要而变成0的过程。
68.稀疏度:矩阵被剪枝后未被剪枝的元素占矩阵所有元素的比率,例如10%的稀疏度表示矩阵中90%的元素都变成了0,只有10%的元素是非0的。
69.有效元素:由于稀疏矩阵与待相乘向量相乘的过程中,稀疏矩阵中的0元素不参与相乘,因此,待相乘向量中那些与稀疏矩阵中的0元素的索引对应的元素也不参加运算,因此看作是无效的。只有待相乘向量中那些与稀疏矩阵中的非0元素的索引对应的元素才参与运算,这部分元素叫做有效元素。
70.元素索引:元素的编号,通过元素索引唯一识别该元素,一般按照0、1、2
……
编制索引。
71.基地址:作为基础的地址。在寻址中一般按照基地址或在有偏移量的情况下按照基地址加上偏移量的结果地址来寻址。
72.向量长度:向量中包括的元素个数。一般系统自动配置。当配置好后,激励向量、稀疏矩阵中的行向量中的元素个数就是该向量长度。
73.元素大小:一般是元素占用的字节数。例如,用2个字节表示向量中的一个元素,元
素大小即为2字节。
74.紧耦合存储器(tcm):是一个固定大小的随机存储器(ram),紧密地耦合至处理器内核,提供与高速缓存相当的性能。它相比于高速缓存的优点是,程序代码可以精确地控制什么函数或代码放在其中的什么位置,因此,它会有一个被用户预设的性能,而不是象高速缓存那样性能受统计性能影响。
75.存储体(bank):紧耦合存储器中的一部分存储空间。一个紧耦合存储器分为多个存储体,不同存储体可以被并行访问,从而提高访问效率。
76.处理单元:进行传统处理(非用于图像处理和各种深度神经网络中的全连接运算等复杂运算的处理)的单元。处理单元可以采用中央处理器(cpu)、专用集成电路(asic)、现场可编程门矩阵(fpga)等多种形式。
77.片上系统(soc:system-on-a-chip):在单个芯片上集成的一个完整的系统,其对实现某一或某些功能所有或部分必要的电子电路进行包分组。所谓完整的系统一般包括中央处理器(cpu)、存储器、以及外围电路等。
78.本公开的应用环境
79.本公开实施例提出了一种在稀疏矩阵与待相乘向量的乘法中,从所述待相乘向量中获取与稀疏矩阵中未剪枝元素对应的有效元素向量的方法。这里的稀疏矩阵可以是权重矩阵。待相乘向量可以是激励向量。整个方案相对较为通用。例如,数据中心、需要进行稀疏矩阵与待相乘向量的乘法的普通计算机嵌入式设备、或者物联网(iot)设备,都可以适用。该方案与最终部署在的硬件环境无关。但为了示例性描述,下文中将主要以数据中心为应用场景进行描述。本领域技术人员应当理解,本公开实施例还可以适用于其它的应用场景。
80.数据中心
81.数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而深度学习作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。在深度学习中,涉及大量权重矩阵与激励向量的乘法运算,其中,权重矩阵大量被稀疏化以提高运算效率和减少开销。
82.在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:
83.服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。
84.接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(top of rack)交换机,它们物理连接服务器。
85.汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
86.核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为l3层路由网络和l2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的l3层路由网络。
87.通常情况下,汇聚交换机120是l2和l3层路由网络的分界点,汇聚交换机120以下
的是l2网络,以上是l3网络。每组汇聚交换机管理一个传送点(pod,point of delivery),每个pod内都是独立的vlan网络。服务器在pod内迁移不必修改ip地址和默认网关,因为一个pod对应一个l2广播域。
88.汇聚交换机120和接入交换机130之间通常使用生成树协议(stp,spanning tree protocol)。stp使得对于一个vlan网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。
89.服务器
90.图2示出图1的服务器140的一种示意性框图。如图2所示,本发明实施例的服务器140可以包括一个或多个处理器12、存储器14、l1高速缓存16、l2高速缓存15、tcm 17。
91.存储器14可以是主存储器(简称为主存或内存),用于存储由数据信号表示的指令信息和/或数据信息,例如存放处理器12提供的数据(例如为运算结果),也可以用于实现处理器12与外部存储设备(或称为辅助存储器或外部存储器)之间的数据交换。
92.在一些情形下,处理器12可能需要访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理器12与存储器14之间的速度差距,计算机系统10还包括与总线18耦合的高速缓存,即l1高速缓存16和l2高速缓存15。高速缓存用于对存储器14中的一些可能会被反复调用的程序数据或者报文数据等数据进行缓存。高速缓存可以是静态随机存储器(static random access memory,简称为sram)等类型的存储装置。图2的高速缓存分为l1高速缓存16和l2高速缓存15的层级结构,但实际上还可以是三级以上的缓存结构或其他类型缓存结构。图2虽然示出l1高速缓存16和l2高速缓存15在处理器12的外部,实际上它们也可以在处理器12的内部。
93.紧耦合存储器(tcm)17紧密地耦合至处理器内核,提供一种并行访问空间。紧耦合存储器(tcm)17中有多个存储体(bank),不同存储体可以被并行访问,从而提高访问效率。l1高速缓存16和l2高速缓存15无法并行访问。因此,在存放需要并行访问的数据时,可以将其放入tcm 17。本公开实施例中的激励向量需要被并行访问,以提高与稀疏矩阵的乘法运算效率,因此被放入tcm 17。
94.存储器14和高速缓存(l 1高速缓存16和l2高速缓存15)之间的信息交互通常按块来组织。在一些实施例中,高速缓存和存储器14可以按照相同的空间尺寸被划分成数据块,数据块可以作为高速缓存和存储器14之间的数据交换的最小单位(包括预设长度的一个或多个数据)。为了表述简洁清晰,下面将高速缓存中的各个数据块简称为缓存块,且不同的缓存块具有不同的缓存块地址;将存储器14中的各个数据块简称为内存块,且不同的内存块具有不同的内存块地址。缓存块地址例如包括用于定位数据块的物理地址标签。
95.由于受到空间和资源的限制,高速缓存无法对存储器14中的全部内容都进行缓存,即高速缓存的存储容量通常小于存储器14,高速缓存提供的各个缓存块地址无法对应存储器14提供的全部内存块地址。处理器12在需要访问内存时,首先经总线18访问高速缓存,以判断所要访问的内容是否已被存储于高速缓存中,如果是,则高速缓存命中,此时处理器12直接从高速缓存中调用所要访问的内容。如果处理器12需要访问的内容不在高速缓存中,则处理器12需要经总线11访问存储器14,以在存储器14中查找相应的信息。因为高速缓存的存取速率非常快,因此当高速缓存命中时,处理器12的效率可以显著提高,进而也使
整个服务器140的性能和效率得以提升。
96.处理器
97.如图2所示,每个处理器12可以包括用于处理指令的一个或多个处理器核120,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核120可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(complex instruction set computing,cisc)、精简指令集计算(reduced instruction set computing,risc)或基于超长指令字(very long instruction word,vliw)的计算。不同的处理器核120可以各自处理不同或相同的指令集。在一些实施例中,处理器核120还可以包括其他处理模块,例如数字信号处理器(digital signal processor,dsp)等。作为一种示例,图2中示出了处理器核1至m,m是非0的自然数。
98.在一些实施例中,如图2所示,处理器12可以包括寄存器堆126(register file),寄存器堆126可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆126可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆126中的寄存器可以选用通用寄存器来实现,也可以根据处理器12的实际需求采用特定的设计。
99.处理器12可以包括内存管理单元(memory management unit,mmu)122,用于实现虚拟地址到物理地址的转译。内存管理单元122中缓存有了页表中的一部分表项,内存管理单元122也可以从内存中获取未被缓存的表项。每个处理器核120中可以设置一个或多个内存管理单元122,不同处理器核120中的内存管理单元120也可以与位于其他处理器或处理器核中的内存管理单元120实现同步,使得每个处理器或处理器核可以共享统一的虚拟存储系统。
100.处理器12用于执行指令序列(即程序)。处理器12执行每个指令的过程包括:从存放指令的存储器中取出指令、对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
101.为了实现上述过程,处理器12可以包含取指令单元124、指令译码单元125、指令发射单元(未示出)、指令执行单元121和指令引退单元(未示出)等。
102.取指令单元124作为处理器12的启动引擎,用于将指令从存储器14中搬运到指令寄存器(可以是图2示出的寄存器堆26中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
103.取出指令后,处理器12进入指令译码阶段,指令译码单元125按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元121的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
104.指令发射单元通常存在于高性能的处理器12中,位于指令译码单元125与指令执行单元121之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元121,使得多个指令的并行操作成为可能。指令经取指、译码并被调度到相应的指令执行单元121之后,相应的指令执行单元121开始执行该指令,即执行该指令所指示的操作、实现相应的功能。
105.指令引退单元(或称为指令写回单元)主要用于负责将指令执行单元121产生的执行结果写回到相应的存储位置(例如为处理器12内部的寄存器)中,以使后续指令能够从该存储位置处快速获取相应的执行结果。
106.对于不同类别的指令,可以在处理器12中相应地设置不同的指令执行单元121。指令执行单元121可以是运算单元(例如包含算术逻辑单元,矢量运算单元等,用于根据操作数进行运算并输出运算结果,它是本公开实施例稀疏矩阵与待相乘向量的乘法的执行主体)、内存执行单元(例如用于根据指令访问内存以读取内存中的数据或向内存写入指定的数据等)以及协处理器等。在处理器12中,各个指令执行单元121可以并行运行并输出相应的执行结果。
107.指令执行单元121在执行某类指令(例如访存指令)时,需要访问存储器14,以获取存储器14中存储的信息或提供需要写入存储器14中的数据。
108.用于执行访存指令的指令执行单元121也可以简称称为内存执行单元,该内存执行单元例如为加载存储单元(load store unit,lsu)和/或其他用于内存访问的单元。
109.访存指令被取指令单元124获取之后,指令译码单元125可以对访存指令进行译码处理,使得访存指令的源操作数可被获取。译码处理后的访存指令被提供至相应的指令执行单元121中,该指令执行单元121可以对访存指令的源操作数进行相应的运算(例如由算术逻辑单元对存储于寄存器中的源操作数进行运算)以获得访存指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
110.访存指令的源操作数通常包括地址操作数,指令执行单元121对该地址操作数进行运算以获得访存指令对应的虚拟地址或物理地址。当内存管理单元122被禁用时,指令执行单元121可以直接通过逻辑运算获得访存指令的物理地址。当内存管理单元121被启用时,相应的指令执行单元121根据访存指令对应的虚拟地址发起地址转译请求,该地址转译请求包括与访存指令的地址操作数对应的虚拟地址;内存管理单元122响应地址转译请求,并根据与该虚拟地址匹配的表项将地址转译请求中的虚拟地址转换为物理地址,使得指令执行单元121可以根据转译后的物理地址访问高速缓存和/或存储器14。
111.根据功能的不同,访存指令可包括加载指令和存储指令。加载指令的执行过程通常不需要对存储器14或高速缓存中的信息进行修改,指令执行单元121只需要根据加载指令的地址操作数读取存储于存储器14、高速缓存或外部的存储设备中的数据。
112.不同于加载指令,存储指令的源操作数不仅包括地址操作数,还包括数据信息,存储指令的执行过程通常需要对存储器14和/或高速缓存进行修改。存储指令的数据信息可以指向写入数据,该写入数据的来源可以是运算指令、加载指令等指令的执行结果,也可以是处理器12中的寄存器或其他存储单元提供的数据、还可以是立即数。
113.本公开总体概述
114.如上所述,深度神经网络中经常用到权重矩阵与激励向量的乘法(权重矩阵与激励矩阵的乘法可以化为权重矩阵与一个个激励向量的乘法)。通常,对权重矩阵进行剪枝以得到稀疏矩阵。在现有技术中,稀疏权重矩阵与激励向量相乘的过程中,一般需要3次加载,对应于3个加载指令。
115.第一个加载指令从稀疏权重矩阵中加载未被剪枝的权重值(不为0的权重值)。对于被剪枝的元素值为0,不需要参与运算,也就不用加载。因此,第一个加载指令需要包含所
述未剪枝元素值在存储器14中的起始存储地址。取指令单元124从存储器14取出该指令后,经指令译码单元125译码,交由作为本公开实施例的运算单元的指令执行单元121执行。指令执行单元121按照该地址从存储器14中加载稀疏权重矩阵中的未被剪枝的权重值,放在高速缓存(例如l2高速缓存15)中。
116.第二个加载指令从稀疏权重矩阵中加载未被剪枝的权重的索引(不为0的权重的索引)。这些索引就是激励向量中需要参与运算的有效元素的索引。激励向量中其它位置的索引处的元素需要和0权重相乘,因此没有意义。第二个加载指令需要包含稀疏权重矩阵中未剪枝权重索引在存储器14的起始存储地址。取指令单元124从存储器14取出该指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121按照该地址从存储器14中加载稀疏权重矩阵中的未被剪枝的权重索引,放在高速缓存(例如l2高速缓存15)中。
117.第三个加载指令按照高速缓存(例如l2高速缓存15)中的未被剪枝的权重索引,在激励向量中加载与这些索引对应的元素,加载的元素是要与第一个加载指令加载的权重相乘的激励向量中的元素。第三个加载指令需要包含激励向量的起始存储地址、和从激励向量中加载的元素需要存回的处理器12中寄存器(如寄存器堆126的一个寄存器)的地址。取指令单元124从存储器14取出该指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121将激励向量的起始存储地址与未被剪枝的权重索引累加,得到激励向量中的有效元素的地址,从这些地址中加载有效元素,将这些有效元素回存到指令中指明的处理器12中寄存器的地址。
118.然后,指令执行单元121将第一个加载指令执行得到的未被剪枝的权重值与第三个加载指令得到的有效元素相乘并累加,得到稀疏权重矩阵与激励向量的相乘结果。
119.由于上述3次加载需要3个不同指令,造成需要频繁取指令和译码,处理开销大,速度慢。而现代处理单元,尤其是低功耗处理单元,通常具有有限取指宽度,加载所用的缓存空间不足。本公开实施例中,对于上述后两个加载指令,用一个索引与有效元素加载指令来执行。下面是该指令的一个示例:
120.loadgatherfused pg,destaddr,addr 1,addr 2
121.上述addr 1为第一源地址,用于指示未剪枝元素(例如权重矩阵中的权重)索引的存储地址;addr 2为第二源地址,用于指示待相乘向量(例如激励向量)的存储地址;destaddr为目的地地址,用于指示从待相乘向量(例如激励向量)中加载的有效元素的向量回存的地址。pg是一个控制参数,用于指示本公开实施例采用的向量中多少位是有效的。例如,激励向量有24位,可能只有前16位是有效的,表示激励值。后8位可能是无效的,不表示激励值,可以置为0等。管理员可以通过pg干预向量有效位数。
122.取指令单元124从存储器14取出该指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121根据第一源地址addr 1从存储器14中加载稀疏矩阵中未被剪枝的元素的索引,根据第二源地址addr 2和上述索引的和地址,加载从待相乘向量中与这些未剪枝元素索引对应的有效元素,然后将得到的有效元素的向量按照目的地地址destaddr回存。通过这样一个指令,达到同时执行上述三次加载中的后两次加载的目的。比现有技术三条指令执行加载,本公开实施例变成用二条指令执行加载,提高了稀疏矩阵与待相乘向量的乘法运算的运算效率,减少了运算开销。
123.本公开基本实施例的详细实现过程
124.如图3所示,作为本公开一个实施例的运算单元的指令执行单元121包括指令缓存单元210、未剪枝元素索引读取单元220、有效元素读取单元230、回存单元240、未剪枝元素值读取单元250、相乘结果向量获取单元260。
125.下面结合图5a描述根据本公开一个基本实施例的实现过程。
126.图5a的例子中,稀疏矩阵可以是稀疏权重矩阵,待相乘向量是激励向量。稀疏权重矩阵是一个若干行、24列的矩阵,每行有24个元素,其索引分别用索引0、1、2
……
23表示,其中用粗线框表示未被剪枝的元素,即不为0的元素,用细线框表示被剪枝的元素,即为0的元素。待相乘向量是24个元素的向量,其索引也为0、1、2
……
23,与稀疏权重矩阵的行索引一一对应。将待相乘向量与稀疏权重矩阵的第一行的行向量相乘,得到相乘结果向量的第一个元素,即索引0的元素。由于稀疏权重矩阵的第一行只有4个元素不为0,因此,只要将这4个元素与待相乘向量中相应索引位置的元素相乘并累加,就得到了相乘结果向量的索引0的元素。第一行中为0的元素与待相乘向量中的相应索引位置的元素相乘仍然等于0,对结果没有影响。同理,将稀疏权重矩阵的第二行中4个不为0的元素与待相乘向量中相应索引位置的元素相乘并累加,就得到了相乘结果向量的索引1的元素。以此类推,得到了最后的相乘结果向量。
127.在该基本实施例中,首先,取指令单元124从存储器14取出未剪枝元素值加载指令。未剪枝元素值加载指令是获取所述稀疏矩阵中的未剪枝元素值的指令。如图5a所示,在稀疏矩阵的第一行,索引0、2、4、9的元素值未被剪枝,即不为0,则未剪枝元素值加载指令获得这些元素的元素值。未剪枝元素值加载指令包括第三源地址,所述第三源地址表示所述未剪枝元素值的起始存储地址。在存储器14中,0、2、4、9的元素值连续存储。当得到了第三源地址,即它们存储在存储器14上的起始地址,就可以顺序加载它们。取指令单元124取出未剪枝元素值加载指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121的指令缓存单元210接收到该未剪枝元素值加载指令。未剪枝元素值读取单元220根据未剪枝元素值加载指令中的第三源地址,从存储器14读取所述未剪枝元素值,放在高速缓存(例如l2高速缓存15)中。
128.然后,取指令单元124从存储器14取出索引与有效元素加载指令。索引与有效元素加载指令是从待相乘向量中获取与稀疏矩阵中未剪枝元素对应的有效元素向量的指令。该实施例中,待相乘向量存储在存储器14中。如图5a所示,在稀疏矩阵的第一行,索引0、2、4、9的元素值未被剪枝,那么在待相乘向量中,也要取出索引0、2、4、9的元素,作为有效元素向量。如上所示,索引与有效元素加载指令为loadgatherfused pg,destaddr,addr 1,addr 2。第一源地址addr 1表示所述稀疏矩阵中未剪枝元素索引的起始存储地址。如图5a的稀疏矩阵的第一行中,未剪枝元素索引为索引0、2、4、9。其存储在存储器14中连续的位置,但该位置与存储未剪枝元素值的位置不同。第一源地址addr 1就表示它们的起始存储地址。第二源地址addr 2表示所述待相乘向量在存储器14上的起始存储地址。目的地地址destaddr表示所述有效元素向量要存放回的处理器12的寄存器堆126中的地址。
129.取指令单元124取出索引与有效元素加载指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121的指令缓存单元210接收到该索引与有效元素加载指令。未剪枝元素索引读取单元220根据索引与有效元素加载指令中的第一源地址读取未剪枝元素索引,例如图5a的稀疏矩阵的第一行中的未剪枝元素索引0、2、4、9,放在高速缓
存(例如l2高速缓存15)中。然后,有效元素读取单元230将放在高速缓存中的第二源地址和读取的未剪枝元素索引(如上例的0、2、4、9)加和,得到要加载的与稀疏矩阵中未剪枝元素相乘的有效元素的具体地址,其中第二源地址反映了待相乘向量的第一个元素的地址,上述索引相当于在该基础上的偏移量,二者相加得到各有效元素的具体地址。然后,有效元素读取单元230按照该和地址读取与未剪枝元素相乘的有效元素,如图5a中待相乘向量的索引0、2、4、9的元素。回存单元240将所述有效元素(例如上例的待相乘向量的索引0、2、4、9的元素)组装成有效元素向量,按照所述目的地地址存储到处理器12的寄存器堆126中。
130.然后,取指令单元124从存储器14取出向量乘法指令。向量乘法指令用于基于未剪枝元素值加载指令得到的未剪枝元素值与第二指令得到的有效元素向量,得到稀疏矩阵与待相乘向量的相乘结果向量。相乘结果向量获取单元260执行上述向量乘法指令。具体做法可以是,将未剪枝元素值加载指令得到的未剪枝元素值合成未剪枝元素值向量,与有效元素向量相乘,得到相乘结果向量的一个元素。例如,假设上例中,稀疏矩阵的第一行的索引0、2、4、9的元素值分别为0.5、1、2、3,有效元素向量为(2,2,1,4),则相乘结果向量的第一个元素为0.5
×
2 1
×
2 2
×
1 3
×
4=1 2 2 12=17。将稀疏矩阵的第二行的未剪枝元素值的向量与根据稀疏矩阵的第二行的未剪枝元素索引提取的有效元素向量相乘,得到相乘结果向量的第二个元素,以此类推。
131.通过以上过程,完成了稀疏矩阵与待相乘向量的乘法。除了最后一条向量乘法指令之外,用到2条加载指令,与现有技术用到3条加载指令相比,提高了运算效率,减少了处理开销。
132.本公开结合tcm 17的实施例的详细描述
133.图5a的实施例中,根据稀疏矩阵的未剪枝元素索引从待相乘向量中加载有效元素时,只能每个时钟周期加载一个有效元素。如图5a中,在周期1根据索引0加载待相乘向量的索引0的元素,在周期2根据索引2加载待相乘向量的索引2的元素,在周期3根据索引4加载待相乘向量的索引4的元素,在周期4根据索引9加载待相乘向量的索引9的元素。这是因为,待相乘向量存储在存储器14中,不支持向量中多个元素同时访问。
134.紧耦合存储器(tcm)17可以支持向量中多个元素同时访问。tcm17分成多个存储体,不同存储体可以被并行访问,从而提高访问效率。这样,在图5b的实施例中,待相乘向量存储在tcm 17中。待相乘向量的元素可以分散存储在多个存储体171中,如图4的存储体0-3中。在这种情况下,如果要同时访问的多个元素在不同存储体171中,就可以对这多个元素同时加载。
135.在图4的例子中,待相乘向量的索引0、4、8、12的元素a【0】、a【4】、a【8】、a【12】存储在存储体0中,它们的索引的特点是模4后的余数为0。待相乘向量的索引1、5、9、13的元素a【1】、a【5】、a【9】、a【13】存储在存储体1中,它们的索引的特点是模4后的余数为1。待相乘向量的索引2、6、10、14的元素a【2】、a【6】、a【10】、a【14】存储在存储体2中,它们的索引的特点是模4后的余数为2。待相乘向量的索引3、7、11、15的元素a【3】、a【7】、a【11】、a【15】存储在存储体3中,它们的索引的特点是模4后的余数为3。可见,该实施例中,元素的索引模存储体171的总数后的余数就是该元素所存储在的存储体171的索引。上述待相乘向量的元素在各存储体的分布方式只是一种示例,还可以有其它的分布方式。
136.对应地,可以将稀疏矩阵中未剪枝元素索引按组存储,而组中的索引的个数小于
等于tcm 17中存储体171的总数,并且确保同一个组中的不同索引对应于tcm 17的不同存储体171。如图5b的组0包含4个索引0、2、5、7,其模4的余数分别是0、2、1、3,分别对应于四个不同存储体171。这样,按照这4个索引从待相乘向量中加载有效元素时,对应的4个有效元素位于4个不同存储体171,就可以并行从4个存储体171中取有效元素,构成有效元素向量。同理,组1包含4个索引2、3、0、5,其模4的余数分别是2、3、0、1,分别对应于四个不同存储体171,以此类推。
137.另外,可以让单个组中包含从所述稀疏矩阵中的多个行中各取出的一个未剪枝元素的索引,该多个行的行数等于tcm 17中存储体171的总数。例如,上例中,tcm 17中存储体171的总数为4,因此可以从稀疏矩阵中的4个行中各取出一个未剪枝元素的索引,在取的时候注意让这些索引对应于tcm 17的不同存储体171。例如,在图5b中,在稀疏矩阵的第一行取索引0,第二行取索引2,第三行取索引5,第四行取索引7,它们模4的余数不同,分别对应于四个不同存储体171的索引,等等。
138.这样,如图5b所示,当从稀疏矩阵加载未剪枝元素的索引时,不再加载一行的未剪枝元素的索引,而是加载上述形成的一组索引。按照该组索引从待相乘向量中加载有效元素后,各索引对应的未剪枝元素值与对应的有效元素相乘,得到的积累积在相乘结果向量对应索引的元素中。相乘结果向量的各元素随着上述运算的进行,不断将产生的相应行的积累加到相应元素,也就是说,相乘结果向量的各元素随着上述运算的进行不断累加新产生的积。从稀疏阵列的第一行取出的未剪枝元素与对应有效元素的积累积在相乘结果向量的第一个元素。从稀疏阵列的第二行取出的未剪枝元素与对应有效元素的积累积在相乘结果向量的第二个元素,以此类推。
139.下面结合图6a-f描述上述实施例的具体实现过程。
140.图5b的实施例中,首先,取指令单元124从存储器14取出未剪枝元素值加载指令。未剪枝元素值加载指令是获取所述稀疏矩阵中的未剪枝元素值的指令。未剪枝元素值加载指令包括第三源地址,所述第三源地址表示所述未剪枝元素值在存储器14中的起始存储地址。在图5b中,由于稀疏矩阵的第一行的索引0、第二行的索引2、第三行的索引5、第四行的索引7共同组成组0,第一行的索引0的元素值、第二行的索引2的元素值、第三行的索引5的元素值、第四行的索引7的元素值也连续存储在一起;同理,对应于组2,第一行的索引2的元素值、第二行的索引3的元素值、第三行的索引0的元素值、第四行的索引5的元素值也连续存储在一起,以此类推。上例中,第三源地址表示第一行的索引0在存储器14中的地址。
141.取指令单元124取出未剪枝元素值加载指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121的指令缓存单元210接收到该未剪枝元素值加载指令。未剪枝元素值读取单元220根据未剪枝元素值加载指令中的第三源地址,按照行索引顺次取出多个行的未剪枝元素值,该多个行的行数等于所述tcm 17中的存储体数目。在图5b的实施例中,tcm 17中的存储体数目为4,因此,每次可以取4行的未剪枝元素值。第一次取行0-3的未剪枝元素值。第二次取行4-7的未剪枝元素值,以此类推。图6a示出了取出的前4行的未剪枝元素值,其中,有值的方框代表未剪枝元素,空白的方框代表剪枝掉的元素,即为0的元素。实际上,它们在存储器14存储的顺序并不是逐行存储,而是如上所述按照索引组的顺序存储。第一行的索引0的元素值、第二行的索引2的元素值、第三行的索引5的元素值、第四行的索引7的元素值顺序存储在最前面,然后是第一行的索引2的元素值、第二行的
索引3的元素值、第三行的索引0的元素值、第四行的索引5的元素值,等等。未剪枝元素值读取单元220按照第三源地址确定第一个要读取的未剪枝元素值,然后依次读取存储体数目个行的各索引组的各索引的元素值。
142.然后,取指令单元124从存储器14取出索引与有效元素加载指令。索引与有效元素加载指令是从待相乘向量中获取与稀疏矩阵中未剪枝元素对应的有效元素向量的指令,即上述loadgatherfused pg,destaddr,addr 1,addr 2。第一源地址addr 1表示所述稀疏矩阵中未剪枝元素索引的起始存储地址。未剪枝元素索引是按照图6b的组存储的。组0包括第一行的索引0、第二行的索引2、第三行的索引5、第四行的索引7。组1包括第一行的索引2、第二行的索引3、第三行的索引0、第四行的索引5,等等。第一源地址是组0的第一个索引的地址。由于这些组的索引顺序存储,就能够根据第一源地址address 1顺次获取后续的索引。第二源地址addr 2表示所述待相乘向量在存储器14上的起始存储地址。目的地地址destaddr表示所述有效元素向量要存放回的处理器12的寄存器堆126中的地址。
143.取指令单元124取出索引与有效元素加载指令后,经指令译码单元125译码,交由指令执行单元121执行。指令执行单元121的指令缓存单元210接收到该索引与有效元素加载指令。未剪枝元素索引读取单元220从索引与有效元素加载指令中的第一源地址开始,读取一个组的未剪枝元素索引,并用第一源地址加上一个组的长度的和更新所述第一源地址。这样,当下次执行第二指令时,就读取下一个组的未剪枝元素索引,直到所有组都读取完。例如,在图6b中,先读取组0的索引,放在高速缓存(例如l2高速缓存15)中。
144.然后,有效元素读取单元230将放在高速缓存中的第二源地址和读取的未剪枝元素索引(如组0中的索引0、2、5、7)加和,得到要加载的与稀疏矩阵中未剪枝元素相乘的有效元素的具体地址。然后,如图6c所示,有效元素读取单元230按照该和地址读取与未剪枝元素相乘的有效元素,如图6c中待相乘向量的索引0、2、5、7的元素1.5、0.4、0.8、3.0。
145.回存单元240将所述有效元素(例如上例的待相乘向量的索引0、2、5、7的元素)组装成有效元素向量,如图6d的向量,按照所述目的地地址存储到处理器12的寄存器堆126中。回存单元240可以将有效元素在高速缓存(如l2高速缓存15)中组装成向量,并从所述高速缓存按照所述目的地地址移回所述指令执行单元121所在的处理器12的寄存器。回存单元240也可以将有效元素在tcm 17组装成向量,并从tcm17按照所述目的地地址移回所述指令执行单元121所在的处理器12的寄存器。
146.然后,取指令单元124从存储器14取出向量乘法指令。向量乘法指令用于基于未剪枝元素值加载指令得到的未剪枝元素值与索引与有效元素加载指令得到的有效元素向量,得到稀疏矩阵与待相乘向量的相乘结果向量。相乘结果向量获取单元260执行上述向量乘法指令。具体做法可以是,将未剪枝元素值加载指令得到的未剪枝元素值和索引与有效元素加载指令得到的与该未剪枝元素索引对应的有效元素相乘,将得到的积累积在相乘结果向量中与该未剪枝元素来自于的稀疏矩阵行对应的元素上。例如,从稀疏阵列的第一行取出的未剪枝元素与对应有效元素的积累积在相乘结果向量的第一个元素上。从稀疏阵列的第二行取出的未剪枝元素与对应有效元素的积累积在相乘结果向量的第二个元素上,等等。例如,图6e是未剪枝元素值加载指令得到的索引组0的未剪枝元素值0.5、0.3、1.6、1.9。图6e的第一个元素0.5乘以图6d的第一个元素1.5,得到0.75累加到图6f的相乘结果向量的第一个元素上(这是由于图6e的第一个元素0.5取自于稀疏矩阵的第一行)。图6e的第二个
元素0.3乘以图6d的第二个元素0.4,得到0.12累加到图6f的相乘结果向量的第二个元素上(这是由于图6e的第二个元素0.3取自于稀疏矩阵的第二行),等等。
147.通过以上过程,完成了稀疏矩阵与待相乘向量的乘法。上述过程除最后一条向量乘法指令之外,用到两条加载指令,与现有技术三条加载指令相比,提高了运算效率,减少了处理开销。同时,由于将待相乘向量存储在tcm 17的多个存储体171中,而稀疏矩阵中的未剪枝元素索引按组存储,每组中的索引对应于tcm 17的不同存储体,这样,按照每组内的多个索引加载待相乘向量中对应的有效元素时,可以在一个周期并行执行(如图5b,按照索引0、2、5、7加载有效元素都可以在周期1执行),进一步提高了运算效率。
148.本公开实施例可采用的寻址模式
149.如图7所示,上述索引与有效元素加载指令loadgatherfused pg,destaddr,addr 1,addr 2可以有不同的变形。
150.在一个实施例中,上述索引与有效元素加载指令可以写作loadgatherfused pg,destaddr,base 1,base 2。即,用第一基源地址base1表示第一源地址,用第二基源地址base 2表示第二源地址。基地址是作为基础的地址。在寻址中,要寻找的某个地址可以与基地址相差一个偏移量,因此,可以按照基地址加上偏移量的方式来寻址。在没有偏移量的情况下,可以仅按照基地址寻址。对于loadgatherfused pg,destaddr,base 1,base 2,未剪枝元素索引读取单元220按照第一基源地址base 1来读取未剪枝元素索引,有效元素读取单元230根据第二基源地址base 2和读取的未剪枝元素索引的和地址,读取有效元素。
151.在一个实施例中,上述索引与有效元素加载指令可以写作loadgatherfused pg,destaddr,base 1,imm 1,base 2,imm 2。即,用基地址和立即数表示的偏移量来表示要寻址的地址。用第一基源地址base 1加上第一立即数imm 1的和地址表示第一源地址,用第二基源地址base 2加上第二立即数imm 2的和地址表示第二源地址。对于loadgatherfused pg,destaddr,base 1,imm 1,base 2,imm 2,未剪枝元素索引读取单元220按照第一基源地址base 1加上第一立即数imm 1的和地址来读取未剪枝元素索引,有效元素读取单元230根据第二基源地址base 2、第二立即数imm 2和读取的未剪枝元素索引的和地址,读取有效元素。
152.在一个实施例中,上述索引与有效元素加载指令可以写作loadgatherfused pg,destaddr,base 1,n1,base 2,n2。它仍然是用基地址和偏移量来表示要寻址的地址,只不过它是按照第一系数乘以向量长度乘以元素大小的方式来确定偏移量。向量长度是向量中包括的元素个数。一般系统自动配置。当配置好后,激励向量、稀疏矩阵中的行向量中的元素个数就是该向量长度。图5a的例子中,向量长度为24个元素。元素大小一般是指元素占用的字节数。大多数情况下,元素大小为2字节。该实施例中,第一源地址等于base 1 n1*wlength*elesize,其中,base 1是第一基源地址,n1是第一系数,wlength是向量长度,elesize是元素大小。第二源地址等于base 2 n2*wlength*elesize,其中,base 2是第二基源地址,n2是第二系数。对于上述索引与有效元素加载指令,未剪枝元素索引读取单元220按照base 1 n1*wlength*elesize的地址来读取未剪枝元素索引,有效元素读取单元230根据base 2 n2*wlength*elesize和读取的未剪枝元素索引的和地址,读取有效元素。
153.在一个实施例中,上述索引与有效元素加载指令可以写作loadgatherfused pg,destaddr,base 1,n3,base 2,n4。它也是用基地址和偏移量来表示要寻址的地址。它是按
照第一系数乘以元素大小的方式来确定偏移量。该实施例中,第一源地址等于base 1 n3*elesize,其中,base 1是第一基源地址,n3是第三系数,elesize是元素大小。第二源地址等于base 2 n4*elesize,其中,base 2是第二基源地址,n4是第四系数。对于上述第二指令,未剪枝元素索引读取单元220按照base 1 n3*elesize的地址来读取未剪枝元素索引,有效元素读取单元230根据base 2 n4*elesize和读取的未剪枝元素索引的和地址,读取有效元素。
154.上述多种索引与有效元素加载指令的设计方式,提高了本公开实施例根据索引与有效元素加载指令寻址的灵活性。
155.效果评估数据和商业价值
156.为了评估本公开实施例的效果,采用具有arm sve simd扩展的仿真器gem 5仿真,其中simd是指单指令多数据流,即能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。本公开实施例提出的第二指令在上述gem 5和gcc编译器的环境下运行。本公开实施例按照arm v8.2a的向量长度配置,每个向量8个元素,每个元素2字节(16比特)。实验分别采用两种cpu模型,一种是minor模型,其功耗低,但性能相对较差;另一种是o3模型,其性能高,但功耗大。采用8个存储体的tcm。稀疏矩阵一方面分别采用稀疏度为0、0.25、0.5的合成数据的稀疏矩阵,另一方面采用真实数据的稀疏矩阵。在真实数据中,权重为0的概率为10%,因此稀疏度为0.9。
157.最后得到的实验结果如图8所示。图8分别示出了稀疏度为0、0.25、0.5、0.9(真实数据)四种情况下,在cpu分别采用minor模型和o3模型时的8种直方图。每组直方图包括2个直方图。左边的直方图表示现有技术中计算稀疏矩阵与待相乘向量的乘积所用的时钟周期数,右边的直方图表示本公开实施例中计算稀疏矩阵与待相乘向量的乘积所用的时钟周期数。可以看出,本公开实施例中,计算稀疏矩阵与待相乘向量的乘积所用的时钟周期数变少,因此运算速度更快,运算速度是现有方式的1.16倍(cpu采用o3模型)到1.39倍(cpu采用minor模型),在采用真实数据(稀疏度=0.9)的情况下,运算速度达到现有方式的1.2倍(cpu采用o3模型)到1.47倍(cpu采用minor模型)。其在稀疏矩阵与待相乘向量的相乘过程中,将三条加载指令压缩为两条,大大减少了计算稀疏矩阵与待相乘向量的乘积的过程中取指令和译码的压力,在具有有限取指宽度的现代低功率处理器中尤其适用。通过应用本公开实施例,预计使低功率处理器的市场份额扩大20%以上,具有良好的市场前景。
158.根据本公开实施例的深度神经网络运行方法流程
159.如图9所示,根据本公开的一个实施例,还提供了一种有效元素向量获取方法,所述方法包括:
160.步骤910、接收索引与有效元素加载指令,所述索引与有效元素加载指令用于获取所述有效元素向量,所述索引与有效元素加载指令包括第一源地址、第二源地址和目的地地址,所述第一源地址表示所述稀疏矩阵中未剪枝元素索引的起始存储地址,所述第二源地址表示所述待相乘向量的起始存储地址,所述目的地地址表示所述有效元素向量要存放回的地址;
161.步骤920、根据所述第一源地址读取未剪枝元素索引;
162.步骤930、根据所述第二源地址和读取的未剪枝元素索引,在所述待相乘向量中读取用于与稀疏矩阵中未剪枝元素相乘的有效元素;
163.步骤940、将所述有效元素组装成有效元素向量,按照所述目的地地址存储。
164.可选地,步骤930包括:
165.将所述第二源地址和读取的未剪枝元素索引分别相加,得到各有效元素的存储地址;
166.按照所述存储地址读取所述有效元素。
167.可选地,所述待相乘向量的元素在紧耦合存储器中的多个存储体中存储,其中,允许并行访问所述多个存储体中的元素;所述稀疏矩阵中未剪枝元素索引按组存储,单个组中包含从所述稀疏矩阵中的多个行中各取出的一个未剪枝元素的索引,同一个组中的不同索引对应于所述紧耦合存储器的不同存储体。
168.可选地,所述多个行是从所述稀疏矩阵中按照行索引顺次取出的所述多个存储体的存储体数目个行。
169.可选地,步骤920包括:从所述第一源地址开始,读取一个组的未剪枝元素索引,并用第一源地址加上一个组的长度的和更新所述第一源地址。
170.由于上述过程的实现细节已在前述装置实施例的描述中详细介绍,故不赘述。
171.应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
172.应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
173.应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
174.还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

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

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

相关文献