掌桥专利:专业的专利平台
掌桥专利
首页

缓存结构和电子设备

文献发布时间:2024-04-18 19:58:53


缓存结构和电子设备

技术领域

本公开的实施例涉及一种缓存结构和电子设备。

背景技术

处理器的工作速度远高于内存,如果处理器直接访问内存读写数据,则需要等待一定的时间周期,因此访问内存的过程中通常采用高速缓冲存储装置(Cache)来提高系统效率以及处理器访问内存的速度。通常,处理器优先从Cache中查找数据,例如,若应用程序或软件请求的数据在Cache中存在,则称为缓存命中(Cache hit),反之称为缓存未命中(Cache miss)。

发明内容

本公开至少一实施例提供一种缓存结构,用于矩阵计算,其中,所述缓存结构包括N级缓存,所述N级缓存中的第i级缓存包括至少1个i级缓存节点,每个i级缓存节点包括具有只读权限的i级只读缓存区以及具有读写权限的i级读写缓存区;每多个i级缓存节点共享一个i+1级缓存节点,所有N-1级缓存节点共享所述N级缓存中的第N级缓存包括的1个N级缓存节点,其中,所述N级缓存节点包括具有只读权限的N级只读缓存区以及具有读写权限的N级读写缓存区;所述第N级缓存与外部存储器电连接,每个1级缓存节点与对应的计算单元电连接;所述N级缓存中的具有只读权限的只读缓存区用于缓存所述矩阵计算中的作为计算输入参数的输入矩阵,以及在所述外部存储器和多个所述计算单元之间传输所述输入矩阵,所述N级缓存中的具有读写权限的读写缓存区用于缓存所述矩阵计算中的作为计算输出参数的输出矩阵,以及在所述外部存储器和多个所述计算单元之间传输所述输出矩阵,其中,N为大于1的正整数,i为1至N-1之间的任意正整数。

例如,在本公开至少一实施例提供的缓存结构中,每个计算单元包括运算模块和寄存器阵列,每个计算单元的寄存器阵列用于存储所述输入矩阵中的部分参数,以及所述输出矩阵中的部分参数;每个计算单元的运算模块包括多个乘法器和/或乘加器,用于并行执行乘法计算和/或乘加计算。

例如,在本公开至少一实施例提供的缓存结构中,所述矩阵计算包括矩阵乘法计算和/或矩阵乘加计算。

例如,在本公开至少一实施例提供的缓存结构中,作为计算输入参数的输入矩阵的读取通过由所述N级缓存中的具有只读权限的只读缓存区组成的只读缓存通路读入相应计算单元中的寄存器阵列,作为计算输出参数的输出矩阵的读取通过由所述N级缓存中的具有读写权限的读写缓存区组成的读写缓存通路读入相应计算单元中的寄存器阵列,由所述相应计算单元中的运算模块进行计算后得到更新后的输出矩阵,所述更新后的输出矩阵通过所述读写缓存通路从所述相应计算单元写回至所述外部存储器或任一级缓存的读写缓存区。

例如,在本公开至少一实施例提供的缓存结构中,响应于N为3,所述只读缓存通路包括所述相应计算单元对应的1级缓存节点中的只读缓存区,与所述1级缓存节点电连接的2级缓存节点中的只读缓存区,以及3级缓存节点中的只读缓存区;所述读写缓存通路包括所述相应计算单元对应的1级缓存节点中的读写缓存区,与所述1级缓存节点电连接的2级缓存节点中的读写缓存区,以及所述3级缓存节点中的读写缓存区。

例如,在本公开至少一实施例提供的缓存结构中,所述外部存储器为动态随机存储器。

本公开至少一实施例还提供一种电子设备,包括如本公开任一实施例所述的缓存结构。

例如,在本公开至少一实施例提供的电子设备中,所述电子设备包括与所述N级缓存一一对应的N级任务分发单元以及N个层级的线程组,每级任务分发单元包括至少一个任务分发单元,每个层级的线程组包括至少一个线程组,所述N级任务分发单元中位于第j级的第j级任务分发单元的数量与所述N级缓存中对应的第j级缓存包括的j级缓存节点的数量相同且一一对应,所述N个层级的线程组中位于第j级的j级线程组的数量与所述N级缓存中对应的第j级缓存包括的j级缓存节点的数量相同且一一对应,每个j级线程组包括的线程共享对应的j级缓存节点以缓存数据,其中,j为小于等于N的正整数。

例如,在本公开至少一实施例提供的电子设备中,所述N级任务分发单元中的位于第N级的第N级任务分发单元的数量为1,且配置为将用于所述矩阵计算的总任务拆分成P1个第一任务,分别分配给P1个N级线程组分时执行,P1为正整数。

例如,在本公开至少一实施例提供的电子设备中,在一个操作周期内,所述电子设备配置为执行1个N级线程组对应的第一任务。

例如,在本公开至少一实施例提供的电子设备中,所述电子设备配置为一次性读取执行所述P1个第一任务中的多个第一任务所需的输入矩阵的参数至所述N级缓存节点,以及调度多个所述计算单元在多个操作周期内执行完所述多个第一任务。

例如,在本公开至少一实施例提供的电子设备中,所述第N级任务分发单元还配置为选择至少一个第一任务,将每个第一任务拆分成P2个第二任务,以得到由每个第一任务对应的N级线程组拆分得到的P2个N-1级线程组,并将所述P2个N-1级线程组分发给P2个第N-1级任务分发单元,其中,P2为N-1级缓存节点的数量。

例如,在本公开至少一实施例提供的电子设备中,每个第k级任务分发单元配置为将接收的第k+1级任务分发单元分发的k级线程组拆分成P3个k-1级线程组,分发给相应的P3个第k-1级任务分发单元,其中,P3为共享一个k级缓存节点的k-1级缓存节点的数量,所述相应的P3个第k-1级任务分发单元为P3个k-1级缓存节点一一对应的P3个第k-1级任务分发单元,所述P3个k-1级缓存节点共享所述第k级任务分发单元对应的k级缓存节点,其中,k为大于1小于N的正整数。

例如,在本公开至少一实施例提供的电子设备中,每个第1级任务分发单元配置为将接收的1级线程组分发到对应的1级缓存节点以利用所述对应的1级缓存节点所对应的计算单元执行所述矩阵计算任务。

例如,在本公开至少一实施例提供的电子设备中,所述N级线程组包括的线程数量由1级缓存节点的数量及每个计算单元能够并行执行的任务数目决定;每个k级线程组包括的线程总数等于P3个k-1级线程组包括的线程总和,每个1级线程组包括的线程总数等于所述计算单元能够并行执行的任务数目。

例如,在本公开至少一实施例提供的电子设备中,每个任务分发单元配置为根据所述输入矩阵的参数之间的数据相关性拆分线程组。

例如,在本公开至少一实施例提供的电子设备中,针对根据所述输入矩阵的参数之间的数据相关性拆分得到的多个j-1级线程组,j级缓存节点中的具有只读权限的只读缓存区中缓存的输入矩阵的参数能够被共享所述j级缓存节点的对应所述多个j-1级线程组的多个j-1级缓存节点复用。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1为多核芯片系统的示意性结构图;

图2为本公开至少一实施例提供的一种缓存结构的示意性结构图;

图3为本公开至少一实施例提供的电子设备的示意性结构图;

图4为本公开至少一实施例提供的N级任务分发单元的示意性框图;

图5为本公开至少一实施例提供的层次化线程组的结构示意图;

图6为本公开一实施例提供的线程组拆分关系的示意图。

具体实施方式

为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。

计算机通常包括主存(main memory)和缓存(Cache),与缓存相比,处理器(单核CPU、多核CPU的处理内核或GPU等)对于主存的访问速度相对较慢,因此可以利用缓存弥补主存访问速度慢的缺陷,提高内存访问速度。缓存通常集成在处理器中。

图1为多核芯片系统的示意性结构图。如图1所示,该系统是典型的4核片上系统,包含4个核(Core)、4个核分别对应的三级高速缓存(L1高速缓存、L2高速缓存和L3高速缓存)、片上互联网络、动态随机存储器以及其他知识产权核(Intellectual PropertyCore)。I-L1$为每个核的私有指令L1高速缓存,D-L1$为每个核的私有数据L1高速缓存,每两个核共享一个L2高速缓存,四个核共享L3高速缓存。L3高速缓存和其他知识产权核(例如,直接存储器访问/视频/显示等)通过片上互联网络访问动态随机存储器。

L1高速缓存是最接近核的,它容量最小,速度最快。

L2高速缓存容量更大一些,例如256K,速度相比L1高速缓存要慢一些。L2高速缓存可理解为L1高速缓存的缓冲器,L1高速缓存制造成本很高因此它的容量有限,L2高速缓存的作用就是存储那些处理器处理时需要用到、L1高速缓存又无法存储的数据。

L3高速缓存是三级缓存中容量最大的一级,例如12MB,同时也是访问速度最慢的一级。L3高速缓存和动态随机存储器可以看作是L2高速缓存的缓冲器。L1高速缓存至L3高速缓存的容量递增,但单位制造成本却递减。

当处理器运作时,首先去L1高速缓存寻找它所需要的数据,若未命中,去L2高速缓存寻找数据,若仍未命中,去L3高速缓存寻找数据。如果三级缓存中都没找到处理器需要的数据,则从动态随机存储器里获取数据。寻找的路径越长,耗时越长。

类似的,在GPU(Graphic Processing Unit,图形处理器)中的缓存也存在与图1所示的多核片上系统类似的缓存结构,例如也包括层次化的三级缓存结构,这里不再赘述。

例如,矩阵计算可以包括矩阵乘法计算和/或矩阵乘加计算。对于矩阵乘法计算:C(M,N)=A(M,K)*B(K,N),输出矩阵C(M行N列)由输入矩阵A(M行K列)与输入矩阵B(K行N列)相乘得到。例如对于矩阵乘加计算:C’(M,N)=A(M,K)*B(K,N)+C(M,N),输入矩阵A(M行K列)与输入矩阵B(K行N列)相乘的结果和输出矩阵C(M行N列)的当前值C相加,得到更新后的输出矩阵C’。

对于矩阵乘法运算或矩阵乘加运算,输入矩阵A和输入矩阵B的读写特性为只读矩阵,也即在执行矩阵计算时,输入矩阵A和输入矩阵B的参数可以从外部存储器中,例如动态随机存储器,经过三级缓存读入Core或GPU架构中的计算单元执行计算,输入矩阵A和输入矩阵B在外部存储器中的参数不会被改写。而输出矩阵C(及C’)的读写特性为读写矩阵,也即在执行矩阵计算时,输出矩阵C的参数从外部存储器经过三级缓存后读入Core或GPU架构中的计算单元执行计算,计算的结果C’需要再次传回至外部存储器对原存储的输出矩阵C的参数进行更新或改写。

目前,在处理器中,L1高速缓存、L2高速缓存和L3高速缓存均是具有读写权限的缓存。针对上述矩阵计算,矩阵的尺寸可能很大,例如M和N较大,此时对于缓存容量要求较高,使得缓存占用的面积较大;且由于芯片尺寸增大,矩阵计算都通过读写缓存进行数据搬运延迟也较大,设计复杂度较高,功耗也较大。

本公开至少一实施例提供一种缓存结构和电子设备。该缓存结构用于矩阵计算,其中,缓存结构包括N级缓存,N级缓存中的第i级缓存包括至少1个i级缓存节点,每个i级缓存节点包括具有只读权限的i级只读缓存区以及具有读写权限的i级读写缓存区;每多个i级缓存节点共享一个i+1级缓存节点,所有N-1级缓存节点共享N级缓存中的第N级缓存包括的1个N级缓存节点;第N级缓存与外部存储器电连接,每个1级缓存节点与对应的计算单元电连接;N级缓存中的具有只读权限的只读缓存区用于缓存矩阵计算中的作为计算输入参数的输入矩阵,以及在外部存储器和多个计算单元之间传输输入矩阵,N级缓存中的具有读写权限的读写缓存区用于缓存矩阵计算中的作为计算输出参数的输出矩阵,以及在外部存储器和多个计算单元之间传输输出矩阵,其中,N为大于1的正整数,i为1至N-1之间的任意正整数。

该缓存结构针对矩阵计算进行了结构上的优化,采用只读缓存区和读写缓存区分离的缓存结构,具有只读权限的只读缓存区传输、缓存输入矩阵,具有读写权限的读写缓存区传输、缓存输出矩阵,由于在各级缓存中相对于读写数据,只读数据占比较高,且只读缓存区的设计复杂度较低,占用面积较小且功耗开销小,因此该缓存结构可以有效降低缓存设计的硬件开销和复杂度,减少占用面积。

本公开实施例的缓存结构可以用于单核的CPU中或多核CPU中,亦可用于GPU、GPGPU中,本公开对此不做具体限制。

下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。

图2为本公开至少一实施例提供的一种缓存结构的示意性结构图。

如图2所示,缓存结构包括N级缓存,图2中示出了1级缓存、2级缓存和N级缓存的具体结构,其它级缓存的结构相似,不再重复示出。

例如,N级缓存中的第i级缓存包括至少1个i级缓存节点,每个i级缓存节点包括具有只读权限的i级只读缓存区以及具有读写权限的i级读写缓存区。这里,i为1至N-1之间的任意正整数。

例如,如图2所示,当i=1时,对于1级缓存,其包括多个1级缓存节点,每个1级缓存节点包括1个1级只读缓存区和1个1级读写缓存区。当i=2时,对于2级缓存,其包括多个2级缓存节点,每个2级缓存节点包括1个2级只读缓存区和1个2级读写缓存区。

例如,如图2所示,N级缓存中的第N级缓存包括1个N级缓存节点,N级缓存节点包括1个具有只读权限的N级只读缓存区以及1个具有读写权限的N级读写缓存区。

例如,每多个i级缓存节点共享一个i+1级缓存节点,所有N-1级缓存节点共享N级缓存节点。这里共享是指,该多个(例如M个)i级缓存节点与该i+1级缓存节点电连接,该M个i级缓存节点都可以与该i+1级缓存节点进行数据交换,例如从该i+1级缓存节点中获取需要的数据。

例如,如图2所示,多个1级缓存节点共享一个2级缓存节点,多个2级缓存节点共享一个三级缓存节点,所有N-1级缓存节点共享N级缓存节点。

例如,在每一级中,设置多少个缓存节点共享一个更高级缓存节点可以根据需要设置,且各级均可不同,本公开对此不做具体限制。例如,响应于N=4,可以设置每4个1级缓存节点共享一个2级缓存节点,每8个2级缓存节点共享1个3级缓存节点,所有3级缓存节点共享4级缓存节点。

例如,如图2所示,第N级缓存与外部存储器电连接,例如,外部存储器可以是动态随机存储器。

例如,如图2所示,每个1级缓存节点与对应的计算单元电连接。

例如,计算单元可以是Core,或者,在GPU架构中,计算单元可以包括运算模块和寄存器阵列。

例如,每个寄存器阵列用于存储输入矩阵中的部分参数,以及输出矩阵中的部分参数,存储的部分参数依据该计算单元中的运算模块需要执行的运算决定。例如,对于一个大型的矩阵乘加计算任务,假设每个运算模块有4个线程(例如4个乘加器),能够每个操作周期并发处理C’(2x2)=C(2x2)+A(2x1)*B(1x2)的计算,从而各个计算单元将各自执行计算所需的参数A(2x1)(2行1列)和参数B(1x2)(1行2列)存在寄存器阵列中,同时将C’(2x2)(2行2列)和/或C(2x2)也缓存在寄存器阵列中。

每个计算单元的运算模块包括多个乘法器和/或乘加器,用于并行执行乘法计算和/或乘加计算。例如,1个运算模块可以包括4个线程,例如4个乘法器或4个乘加器,可以并行执行4个计算任务,例如并行进行4组乘法计算或乘加计算。

例如,N级缓存中的具有只读权限的只读缓存区用于缓存矩阵计算中的作为计算输入参数的输入矩阵,以及在外部存储器和多个计算单元之间传输输入矩阵。例如,N级缓存中的具有读写权限的读写缓存区用于缓存矩阵计算中的作为计算输出参数的输出矩阵,以及在外部存储器和多个计算单元之间传输输出矩阵。

例如,矩阵计算包括矩阵乘法计算和/或矩阵乘加计算。响应于矩阵乘法计算表示为C=A*B,以及响应于矩阵乘加计算表示为C’=A*B+C,A、B表示作为计算输入参数的输入矩阵,C和C’表示作为计算输出参数的输出矩阵,其中,C表示输出矩阵的当前值,也即上一次乘加计算的结果,C’表示经过本次乘加计算后更新的输出矩阵的值。

例如,作为计算输入参数的输入矩阵A和输入矩阵B的读取通过由N级缓存中的具有只读权限的只读缓存区组成的只读缓存通路读入相应计算单元中的寄存器阵列。

例如,以图2为例,针对任一个计算单元,其执行矩阵计算所需的输入矩阵的参数(例如输入矩阵A、B)首先从与该计算单元电连接的1级缓存节点中的1级只读缓存区(例如为1级只读缓存区1)中寻找,若未命中,则从该1级缓存节点电连接的2级缓存节点的只读缓存区(例如为2级只读缓存区1)中寻找,若仍未命中,从与该2级缓存节点电连接的3级缓存节点的只读缓存区(例如为3级只读缓存区1)中寻找,若直到N级缓存节点都未命中这些参数,则从外部存储器中读取,并经由N级缓存节点、…、3级只读缓存区1、2级只读缓存区1、1级只读缓存区1组成的只读缓存通路读入该计算单元中的寄存器阵列。

例如,若在2级缓存节点的只读缓存区中命中了所需参数,可从该2级缓存节点的只读缓存区中读取参数,经由只读缓存通路中的2级只读缓存区1、1级只读缓存区1读入该计算单元中的寄存器阵列。

例如,作为计算输出参数的输出矩阵C的读取通过由N级缓存中的具有读写权限的读写缓存区组成的读写缓存通路读入相应计算单元中的寄存器阵列,由相应计算单元中的运算模块进行计算后得到更新后的输出矩阵C’,更新后的输出矩阵C’通过读写缓存通路从相应计算单元写回至外部存储器或某级缓存中的读写缓存区。

例如,以图2为例,针对任一个计算单元,响应于矩阵乘加计算,其执行矩阵计算所需的输出矩阵的参数(例如输出矩阵的当前值C)首先从与该计算单元电连接的1级缓存节点中的1级读写缓存区(例如为1级读写缓存区1)中寻找,若未命中,则从该1级缓存节点电连接的2级缓存节点的读写缓存区(例如为2级读写缓存区1)中寻找,若仍未命中,从与该2级缓存节点电连接的3级缓存节点的读写缓存区(例如为3级读写缓存区1)中寻找,若直到N级缓存节点都未命中这些参数,则从外部存储器中读取,并经由N级缓存节点、…、3级读写缓存区1、2级读写缓存区1、1级读写缓存区1组成的读写缓存通路读入该计算单元中的寄存器阵列。

之后,由计算单元中的运算模块完成乘加计算,得到更新后的输出矩阵C’,更新后的输出矩阵C’通过由1级读写缓存区1、2级读写缓存区1、3级读写缓存区1、…、N级缓存节点组成的读写缓存通路从该计算单元写回至外部存储器或任一级缓存的读写缓存区。

例如,以3级缓存结构为例,也即响应于N为3,一级缓存包括多个1级缓存节点,每个1级缓存节点包括1个1级只读缓存区和1个1级读写缓存区,每个1级缓存节点对应1个计算单元并与该计算单元电连接;二级缓存包括多个2级缓存节点,每个2级缓存节点包括1个2级只读缓存区和1个2级读写缓存区,每M个(例如2个、4个、8个等)1级缓存节点共享1个2级缓存节点,也即该M个1级缓存节点与该2级缓存节点电连接;三级缓存包括1个3级缓存节点,该3级缓存节点包括1个3级只读缓存区和1个3级读写缓存区,所有2级缓存节点共享该3级缓存节点,也即所有2级缓存节点都与该3级缓存节点电连接,并且,该3级缓存节点与外部存储器电连接。

例如,只读缓存通路包括相应计算单元对应的1级缓存节点中的只读缓存区,与1级缓存节点电连接的2级缓存节点中的只读缓存区,以及3级缓存节点中的只读缓存区;读写缓存通路包括相应计算单元对应的1级缓存节点中的读写缓存区,与1级缓存节点电连接的2级缓存节点中的读写缓存区,以及3级缓存节点中的读写缓存区。

例如,输入矩阵A和输入矩阵B的读取通过只读缓存通路从外部存储器或某级缓存的只读缓存区读入相应计算单元的寄存器阵列,输出矩阵C的读取通过读写缓存通路从外部存储器或某级缓存的读写缓存区读入相应计算单元的寄存器阵列,运算模块完成C’=A*B+C的计算后,更新后的输出矩阵C’通过读写缓存通路写回至某级缓存的读写缓存区或外部存储器。

例如,在一个实施例中,以输入矩阵A、输入矩阵B、输出矩阵C和C’都是INT8精度(数据量为1byte)的256x256尺寸大小的矩阵,实现矩阵乘加运算C’=C+A*B为例。假设每个计算单元有4个线程(或者说4个乘加器),能够每个操作周期并发处理C’(2x2)=C(2x2)+A(2x1)*B(1x2),这里,A(2x1)表示输入矩阵A中的2行1列参数,B(1x2)表示输入矩阵B中的1行2列参数,C(2x2)表示输出矩阵C在上一次乘加计算得到的对应该A(2x1)*B(1x2)的2行2列的当前值,C’(2x2)表示本次乘加计算的更新后结果。

例如,缓存结构中共提供有64个1级缓存节点,每4个1级缓存节点共享一个2级缓存节点,16个二级缓存节点共享1个3级缓存节点。

例如,若从1级缓存节点到计算单元的数据搬运延时为8个时钟周期,从2级缓存节点(经由1级缓存节点)搬运到计算单元的延时为32个时钟周期,从3级缓存节点(经由1级缓存节点和2级缓存节点)搬运到计算单元的延时为64个时钟周期,则每个1级缓存节点中存储的数据量为:

1级只读缓存区中存储了8组A(2x1)和B(1x2),即8*(2x1+1x2)*1bytes=32bytes;

1级读写缓存区中存储了1组C(2x2),即1*2x2*1bytes=4bytes。

因此,在1级只读缓存区和1级读写缓存区中数据量比为8:1。

2级只读缓存区里存储了32组A(4x1)和B(1x4),即32*(4x1+1x4)*1bytes=256bytes,2级读写缓存区里存储了1组C(4x4),即1*4x4*1bytes=16bytes,因此,在2级只读缓存区和2级读写缓存区中数据量比为16:1。

3级只读缓存区里存储了64组A(16x1)和B(1x16),即64*(16x1+1x16)*1bytes=2048bytes,3级读写缓存区里存储了1组C(16x16),即16x16*1bytes=256bytes,因此,在3级只读缓存区和3级读写缓存区中数据量比为8:1。

由比例关系可以看出,相对于读写数据,只读数据部分占比很高,这和参与运算的矩阵尺寸和数据搬运延时,以及计算单元的运算能力(运算硬件资源)有关。输入矩阵A和输入矩阵B的大小以及数据搬运延时决定了只读数据量的大小;计算单元的运算能力决定了读写数据量的大小。由于计算单元的硬件资源总是有限的,所以读写数据量是有限的。但是由于输入矩阵A和输入矩阵B的尺寸根据应用需求有可能会很大,数据搬运的延时由于芯片尺寸增大也越来越大,所以存储输入矩阵A和输入矩阵B的缓存容量会相对比较大,那么根据输入矩阵A和输入矩阵B的只读特性,把存储输入矩阵A和输入矩阵B的缓存设计成只读缓存则可以有效减少缓存设计的复杂度,减少硬件开销和缓存结构占用的面积。

在本公开至少一实施例提供的缓存结构中,设计了读写和只读分离式的缓存结构,针对矩阵计算更加友好。矩阵计算中的输入矩阵是只读特性,输出矩阵是读写特性,输入矩阵的数据缓存在各级缓存的只读缓存区,输出矩阵的数据缓存在各级缓存的读写缓存区。由于相对于读写数据,只读数据部分占比很高,这种设置方式可以节省缓存结构占用的面积,并且由于只读缓存区的设计复杂度低,功耗也低,可以整体上减少缓存结构的设计复杂度和功耗。尤其在输入矩阵的尺寸较大时,由于输入矩阵和输出矩阵存储在不同的缓存区,彼此独立不会互相干扰,读取输入矩阵A和B的参数时不会冲刷掉输出矩阵C的参数,减少数据搬运导致的延迟,减少硬件开销,提升计算效率。

本公开至少一实施例还提供一种电子设备。图3为本公开至少一实施例提供的电子设备的示意性结构图。

如图3所示,该电子设备100包括如本公开任一实施例所述的缓存结构101。关于缓存结构101的结构、功能、技术效果如前所述,这里不再赘述。

如图3所示,该电子设备100还包括与N级缓存一一对应的N级任务分发单元102以及N个层级的线程组103。

例如,每级任务分发单元包括至少一个任务分发单元,每个层级的线程组包括至少一个线程组。

例如,线程组是指一组线程组合在一起,每个线程组中的所有线程执行相同的指令,但每个线程读写该线程私有的数据。

例如,任务分发单元可以是硬件实现形式,例如由专门的硬件结构实现,或者可以是软件实现形式,例如以程序代码形式实现,本公开对此不做具体限制。

例如,N级任务分发单元中位于第j级的第j级任务分发单元的数量与N级缓存中对应的第j级缓存包括的j级缓存节点的数量相同且一一对应,j为小于等于N的正整数。

例如,第j级缓存包括J个j级缓存节点,J为正整数,则位于第j级的j级任务分发单元的数量也是J,且与J个j级缓存节点一一对应,每个j级任务分发单元管理对应的j级缓存节点。

例如,第N级缓存包括1个N级缓存节点,N级任务分发单元中位于第N级的第N级任务分发单元的数量也是1,该第N级任务分发单元管理该N级缓存节点。

例如,N个层级的线程组中位于第j级的j级线程组的数量与N级缓存中对应的第j级缓存包括的j级缓存节点的数量相同且一一对应,每个j级线程组包括的线程共享对应的j级缓存节点以缓存数据。

例如,第j级缓存包括J个j级缓存节点,j级线程组的数量也是J,且和J个j级缓存节点一一对应,例如,J个j级线程组中的j级线程组1包括的线程可以共享J个j级缓存节点中对应的j级缓存节点(例如j级缓存节点1),以缓存数据或传输数据。

例如,这里所描述的N个层级的线程组是在一个操作周期内执行的线程组,例如在一个操作时刻下执行的线程组。根据计算任务的不同,可以将计算任务分成多个N级线程组,在不同操作周期内分时执行。

例如,N级线程组包括256个线程,该256个线程可以进一步分成多个N-1级线程组,每个N-1级线程组可再进一步分成多个N-2级线程组。最终,每个1级线程组包括的线程数量由计算单元能够并发执行的任务数目决定,从而N级线程组包括的线程数量由每个计算单元能够并发执行的任务数目和计算单元(或1级缓存节点)的总数决定,例如N级线程组包括的线程数量为每个计算单元能够并发执行的任务数目和计算单元(或1级缓存节点)的总数的乘积。

例如,N级任务分发单元中的位于第N级的第N级任务分发单元配置为将用于矩阵计算的总任务拆分成P1个第一任务,分别分配给P1个N级线程组分时执行,P1为正整数。例如,每个第一任务由一个对应的N级线程组执行。

例如,P1的数量可以根据N级线程组包括的线程总数以及总任务的数据量决定。例如,以输入矩阵A、输入矩阵B、输出矩阵C和C’都是INT8精度(数据量为1byte)的256x256尺寸大小的矩阵,实现矩阵乘加运算C’=C+A*B为例,N级线程组包括的线程总数假设为64*4=256,例如共有64个一级缓存节点,每个计算单元能够并发执行4个任务,则P1=256x256/256=256。

例如,在一些实施例中,在一个操作周期内,电子设备配置为执行1个N级线程组对应的第一任务。

例如,在该实施例中,可以统一调度所有计算单元在一个操作周期内执行同一个第一任务。例如,P1个第一任务可以分时顺序执行。

例如,在另一些实施例中,电子设备配置为一次性读取执行P1个第一任务中的多个第一任务所需的输入矩阵的参数至N级缓存节点,以及调度多个计算单元在多个操作周期内执行完多个第一任务。

例如,在该实施例中,各个计算单元可以分开调度,独立控制,以切换线程方式乱序执行该多个第一任务。例如,根据存储空间的大小,例如存储空间中可以存储D(D为大于1的正整数)个第一任务的任务信息,任务信息包括各个第一任务的计算所需参数在输入矩阵中的位置、坐标等,则可以一次性读入D个第一任务所需的输入矩阵的参数至N级缓存节点,各个计算单元依据计算所需的输入数据是否准备好决定当下执行哪个第一任务。例如,在该实施例中,不是在一个操作周期同时执行多个N级线程组,而是各个计算单元可以独立控制,在一个操作周期内执行同一个或不同的第一任务,只要在多个操作周期后尽可能同时执行完该D个第一任务即可。

例如,第N级任务分发单元还配置为选择至少一个第一任务,将每个第一任务拆分成P2个第二任务,以得到由每个第一任务对应的N级线程组拆分得到的P2个N-1级线程组,并将P2个N-1级线程组分发给P2个第N-1级任务分发单元,其中,P2为N-1级缓存节点的数量。

例如,N级任务分发单元可以将用于矩阵计算的总任务拆分成P1个第一任务,并且,选择1个或多个第一任务进行拆分。针对每个第一任务,将该第一任务拆分成P2个第二任务,也即将该第一任务对应的N级线程组拆分成P2个N-1级线程组,并将该P2个N-1级线程组分发给P2个第N-1级任务分发单元。

例如,将该P2个N-1级线程组分发给P2个第N-1级任务分发单元可以包括将拆分的第二任务的任务信息,如各个第二任务的计算所需参数在输入矩阵中的位置、坐标等分配给对应的第2级任务分发单元,并进行存储。

例如,选择进行拆分的第一任务的数量可以根据第2级任务分发单元能够存储的第二任务的任务信息的存储空间大小决定,例如若仅能够存储P2个第二任务的任务信息,则拆分一个第一任务,若能存储多组P2个第二任务的任务信息,则可以拆分多个第一任务。

例如,每个第k级任务分发单元配置为将接收的第k+1级任务分发单元分发的k级线程组拆分成P3个k-1级线程组,分发给相应的P3个第k-1级任务分发单元。例如,P3为共享一个k级缓存节点的k-1级缓存节点的数量,相应的P3个第k-1级任务分发单元为共享第k级任务分发单元对应的k级缓存节点的P3个k-1级缓存节点所对应的P3个第k-1级任务分发单元。这里,k为大于1小于N的正整数。

例如,每个第1级任务分发单元配置为将接收的1级线程组分发到对应的1级缓存节点以利用该1级缓存节点对应的计算单元执行矩阵计算任务,例如利用1级缓存节点对应的计算单元中的运算模块执行具体的乘法计算或乘加计算。

例如,N级线程组包括的线程数量由1级缓存节点的数量及每个计算单元能够并行执行的任务数目决定,每个k级线程组包括的线程总数等于P3个k-1级线程组包括的线程总和,每个1级线程组包括的线程总数等于计算单元能够并行执行的任务数目。

图4为本公开至少一实施例提供的N级任务分发单元的示意性框图。

图4中示出了N=3,也即缓存结构为3级缓存时对应的N级任务分发单元的结构,当然,本公开不限于此,N取其它值时的结构关系是类似的,这里不再重复示出。

例如,如图4所示,第3级任务分发单元对应3级缓存,其数量为1且对应3级缓存节点,3级任务分发单元配置为将用于矩阵计算的总任务拆分成P1个第一任务,分别分配给P1个3级线程组分时执行。例如,如前所述,可以在不同操作周期中顺序执行该P1个第一任务,或者,可以以切换线程方式乱序执行该P1个第一任务,本公开对此不做具体限制。

例如,3级任务分发单元还配置为选择至少一个第一任务,例如选择1个或多个或P1个第一任务,将每个第一任务拆分成P2个第二任务,以得到由每个第一任务对应的3级线程组拆分得到的P2个2级线程组,并将该P2个2级线程组分发给P2个第2级任务分发单元。

例如,第2级任务分发单元的数量与2级缓存节点的数量相同且一一对应,第1级任务分发单元的数量与1级缓存节点的数量相同且一一对应。

例如,每个第2级任务分发单元配置为将接收的第3级任务分发单元分发的2级线程组拆分成P3个1级线程组,分发给相应的P3个第1级任务分发单元。

例如,对于第2级任务分发单元1,其对应2级缓存节点1,2级缓存节点1被P3个1级缓存节点共享,则第2级任务分发单元1配置为将拆分的P3个1级线程组分发给该P3个1级缓存节点对应的P3个第1级任务分发单元。

例如,每个第1级任务分发单元配置为将接收的1级线程组分发到对应的1级缓存节点以执行具体的矩阵计算任务。

例如,在一个实施例中,仍以输入矩阵A、输入矩阵B、输出矩阵C和C’都是INT8精度(数据量为1byte)的256x256尺寸大小的矩阵,实现矩阵乘加运算C’=C+A*B为例。

例如,缓存结构中共提供有64个1级缓存节点,每4个1级缓存节点共享一个2级缓存节点,16个二级缓存节点共享1个3级缓存节点。

因此,1级线程组包括4个线程;2级线程组则包括4*4=16个线程;3级线程组包括4*4*16=256个线程。

输出矩阵C的大小为256x256(256行256列),可以分成共256x256/256=256个3级线程组。因此,每个3级线程组可以实现C’(16x16)=C(16x16)+A(16x256)*B(256x16)的计算,一个3级线程组拆分得到的每个2级线程组可以实现C’(4x4)=C(4x4)+A(4x256)*A(256x4)的计算,一个2级线程组拆分得到的每个1级线程组可以实现C’(2x2)=C(2x2)+A(2x256)*B(256x2)的计算。

例如,第3级任务分发单元将该矩阵计算的总任务分成256个第一任务,每个第一任务对应的3级线程组包括256个线程;并且,第3级任务分发单元还配置为将每个第一任务分成16个第二任务,也即将3级线程组包括的256个线程拆分成16个2级线程组,每个2级线程组包括16个线程,并将16个第二任务对应的16个2级线程组分配给16个第2级任务分发单元。

例如,每个第2级任务分发单元将接收的第3级任务分发单元分发的1个包括16个线程的2级线程组,拆分成4个1级线程组,分发给相应的4个1级任务分发单元。每个1级任务分发单元将接收的1级线程组中的4个线程分配给运算模块进行矩阵计算。

例如,若每个计算单元的并发计算能力为每个操作周期完成C’(2x2)=C(2x2)+A(2x1)*B(1x2),所以完成C’(2x2)=C(2x2)+A(2x256)*B(256x2)的运算需要256个操作周期。假设所有的计算单元同时执行运算,则1个3级线程组实现C’(16x16)=C(16x16)+A(16x256)*B(256x16)的计算共需要256个时钟周期。

图5为本公开至少一实施例提供的层次化线程组的结构示意图。

如图5所示,第3级任务单元配置为将一个用于矩阵计算的总任务分成多个第一任务,每个第一任务对应一个三级线程组。依据前述内容,一个三级线程组被拆分成多个2级线程组,例如每个2级线程组对应一个由第一任务拆分得到的第二任务。依据前述内容,每个二级线程组又被拆分成多个1级线程组,例如每个1级线程组对应一个由第二任务拆分得到的第三任务。

由于任务分层分发,这种方式可以很好地利用参数之间的相关性,使得任务被局部化,保证参数位置相近的任务尽可能划分在一个线程组中执行,共享同一个缓存节点,将该缓存节点下挂的下一级缓存节点相关的任务都紧密联系起来,尽可能实现数据复用,提高缓存数据复用率,减少从外部存储器读取数据的次数,减少缓存容量,减少缓存硬件资源开销。

例如,每个任务分发单元配置为根据输入矩阵的参数之间的数据相关性拆分线程组。

例如,针对根据输入矩阵的参数之间的数据相关性拆分得到的多个j-1级线程组,j级缓存节点中的具有只读权限的只读缓存区中缓存的数据能够被共享j级缓存节点的对应多个j-1级线程组的多个j-1级缓存复用。

图6为本公开一实施例提供的线程组拆分关系的示意图。

如图6所示,灰色长条矩形表示为执行某个第一任务时从外部存储器中读取的输入矩阵A在3级只读缓存区中存储的数据,白色长条矩形表示为执行该第一任务从外部存储器中读取的输入矩阵B在3级只读缓存区中存储的数据。

例如,假设缓存结构中共提供有64个1级缓存节点,每4个1级缓存节点共享一个2级缓存节点,16个2级缓存节点共享1个3级缓存节点。

例如,在图6中,虚线框所示为1个2级缓存节点,图6中共示出了16个2级缓存节点。每个2级缓存节点包括用于缓存输出矩阵C的数据的2级读写缓存区,以及2级只读缓存区,2级只读缓存区用于缓存该缓存节点所需的输入矩阵A的数据(例如表示为图6中位于各个2级读写缓存区左侧的灰色矩形框)和该缓存节点所需的输入矩阵B的数据(例如表示为图6中示出的位于各个2级读写缓存区上侧的白色矩形框)。

例如,在图6的示例中,3级只读缓存区中的输入矩阵A和输入矩阵B数据可以被其下挂的16个2级只读缓存区复用。例如,1个三级线程组被拆分为16个2级线程组,以16个2级线程组排列成4x4的形式为例,每个2级只读缓存区中输入矩阵A的数据(紧邻各个2级读写缓存区的灰色矩形框)会被横向4个2级只读缓存区复用,每个输入矩阵B的数据(紧邻各个2级读写缓存区的白色矩形框)会被纵向4个2级只读缓存区复用。

类似地,2级只读缓存区中的输入矩阵A和输入矩阵B数据可以被其下挂的4个1级只读缓存区复用,这里不再赘述。

当然,图6所示为一种可能的拆分策略,例如也可以将16个2级只读缓存区排列成1行16列形式,此时该16个2级只读缓存区可以共同复用输入矩阵A的数据,但不复用输入矩阵B的数据。

在上述实施例中,任务分发分层策略可以尽可能地保证数据复用,实现根据数据相关性拆分线程组,减少需要缓存的数据大小,减少缓存容量,减少缓存硬件资源的开销。

例如,该缓存结构及任务分发单元对于GPU或GPGPU的优化更加显著,例如该电子设备可实现为GPGPU或GPU。当然,本公开不限于此,该电子设备可以实现为单核CPU、多核CPU、GPU、GPGPU等任何需要缓存结构的电子设备。例如,中央处理元(CPU)可以为X86或ARM架构等,本公开对电子设备的具体架构也不做具体限制。

当然,需要说明的是,本公开至少一实施例提供的电子设备中的N级任务分发单元以及N个层级的线程组不仅限于本公开至少一实施例提供的缓存结构,也可适用于其他层次化的缓存结构,本公开对此不作具体限制。

此外,虽然本公开对根据本公开的实施例的系统中的某些单元做出了各种引用,然而,任何数量的不同单元可以被使用并运行在客户端和/或服务器上。单元仅是说明性的,并且系统和方法的不同方面可以使用不同单元。

本领域普通技术人员可以理解上述方法中的全部或部分的步骤可通过计算机程序来指令相关硬件完成,程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本公开并不限制于任何特定形式的硬件和软件的结合。

除非另有定义,这里使用的所有术语具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。

以上是对本公开的说明,而不应被认为是对其的限制。尽管描述了本公开的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本公开的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本公开范围内。应当理解,上面是对本公开的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本公开由权利要求书及其等效物限定。

相关技术
  • 一种基于教育云平台的缓存数据的方法及电子设备
  • 一种数据缓存方法及装置、电子设备
  • 一种基于浏览器断电保护缓存信息的方法以及电子设备
  • 用于加强复合式路面层间结合的锚栓设计方法
  • 缓存控制方法、装置、缓存行结构、电子设备和存储介质
技术分类

06120116512690