首页 / 专利库 / 资料储存系统 / 大容量存储 / 张量数据分块存取的方法及装置

张量数据分存取的方法及装置

阅读:913发布:2020-05-08

专利汇可以提供张量数据分存取的方法及装置专利检索,专利查询,专利分析的服务。并且公开了一种张量数据分 块 存取的方法及装置。包括:依次读取张量数据的多个数据块;对所述数据块进行压缩,以获得压缩数据块;以及,将所述压缩数据块存储到 存储器 中与所述压缩数据块对应的预定存储空间中。通过该方法能够显著减少张量数据计算时对数据传输带宽的需求,从而在较低的 硬件 成本下高效的执行张量数据的存取。,下面是张量数据分存取的方法及装置专利的具体信息内容。

1.一种张量数据分存取方法,包括:
依次读取张量数据的多个数据块;
对所述数据块进行压缩,以获得压缩数据块;以及
将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中。
2.根据权利要求1所述的方法,其中,所述多个数据块是在至少一个维度上对所述张量数据进行划分而获得的。
3.根据权利要求1所述的方法,其中,对所述数据块进行压缩包括:
生成所述数据块的索引,所述索引用于指示所述数据块中的各个数据是否为预定值;
以及
删除所述数据块中取值为所述预定值的数据,以获得压缩数据;
其中,所述压缩数据块包括所述索引和所述压缩数据。
4.根据权利要求2所述的方法,还包括:
在所述存储器中为所述压缩数据块分配所述预定存储空间;
其中,与所述张量数据的多个压缩数据块对应的多个预定存储空间是彼此连续的。
5.根据权利要求4所述的方法,其中,为各个压缩数据块分配的所述预定容量是彼此相等的。
6.根据权利要求1所述的方法,其中,相邻数据块的边缘部分彼此重叠,并且在一维度上相邻的两个数据块的重叠区域的大小由用于对该数据块执行卷积运算的卷积核在该维度上的大小确定。
7.根据权利要求6所述的方法,其中,每个数据块在所述至少一个维度上的粒度等于基础值加上所述重叠区域的大小的一半,所述基础值由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。
8.根据权利要求1所述的方法,其中,每个数据块在所述至少一个维度上的粒度由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。
9.一种张量数据分块存取方法,包括:
基于要读取的张量数据的至少一部分的维度坐标,确定存储器中与所述张量数据的至少一部分对应的预定存储空间;
从所述预定存储空间读取对应的压缩数据块;
对所述压缩数据块进行解压缩以获得对应的数据块;以及
基于所述数据块获得所述张量数据的所述至少一部分。
10.根据权利要求9所述的方法,还包括:
预先根据权利要求1至8中的任一项所述的张量数据分块存取方法将所述张量数据存储到所述存储器中。
11.一种电子设备,包括:
一个或多个处理器;以及
存储器,存储有计算机指令,所述计算机指令在被所述处理器运行时使所述处理器执行根据权利要求1至10中的任一项所述的张量数据分块存取方法。
12.一种张量数据分块存取装置,包括:
第一读取单元,被配置为依次读取张量数据的多个数据块;
压缩单元,被配置为对所述数据块进行压缩,以获得压缩数据块;以及存储单元,被配置为将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中。
13.根据权利要求11所述的装置,还包括:
存储空间分配单元,被配置为在所述存储器中为所述压缩数据块分配所述预定存储空间;
其中,与所述张量数据的多个压缩数据块对应的多个预定存储空间是彼此连续的。
14.一种张量数据分块存取装置,包括:
存储空间确定单元,被配置为基于要读取的张量数据的至少一部分的维度坐标,确定存储器中与所述张量数据的至少一部分对应的预定存储空间;
第二读取单元,被配置为从所述预定存储空间读取对应的压缩数据块;
解压缩单元,被配置为对所述压缩数据块进行解压缩以获得对应的数据块;以及数据获取单元,被配置为基于所述数据块获得所述张量数据的所述至少一部分。
15.一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行如权利要求1至10中的任一项所述的张量数据分块存取方法。

说明书全文

张量数据分存取的方法及装置

技术领域

[0001] 本申请涉及一种张量数据分块存取的方法及装置。

背景技术

[0002] 对张量数据执行计算时,需要从较大容量的存储器(比如,作为内存的DDR)中读取该张量数据并存入高速存储器(比如,SRAM),但因张量数据较大以及高速存储器存储空间的限制,需要对张量数据执行分批计算。
[0003] 为节省存储空间同时降低对数据传输带宽的需求,在对张量数据执行计算之前需要先将张量数据压缩再存储至存储器中(比如,作为内存的DDR)。对张量数据执行计算时,每次计算都需要按照该张量数据压缩时的粒度从存储器中读取数据。但由于张量数据压缩时的粒度过大,远超过每次计算时需读取数据的数量,导致每次计算时无法按照计算所需数据的粒度来进行读取,而是每次计算都需要读取远超过计算所需的数据,这样,对张量数据的压缩不仅未能节省对数据传输带宽的需求,反而给有限的数据传输带宽带来了更大的负担,对存储器、高速存储器等硬件资源的性能需求更高,消耗也更大,同时还会降低整个张量数据的存取效率。因此,需要一种张量数据的分块压缩存取方案,以减少张量数据计算时对数据传输带宽的需求,从而在较低的硬件成本下高效的执行张量数据的存取。发明内容
[0004] 为了解决上述技术问题,提出了本申请。本申请的实施例提供了一种张量数据分块存取的方法及装置。
[0005] 根据本申请的一个方面,提供了一种张量数据分块存取方法,包括:
[0006] 依次读取张量数据的多个数据块;
[0007] 对所述数据块进行压缩,以获得压缩数据块;以及
[0008] 将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中。
[0009] 根据本申请的另一个方面,还提供了一种张量数据分块存取方法,包括:
[0010] 基于要读取的张量数据的至少一部分的维度坐标,确定存储器中与所述张量数据的至少一部分对应的预定存储空间;
[0011] 从所述预定存储空间读取对应的压缩数据块;
[0012] 对所述压缩数据块进行解压缩以获得对应的数据块;以及
[0013] 基于所述数据块获得所述张量数据的所述至少一部分。
[0014] 根据本申请的另一方面,还提供一种电子设备,包括:一个或多个处理器;以及,存储器,存储有计算机指令,所述计算机指令在被所述处理器运行时使所述处理器执行上述张量数据分块存取的方法。
[0015] 根据本申请的另一方面,还提供一种张量数据分块存取装置,包括:
[0016] 第一读取单元,被配置为依次读取张量数据的多个数据块;
[0017] 压缩单元,被配置为对所述数据块进行压缩,以获得压缩数据块;以及
[0018] 存储单元,被配置为将所述压缩数据块存储到存储器中对应的预定存储空间中。
[0019] 根据本申请的另一方面,还提供一种张量数据分块存取装置,包括:
[0020] 存储空间确定单元,被配置为基于要读取的张量数据的至少一部分的维度坐标,确定存储器中与所述张量数据的至少一部分对应的预定存储空间;
[0021] 第二读取单元,被配置为从所述预定存储空间读取对应的压缩数据块;
[0022] 解压缩单元,被配置为对所述压缩数据块进行解压缩以获得对应的数据块:以及[0023] 数据获取单元,被配置为基于所述数据块获得所述张量数据的所述至少一部分。
[0024] 另外,本申请还提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行如上述张量数据分块存取的方法。
[0025] 通过根据本申请的示例的方法和装置,将张量数据以数据块的形式压缩获得数据数量明显小于数据块本身的压缩数据块,并以压缩数据块的形式存储到存储器中对应的预定存储空间,在计算过程中可以直接按照每次计算所需数据的数量来向该存储器读取压缩数据块,这样,不仅每次计算时从存储器中读取数据的数量在满足计算需求的前提下有明显减少,而且以压缩数据块的形式进行读取,该压缩数据块的数据数量相较于数据块本身来说也有明显减少,从而显著减少张量数据计算过程中对数据传输带宽的需求,在较低的硬件成本下实现了高效的张量数据存取。附图说明
[0026] 在下文中将结合附图来描述根据本申请的示例,附图中:
[0027] 图1是本申请一示例性实施例提供的张量数据分块存取方法的流程示意图。
[0028] 图2是本申请另一示例性实施例提供的张量数据分块存取方法的流程示意图。
[0029] 图3是本申请一示例性实施例提供的数据块示例的示意图。
[0030] 图4是本申请一示例性实施例提供的卷积神经网络中数据块示例的示意图。
[0031] 图5是本申请一示例性实施例提供的预定存储空间的分区示例的示意图。
[0032] 图6是本申请一示例性实施例提供的预定存储空间排布示例的示意图。
[0033] 图7是本申请另一示例性实施例提供的预定存储空间排布示例的示意图。
[0034] 图8是本申请又一示例性实施例提供的预定存储空间排布示例的示意图。
[0035] 图9是本申请一示例性实施例的高速存储器中张量数据的存储示意图。
[0036] 图10是本申请一示例性实施例提供的张量数据分块存取装置的结构图。
[0037] 图11是本申请另一示例性实施例提供的张量数据分块存取装置的结构图。
[0038] 图12是本申请一示例性实施例提供的电子设备的结构图。

具体实施方式

[0039] 下面,将参考附图详细地描述根据本申请的示例实施例。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。
[0040] 申请概述
[0041] 如上文所述,对张量数据执行计算的过程,由于张量数据压缩时的粒度过大,远大于每次计算时需读取数据的数量,导致每次计算时无法按照计算所需数据的数量来进行读取,而是每次都要读取远超过每次计算所需的数据量,这样,对张量数据的压缩不仅未能节省数据传输带宽,反而给有限的数据传输带宽带来了更大的负担,对存储器、高速存储器等硬件资源的性能需求更高,消耗也更大,同时还会降低整个张量数据的存取效率。因此,需要一种张量数据的分块压缩存取方案,以减少张量数据读写时对数据传输带宽的需求,从而在较低的硬件成本下高效的执行张量数据的存取。
[0042] 下面以卷积神经网络为例进行说明。
[0043] 卷积神经网络可以包括一个或多个卷积层。在每个卷积层中,使用该层的卷积核对该层的输入特征图(也可以称为输入的特征数据)执行该层的卷积运算,以获得该层的输出特征图。在卷积神经网络的各层中,输入的特征图和输出的特征图均为张量数据,可以具有一定的宽度、高度和深度(也可称为通道数)。在卷积神经网络运算过程中,因高速存储空间有限,只能完成部分特征图的计算,因而多数情况下在每层执行卷积运算时都需要将其输入特征图(即张量数据)进行不同程度的拆分,然后分批进行卷积运算,即需要对张量数据执行分批计算。
[0044] 卷积神经网络中每层的分批运算中,每次运算都需要从大容量的存储器(比如,作为内存的DDR)读取输入特征图(即一张量数据)的一部分放入高速存储器(比如,SRAM)中,以便从高速存储器中取数据进行卷积运算。同样,每次运算的运算结果(即另一张量数据的一部分)也需要先写入高速存储器,待该次运算结束后再从高速存储器中读出运算结果并存至存储器中。如此,在一层的分批运算结束后,该分批运算中各次的运算结果(即另一张量数据的一部分)在存储器(比如,内存)中拼接为该层的输出特征图(即另一张量数据),该输出特征图可作为下一层的输入特征图,也可作为卷积神经网络的输出结果。
[0045] 为节省存储空间同时降低对数据传输带宽的需求,在卷积神经网络每层执行卷积运算之前,其输入特征图也需要压缩后再存入存储器中。目前,卷积神经网络每层的输入特征图要么需要整体压缩,要么需要按照其上一层的输出粒度进行压缩。但是,卷积神经网络每层执行卷积运算时其输入粒度往往与上一层的输出粒度不同,且远小于输入特征图本身的粒度,因此,在卷积神经网络每层的一次运算中,都无法按照此次计算所需数据的粒度来进行读取,而是需要读取更多数量的数据,所读取的数据的数量将远超过本次计算所需数据的数量,这样,对输入特征图(即张量数据)的压缩不仅未能节省每次卷积运算时对数据传输带宽的需求,反而给有限的数据传输带宽带来了更大的负担,对存储器等硬件资源的性能需求更高,消耗也更大,同时还会降低输入特征图的存取效率,进而影响卷积运算的整体执行效率。
[0046] 针对上述技术问题,本申请的基本构思是提出一种张量数据分块存取的方法、装置、电子设备及计算机可读存储介质,依次读取张量数据的多个数据块,对所述数据块进行压缩以获得压缩数据块,将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中,如此,在不改变张量数据中各个数据维度顺序的前提下将张量数据以数据块的形式压缩获得数据数量明显小于数据块本身的压缩数据块,并以压缩数据块的形式存储到存储器中对应的预定存储空间,在计算过程(尤其是张量数据的分批计算过程中)中可以直接按照每次计算所需数据的数量(比如,此次计算所需数据的粒度,也可称为每次计算的输入粒度)来向该存储器读取压缩数据块,这样,不仅每次计算时从存储器中读取数据的数量在满足计算需求的前提下有明显减少,而且可以压缩数据块的形式进行读取,该压缩数据块的数据数量相较于数据块本身来说也有明显减少,从而显著减少张量数据计算过程中对数据传输带宽的需求,在较低的硬件成本下实现了高效的张量数据存取。
[0047] 需要说明的是,上文虽以卷积神经网络为例进行说明,但本申请的实施例不限于此。本申请的实施例可适用于各种场景。比如,本申请的实施例可用于对表征图像的张量数据进行分块存取。特别地,本申请的实施例可用于卷积神经网络,该张量数据的分块存取不仅可适用于卷积神经网络的两层之间特征图的分块存取,也可适用于卷积神经网络的首层的特征图的分块存取,更可应用于卷积神经网络之外的场景。
[0048] 示例性系统
[0049] 本申请的实施例可适用于任何可对张量数据执行计算的系统。一个示例中,对张量数据执行计算的系统可以包括一个或多个对张量数据执行全部或阶段性计算的第一设备,每个第一设备至少可以包括计算单元、高速存储器和较大容量的存储器。其中,张量数据存储在存储器中,在需要对张量数据的至少一部分执行计算时,从存储器中读取张量数据的至少一部分并存入高速存储器,计算单元利用该高速存储器中的数据执行计算,并将计算得到的结果(即另一张量数据的一部分)先存入高速存储器、再从高速存储器读出并存储到存储器中。一个示例中,该计算单元可以为用于执行卷积神经网络中卷积运算的乘加单元。实际应用中,上述第一设备可以通过一个或多个具有张量数据处理的芯片(诸如GPU、BPU、TPU等)来实现,视张量数据的计算复杂度以及张量数据的数据量而定。
[0050] 需要说明的是,尽管本文以高速存储器与存储器之间的张量数据存取为例进行说明,但实际应用中,本申请实施例的张量数据分块存取方法可应用于任意两个存储器之间张量数据的存取,且这两个存储器的类型不限。以压缩数据块形式存储张量数据并支持以压缩数据块的形式读取张量数据的存储器(即乘加单元存储器)可以是内存(例如DDR)或非易失性存储器(例如硬盘、SSD、Flash、EEPROM等)。乘加单元中的高速存储器可以为SRAM或其他支持高速读写的存储器。
[0051] 示例性方法
[0052] 下面对本申请实施例的张量数据分块存取方法的具体实现方式进行详细说明。
[0053] 图1示出了本申请实施例的张量数据分块存取的示例性方法100。其中,包括:
[0054] 步骤110,依次读取张量数据的多个数据块;
[0055] 步骤120,对所述数据块进行压缩,以获得压缩数据块;以及
[0056] 步骤130,将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中。
[0057] 图2示出了本申请实施例的张量数据分块存取的又一示例性方法200,该方法包括:
[0058] 步骤210,基于要读取的所述张量数据的至少一部分的维度坐标,确定与所述张量数据的至少一部分对应的预定存储空间;
[0059] 步骤220,从所述预定存储空间读取对应的压缩数据块;
[0060] 步骤230,对所述压缩数据块进行解压缩以获得对应的数据块;以及
[0061] 步骤240,基于所述数据块获得所述张量数据的所述至少一部分。
[0062] 这里,在示例性方法200中,步骤210之前,还可以包括:预先通过示例性方法100将所述张量数据存储到所述存储器中的预定存储空间。本申请实施例的上述张量数据分块存取方法,能够在不改变张量数据中各个数据的维度顺序的前提下将张量数据以数据块的形式压缩获得数据数量明显小于数据块本身的压缩数据块,并以压缩数据块的形式存储到存储器中对应的预定存储空间,在计算过程中可以直接按照每次计算所需数据的数量来向该存储器读取压缩数据块,这样,不仅每次计算时从存储器中读取数据的数量在满足计算需求的前提下有明显减少,而且以压缩数据块的形式进行读取,该压缩数据块的数据数量相较于数据块本身来说也有明显减少,从而显著减少张量数据计算过程中对数据传输带宽的需求,在较低的硬件成本下实现了高效的张量数据存取。
[0063] 本申请的实施例中,步骤120中可以通过删除部分取值相同的数据来实现数据块的压缩。具体来说,可以根据数据块中各个数据的取值生成其索引,通过该索引指示该数据块中各个数据的取值是否为预定值,同时将该数据块中取值为该预定值的数据删除,得到该数据块的压缩数据,进而获得压缩数据块,该压缩数据块包括上述索引和压缩数据。这样,通过压缩获得的压缩数据块相较于压缩前的数据块来说,数据的数量明显减小,以压缩数据块的形式向存储器存取时其数据传输带宽的需求将相应地明显减小,从而节省了张量数据存取时的数据传输带宽,减少了张量数据在存储器中占用的存储空间,进而降低了存储器等硬件资源的成本并提高其利用率,实现了较低硬件成本下张量数据的高效存取。
[0064] 具体应用中,可以根据数据块的特点、具体场景的情况确定上述预定值,例如,可以通过遍历数据块中各个数据的取值,确定数据块中占比最大且取值相同的部分数据作为删除对象,相应的该删除对象的取值则可确定为上述预定值。再比如,可以预先设置上述预定值为一经验值,该经验值可通过统计分析获得。在一个示例中,上述预定值可以为零值。以卷积神经网络为例,其运算结果中零值数据占比较大,则以“零值”作为上述预定值。另外,实际操作中,可以通过动态配置或静态配置等方式来设置上述预定值,对于预定值的具体配置方式或具体确定方式,本文不予限制。
[0065] 一种示例中,索引可通过多位二进制数表示,该二进制数的位数与数据块的数据个数相同,索引中每位二进制数的取值用于指示数据块中对应位置处的数据取值是否为预定值。换言之,数据块包含多少位数据,其压缩数据块的索引中便包含相应多少位二进制数,且索引中每位二进制数的取值可指示数据块中相应位置的数据是否为预定值。如此,通过多位二进制数来表示压缩数据块的索引,不仅可通过该索引解压压缩数据块来获得数据块,解压后的数据块与数据块解压之前完全相同,不会影响计算精度,而且索引的数据量小且相对固定,其所占用的存储空间不仅很小而且易于确定,在有效节省每个压缩数据块所占用的存储空间的基础上还便于在预定存储空间中对索引和压缩数据进行分区,避免在向预定存储空间写入压缩数据时发生数据被覆盖的情况。
[0066] 需要说明的是,上述压缩方式以及索引的表示方式均为示例。本领域技术人员可以理解,在实际应用中数据块的压缩方式可以有多种,索引的表示方式也可以有多种,并不限于上述方式。在具体应用中,可根据数据块的特点、具体场景的不同来选择适合的压缩方式以及相应的索引表示方式。
[0067] 图3为一数据块的示例,其中,每个框中的数字或字母表示该数据块的一个数据的取值。由图3可以看出,该数据块中包含50%的零值。在此情况下,可以将上述预定值设置为零值,通过删除零值的方式对该数据块进行压缩。具体来说,对于图3的示例来说,数据块的压缩过程包括:生成索引“10001100011000111100000110111011”,同时将该数据块中的零值删除获得该数据块的压缩数据“yly2y3y4y5y6y7y8y9y10y11y12y13y14y15y16”,最终获得的压缩数据块包括索引“10001100011000111100000110111011”和压缩数据“yly2y3y4y5y6y7y8y9y10y11y12y13y14y15y16”。其中,索引中二进制数取值为“1”表示数据块中对应位置处的数据取值为非零,二进制数取值为“0”则表示数据块中对应位置处的数据取值为零。通过上述压缩,压缩数据块相较于原始的数据块来说数据的数量减少了近40%-50%,相应的,该压缩数据块所占用的存储空间和需使用的数据传输带宽也会相应减少40%-
50%,如此,以压缩数据块的形式存取时将显著减少张量数据在存储器中所占用的存储空间及其需使用的数据传输带宽。
[0068] 以卷积神经网络为例。为使得神经网络的表达能力更好,会在神经网络中加入激活函数,即在卷积运算之后进行激活操作(目前,常用的激活函数包括Sigmoid、Tanh、Relu、Softmax等),经过激活操作之后获得的输出特征图(即张量数据)中取值为负数的数据变为零值,正数部分仍保持原值。根据统计,卷积神经网络各层经过激活操作之后数据会有明显大于50%的零值数据,有的甚至达到70%。此场景下,可将上述预定值设置为零值,并通过删除零值的方式对对卷积神经网络各层输出的特征图的多个数据块进行压缩,压缩之后数据的数量仅有数据原始数量的40%-50%之间,甚至仅有30%。例如,按照经过激活操作有50%的0值数据来计算,实际压缩之后,压缩数据块的数据量(即index+非0data的数据量)是(1*n+8*n*50%)比特,而压缩之前该数据块的数据量是8*n比特,压缩比(即压缩前数据数量与压缩后数据数量的比值)为1.125-n,这里,n为0值数据在压缩前数据总量中的占比。
而在压缩数据块仅为数据块的30%-50%时,相应的以该压缩数据块的形式向存储器存取张量数据时对数据传输带宽的需求也相应地较少了50%-70%,由此可见,通过上述压缩方式对数据块进行压缩获得数据数量为该数据块本身数据数量30%-50%的压缩数据块,并以该压缩数据块的形式向存储器中存取张量数据,可显著降低张量数据存取过程中对数据传输带宽的需求,同时显著减少张量数据在存储器中所占用的存储空间,从而在较低的硬件成本下实现了张量数据的高效存取。
[0069] 需要说明的是,本申请的实施例中压缩方式不限于上述方式。实际应用中,可根据张量数据的具体计算需求、存储器的特点、场景的不同等因素采用不同的压缩方式。比如,可以通过移位或乘除法将数据块从高精度压缩为低精度,以减少数据块在存储器占用的存储空间,减少数据传输带宽的需求,提高张量数据的存取速度。
[0070] 本申请实施例中,步骤110中的多个数据块是在至少一个维度上对所述张量数据进行划分而获得的。这里,至少一个维度是指高度、宽度、深度这三个维度中的至少一个。具体来说,该多个数据块可以是在高度、宽度或深度上对张量数据进行划分而获得的,也可以是在高度、宽度和深度中的任意两个维度上进行划分而获得的,还可以是在高度、宽度和深度这三个维度上进行划分而获得的。
[0071] 本申请实施例中的数据块是指规则的块,即该数据块是在各维度上规则的数据块,其在各个维度上具有固定的尺寸(即粒度),比如,张量数据具有高度、宽度、深度这三个维度时,其数据块即为在高度、宽度和深度这三个维度上具有固定粒度值的张量,一个确定的数据块包含有维度坐标属于该数据块对应的维度坐标范围的所有数据,每个数据块中各个数据也可以按照其于张量数据中的顺序排列,其按照一个或多个维度的维度坐标顺序排列。一种示例中,一个确定的数据块可以通过各维度上的起始坐标和粒度值来唯一表示,或者可以通过各维度上的维度坐标区间来唯一表示。举例来说,一个确定的数据块可以通过高度、深度和宽度这三个维度上的维度坐标区间来表示,比如可以表示为{(h1,h2);(w1,w2);(c1,c2)},其中,(h1,h2)表示该数据块的高度坐标区间,h1为该数据块在高度方向上的末尾坐标,h2为该数据块在高度方向上的起始坐标,(w1,w2)表示该数据块的宽度坐标区间,w1为该数据块在宽度方向上的末尾坐标,w2为该数据块在宽度方向上的起始坐标,(c1,c2)表示该数据块的深度坐标区间,c1为该数据块在深度方向上的末尾坐标,c2为该数据块在深度方向上的起始坐标,相应的,表示为{(h1,h2);(w1,w2);(c1,c2)}的数据块包含张量数据中高度坐标在h1与h2之间、宽度坐标在w1与w2之间、深度坐标在c1和c2之间的所有数据。另一种示例中,该数据块可以通过高度、宽度和深度这三个维度上的“起始坐标+粒度值”来表示。举例来说,一个确定的数据块可以表示为{(h1,h0);(w1,w0);(c1,c0)},其中,h1为该数据块在高度方向上的起始坐标,h0为该数据块在高度方向上的粒度值,w1为该数据块在宽度方向上的起始坐标,w0为该数据块在宽度方向上的粒度值,c1为该数据块在深度方向上的起始坐标值,c0为该数据块在深度方向上的粒度值,相应的,表示为{(h1,h0);(w1,w0);(c1,c0)}的数据块中包含张量数据中高度坐标在h1与h1+h0之间、宽度坐标在w1与w1+w0之间、深度坐标在c1和c1+c0之间的所有数据。
[0072] 本申请实施例中,张量数据的多个数据块可能存在重叠。以卷积神经网络为例,张量数据中的相邻数据块的边缘部分彼此重叠,并且在一维度上相邻的两个数据块的重叠区域的大小可以由用于对该数据块执行卷积运算的卷积核在该维度上的大小确定。一种示例中,在一维度上相邻的两个数据块的重叠区域的大小可以等于 其中n是用于对该数据块执行卷积运算的卷积核在该维度上的大小。这里的“一维度”是指高度、宽度和深度中之一。具体来说,在卷积神经网络中,张量数据中的相邻两个数据块的重叠区域表现在高度和宽度上,那么,相邻两个数据块的重叠区域在高度方向的大小为 在宽
度方向的大小为 其中,n1为用于对该数据块执行卷积运算的卷积核在高度上
的大小,n2为用于对该数据块执行卷积运算的卷积核在宽度上的大小。
[0073] 本申请实施例中,可基于每次计算(尤其是对张量数据执行分批计算时的每次计算)所需数据在至少一个维度上的粒度来确定上述数据块在该维度上的粒度值。具体实现中,在步骤110之前可事先根据数据块在至少一个维度上的粒度值设置各预定存储空间对应的维度坐标范围,这样,经过读取、压缩和存储这一系列步骤之后,张量数据在存储器中以多个压缩数据块的形式存在,每个压缩数据块存放在一个预定存储空间中,该预定存储空间所对应维度坐标范围在至少一个维度上的粒度值、以及该压缩数据块在该维度上的粒度值等于相应数据块在该维度上的粒度值。这样,每个压缩数据块解压后获得的数据块在至少一个维度上的粒度值即满足上述确定的关系。
[0074] 下面以卷积神经网络为例说明如何确定所述数据块的粒度值。
[0075] 本申请实施例的一种实现方式中,每个数据块在至少一个维度上的粒度可以由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。一个示例中,每个数据块在所述至少一个维度上的粒度可以等于以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度之间的最大公约数。该实施方式中,由于存储器中各压缩数据块在各维度上的粒度值是以所述张量数据作为输入的神经网络的层在该维度上的输入粒度的约数,因此,以所述张量数据作为输入的神经网络的层在执行卷积运算时,每次运算只需读取整数倍个压缩数据块,并且基于该整数倍个压缩数据块获得的数据块中的数据与此次运算需要的数据相匹配即从存储器中读取的数据与计算所需的数据匹配,而且可以以压缩数据块的形式进行读取,该压缩数据块的数据数量明显少于数据块的数据数量(可能仅为该数据块中数据数量的30%-50%),从而减小了向存储器读取数据时的数据传输带宽,提高了张量数据的读取速度。同理,由于存储器中各压缩数据块在各维度上的粒度值是以所述张量数据作为输出的神经网络的层在该维度上的输出粒度的约数,因此,将以所述张量数据作为输出的神经网络的层的输出数据存储到存储器的过程中,可将该输出数据以整数倍个压缩数据块的形式存入存储器中,该压缩数据块的数据数量明显少于数据块的数据数量(可能仅为该数据块中数据数量的30%-50%),从而减小了向存储器中写入数据的数据传输带宽,提高了张量数据的存储速度。
[0076] 本申请实施例的另一种实现方式中,每个数据块在所述至少一个维度上的粒度等于基础值加上所述重叠区域的大小的一半,所述基础值由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。一个示例中,所述基础值可以等于以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度之间的最大公约数。该实施方式,减小了写入和读取时的数据传输带宽,提高了张量数据的存取速度,同时通过相邻数据块之间的重叠,可以保证以所述张量数据作为输入的神经网络的层在执行卷积运算时卷积核对该数据块边缘的数据进行卷积,而不需要调用相邻的数据块,使得以所述张量数据作为输入的神经网络的层执行卷积运算时每次运算都可读取到与本次所需数据恰好匹配的一个或多个压缩数据块,该压缩数据块的数据数量明显少于数据块的数据数量(可能仅为该数据块中数据数量的30%-50%),从而进一步减小了读取时的数据传输带宽,提高张量数据的读取速度。
[0077] 下面以一个示例来说明。
[0078] 如图4所示,神经网络第a层输出粒度为H1*W1*C1,即神经网络第a层分批执行卷积运算时每次运算的输出数据尺寸具体是高度H1、宽度W1、深度为C1,而神经网络第a+1层输入粒度为H2*W2*C2,即神经网络第a+1层分批执行卷积运算时每次运算的输入数据尺寸具体是高度为H2、宽度为W2、深度为C2,神经网络第a+1层包括C2个卷积核,每个卷积核为H3*W3*C3,即卷积核的高度为H3、宽度为W3、深度为C3,a为不小于0的整数。
[0079] 不考虑重叠区域的情况下,对于第a层的输出特征图即第a+1层输入特征图(即作为第a层输出且第a+1层输入的张量数据)来说,其数据块在高度上的粒度可以为H1和H2的最大公约数x,在宽度上的粒度可以为W1和W2的最大公约数y,在深度上的粒度可以为C1和C2的最大公约数z。若第a层的输出特征图的高度坐标区间为0~H1-1、宽度坐标区间为0~W1-1、深度坐标区间为0~C1-1,相应的,各个数据块中数据的坐标值(即数据块的维度坐标范围)为:数据块1中数据在高度上的坐标区间为0~x-1、在宽度上的坐标区间为0~y-1、在深度上的坐标区间为0~z-1,数据块2中数据在高度上的坐标区间为x~2x-1、在宽度上的坐标区间为0~y-1、在深度上的坐标区间为0~z-1,以此类推。
[0080] 由于对卷积运算来说相邻数据块仅在高度和宽度上有重叠区域,因此,在考虑重叠区域的情况下,对于第a层的输出特征图即第a+1层输入特征图(即作为第a层输出且第a+1层输入的张量数据)来说,其数据块在高度上的粒度等于H1和H2的最大公约数x加上在宽度上的粒度等于W1和W2的最大公约数y加上 在深度上的粒度等于C1
和C2的最大公约数z。若第a层的输出特征图的高度坐标区间为0~H1-1、宽度坐标区间为0~W1-1、深度坐标区间为0~C1-1,相应的,各个数据块中数据的坐标值(即数据块的维度坐标范围)可以为:数据块1中数据在高度上的坐标区间为 在宽度上的
坐标区间为 在深度上的坐标区间为0~z-1,数据块2中数据在高度
上的坐标区间为 在宽度上的坐标区间为
在深度上的坐标区间为0~z-1,以此类推。
[0081] 在上述示例中,在第a+1层对特征图执行分批卷积运算时,每次运算时只需读取本次所需的数据即可。举例来说,第a+1层的输入粒度为H2*W2*C2时,每次运算时从存储器(比如,DDR)中读取(H2×W2×C2)/(x×y×z)个压缩数据块即可,具体可根据本次运算所需数据的维度坐标来确定取哪几个压缩数据块。
[0082] 如果第a层执行分批卷积运算的次数为M,每次执行卷积运算的输出粒度是H1*W1*C1,其输出的特征图大小即为M×(H1×W1×C1),也就是说,第a+1层的输入特征图大小为M×(H1×W1×C1),在第a+1层输入粒度为H2*W2*C2时,第a+1层对该特征图执行分批卷积运算的次数即为N次, 那么,若采用整体压缩的方式,第a+1层执行N次计算时,每次执行卷积运算都需要从存储器取出大小约为M×(H1×W1×C1)的特征图,而使用本申请实施例的方法,第a+1层每次执行卷积运算仅需要从存储器中取出(H2×W2×C2)/(x×y×z)个压缩数据块,这些压缩数据块的数据数量仅为(H2×W2×C2)/(x×y×z)个数据块中数据数量的30%~50%,可能仅为H2*W2*C2的30%~50%。由此可见,对于神经网络来说,通过本申请实施例的方法可显著减小其卷积运算过程中张量数据存取时对数据传输带宽的需求。
[0083] 这里,如果a层的输出粒度为(64,64,32)(即高度64、宽度64、深度32),第a+1层的输入粒度为(32,32,16)(即高度32、宽度32、深度16),如果按照第a层的输出粒度进行压缩,每次取一个尺寸为(32,32,16)的数据,需要从存储器中读取尺寸为(64,64,32)的压缩数据,再从中选取(32,32,16)。如果a+1层的输入粒度为(96,96,48),则每次需要读取2x2x2=8个尺寸为(64,64,32)的压缩数据。由此可看出,按照第a层的输出粒度直接进行压缩,不仅不会减少对数据传输带宽的需求,而且会给数据传输带宽带来负担。如果按照本申请实施例的方法,在第a+1层的输入粒度为(32,32,16)时,只需要读取按照(32,32,16)读取一个或多个压缩数据块即可,所读取的压缩数据的尺寸与(32,32,16)相当,在第a+1层的输入粒度为(96,96,48)时,只需要读取按照(96,96,48)读取一个或多个压缩数据块即可,所读取的压缩数据的尺寸与(96,96,48)相当,且其数据数量仅为尺寸为(96,96,48)或(32,32,16)的数据的一部分(比如,上文的30%-50%),由此可见,对于神经网络来说,通过本申请实施例的方法可显著减小其卷积运算过程中张量数据存取时对数据传输带宽的需求。需要说明的是,上文中的标号H1、W1、C1、H2、W2、C2、H3、W3、C3、x、y、z在具体应用中是具体数值。对于神经网络来说,上述H1、W1、C1、H2、W2、C2、H3、W3、C3的取值是已知的。
[0084] 本发明实施例中,尽管张量数据的多个数据块是在至少一个维度上对所述张量数据进行划分而获得的,但可根据实际应用场景的情况来可选的执行张量数据的划分操作,在某些场景中无需单独对张量数据执行划分操作也可以达到对张量数据进行划分而获得多个数据块的目的。比如,可以事先将存储器中用于存储张量数据的存储空间进行分区,分为多个预定存储空间,这多个预定存储空间与张量数据中多个数据块的压缩数据块一一对应,这样,在对张量数据分批执行读取、压缩并存入存储器中对应的预定存储空间之后,存储器中该张量数据即以压缩数据块的形式存在,也就是说,对张量数据分批执行读取、压缩并存入对应的预定存储空间即自然地将该张量数据划分成了多个数据块并以该数据块的粒度进行了压缩。
[0085] 本发明实施例中,在步骤110之前,还可包括:在所述存储器中为所述压缩数据块分配所述预定存储空间;其中,与所述张量数据的多个压缩数据块对应的多个预定存储空间是彼此连续的。如此,不仅通过将存储器中张量数据占用的整个存储空间划分为多个预定存储空间实现了对该张量数据的划分,而且这些预定存储空间的连续性也确保在需要读取张量数据的一部分时可根据需要寻址到对应数据的预定存储空间。
[0086] 本申请实施例中,为其各个压缩数据块分配的所述预定容量是彼此相等的。这样,张量数据的各数据块在各维度上的粒度值便是彼此相等的,如此,在各个压缩数据块存入存储器中对应的预定存储空间之后,该张量数据在存储器中存储时各个维度上的存储步长便能够唯一确定,需要从存储器中读取张量数据的一部分(比如,读取一个或多个压缩数据块时),利用该唯一确定的存储步长即可寻址到该部分(即该一个或多个压缩数据块)的预定存储空间,进而直接读取到该部分数据,从而进一步提高张量数据存取的效率。
[0087] 这里,为各个压缩数据块分配的存储空间即每个预定存储空间的预定容量可以根据压缩前数据块的大小来确定,也可以数据块中非预定值的数据的比例的经验数据来确定。此外,每个预定存储空间的预定容量还可取为数据块的大小+裕度值,这样,每个预定存储空间均可具有剩余未写入的裕度区域,从而避免压缩数据块中的有用数据被其相邻压缩数据块覆盖。
[0088] 一种示例中,可以按照数据块的大小来确定每个预定存储空间的预定容量。在数据块中所有数据均不为预定值的情况下,压缩数据最大(即为数据块的数据大小),此时,压缩数据块的大小等于数据块的数据大小与索引大小之和,相应的,每个预定存储空间的预定容量可确定为数据块的数据大小与索引大小之和。例如,数据块的数据大小为r Byte,在数据块中所有数据均不为预定值的情况下,压缩数据的大小即为r Byte,索引为r/8byte,则每个压缩数据块需要的最大存储空间为9/8*r Byte,那么可以将每个预定存储空间的预定容量确定为9/8*r Byte,这里,r为不小于1的整数。这里,数据块的数据大小r可取决于数据块在各维度上的粒度值。
[0089] 本发明实施例中的一种实现方式,还可以在为所述压缩数据块分配所述预定存储空间时,将每个预定存储空间至少分为第一分区和第二分区,第一分区用于存储压缩数据块中的索引,第二分区用于存储压缩数据块中的压缩数据,以避免在向预定存储空间中写入压缩数据时产生有效数据被覆盖的问题。一个示例中,为确保每个预定存储空间具有足够容量来存放相应的压缩数据块,可以将每个预定存储空间分为三区:第一分区,用于存放索引;第二分区,用于存放压缩数据;第三分区,作为剩余未写入的裕度区域。这里,通过该裕度区域可避免压缩数据块中的有用数据被其相邻压缩数据块覆盖。
[0090] 由于每个压缩数据块中的索引大小固定(大约5K),其所需的存储空间也是固定的,而每个压缩数据块中的压缩数据则可能大小不等,所需的存储空间也无法确定,因此,为避免在向各预定存储空间中写入数据的过程中覆盖掉有用的数据,本发明实施例的上述实现方式的一种示例中,每个预定存储空间中,第一分区在首位并分配固定容量(比如,5K),即第一分区的首地址为该预定存储空间的首地址,第二分区在第一分区之后并与第一分区连续,第二分区的首地址由该预定存储空间的首地址与第一分区的固定容量确定,第三分区则在第二分区之后且与第二分区连续。图5为一预定存储空间的分区示例。
[0091] 本申请实施例的上述实现方式中,步骤130中将一个压缩数据块存入存储器中其对应的预定存储空间时,可以以预定存储空间的首地址寻址该预定存储空间的第一分区并将该压缩数据块的索引顺序写入该第一分区,同时以预定存储空间的首地址加第一分区的固定容量寻址该预定存储空间的第二分区并在第二分区顺序写入该压缩数据块的压缩数据。如此,不仅可确保压缩数据块存入其预定存储空间时不会出现有用数据被覆盖的情况,也便于从该预定存储空间中顺序读取压缩数据块中的压缩数据。
[0092] 本申请的实施例中,步骤130中每个压缩数据块中的压缩数据以维度顺序写入到对应的预定存储空间中。该维度可以为深度、宽度、高度中之一。如此,可确保压缩数据在写入预定存储空间之后其维度坐标满足读取需求,以便准确读取到所需数据。
[0093] 本申请的实施例中,各个压缩数据块可以以第一维度顺序写入到各个存储空间中。也就是说,在为所述压缩数据块分配所述预定存储空间时,可以以第一维度顺序划分存储器中各个预定存储空间,使得存储器中各个预定存储空间可以按照第一维度顺序排布并且连续,以便在读取张量数据的一部分时,基于该部分的维度坐标准确寻址到对应的预定存储空间。这里,该第一维度可以为高度、宽度、深度中之一。
[0094] 本申请的实施例中,各压缩数据块可以按照至少一个维度的顺序存储在存储器中,换言之,各压缩数据块对应的预定存储空间在存储器中可以按照至少一个维度的顺序进行排布。这里,该至少一个维度是指张量数据的高度、宽度、深度这三个维度中至少之一。
[0095] 本申请实施例的一种示例中,可以在为所述压缩数据块分配所述预定存储空间时,设置每个预定存储空间对应的维度坐标范围,该维度坐标范围可以通过至少一个维度上的维度坐标区间来表示,也可以通过至少一个维度上的起始坐标和粒度值来表示。这里,至少一个维度是指张量数据的高度、宽度和深度中至少之一。这样,通过维度坐标范围可实现压缩数据块与预定存储空间之间的一一对应关系,步骤130中即可根据压缩数据块的维度坐标范围(即压缩数据块所对应数据块的维度坐标范围)来寻址其对应的预定存储空间,并将该压缩数据块写入相应的预定存储空间。另外,步骤210中,在需要张量数据的一部分时,可以基于该部分的维度坐标、以及各预定存储空间对应的维度坐标范围来确定需要寻址哪些预定存储空间,进而直接从这些预定存储空间读取到张量数据的该部分。
[0096] 本申请实施例的一种实现方式中,可以按照一个维度的顺序将各压缩数据块存储在存储器中,也即各个压缩数据块对应的预定存储空间可以按照一个维度的顺序排列。图6的示例中,按照高度的顺序将各压缩数据块存储在存储器中,即各个压缩数据块对应的预定存储空间按照高度坐标顺序排列。此时,一个存储步长Sh覆盖的存储空间内包含高度坐标范围相同的一个或多个预定存储空间,这些预定存储空间连续。图6的示例中,整个张量数据的存储空间包含m+1个存储步长为Sh的第一存储空间,m为不小于0的整数。
[0097] 本申请实施例的另一种实现方式中,可以按照两个维度的顺序将各压缩数据块存储在存储器中,也即各个压缩数据块对应的预定存储空间可以按照两个维度的顺序线性排列。这里,该两个维度可以为高度、宽度、深度中的任意两个维度。一种示例中,按照高度和深度这两个维度的顺序将各压缩数据块存储在存储器中,即各个压缩数据块对应的预定存储空间按照高度坐标和深度坐标的顺序线性排列。图7的示例中,先按照高度坐标顺序排列、同一高度坐标区间下的各个预定存储空间又按照深度坐标顺序排列。此时,一个第一存储步长Sh覆盖高度坐标范围相同的多个预定存储空间,这多个预定存储空间连续且按照其深度坐标顺序排列。一个第二存储步长Sc覆盖高度坐标范围与深度坐标范围均相同的一个或多个预定存储空间。图7的示例中,整个张量数据的存储空间包含m+1个连续的第一存储空间且该第一存储空间的存储步长为第一存储步长Sh,每个第一子存储空间包含g+1个连续的第二存储空间,该第二存储空间的存储步长为第二存储步长Sc,m、g分别为不小于0的整数。
[0098] 本申请实施例的又一种实现方式中,可以按照三个维度的顺序将各压缩数据块存储在存储器中,也即各个压缩数据块对应的预定存储空间可以按照三个维度的顺序线性排列。该实现方式中,可以按照高度、宽度和深度这三个维度的顺序将各压缩数据块存储在存储器中,即各个压缩数据块对应的预定存储空间按照高度坐标、深度坐标和宽度坐标的顺序线性排列。图8的示例中,先按照高度坐标顺序排列、同一高度坐标范围的各个预定存储空间按照深度坐标顺序排列、同一深度坐标范围的各个预定存储空间按照宽度坐标顺序排列。此时,一个第一存储步长Sh覆盖高度坐标范围相同的多个预定存储空间,这多个预定存储空间连续且按照其深度坐标顺序排列。一个第二存储步长Sc覆盖高度坐标范围与深度坐标范围均相同的一个或多个预定存储空间。一个第三存储步长Sw覆盖高度坐标范围、深度坐标范围以及宽度坐标范围均相同的一个或多个预定存储空间。图8的示例中,整个张量数据的存储空间包含m+1个连续的第一存储空间且该第一存储空间的存储步长为第一存储步长Sh,每个第一子存储空间包含g+1个连续的第二存储空间,该第二存储空间的存储步长为第二存储步长Sc,每个第二子存储空间包含k+1个连续的第三存储空间,该第三存储空间的存储步长为第三存储步长Sw,m、g、k分别为不小于0的整数。
[0099] 本申请的实施例中,在存储器带宽有限的情况下,上述示例方法中一个数据块的读取、压缩和存储的过程可以分批执行。在存储器的带宽允许的情况下,上述示例方法中也可对一个或多个数据块同时执行上述读取、压缩和存储的过程。
[0100] 一种实现方式中,在高速存储器和/或存储器的接口带宽有一定限制而一个数据块的尺寸又较大时,可以对张量数据的每个数据块分批进行读取、压缩和存储,直到该张量数据的多个数据块被读完。具体来说,依次读取一个数据块中的一部分数据(即,按照一定的读取顺序读取该数据块中的一部分数据,比如,可以以至少一个维度顺序读取一个数据块中的一部分数据),对该部分数据进行压缩以获得对应该部分数据的索引值和压缩数据,并将该索引值和压缩数据写入对应所述数据块的预定存储空间,接着,读取下一部分数据,对下一部分数据进行压缩以获得对应该下一部分数据的索引值和压缩数据,并将该索引值和压缩数据连续写入对应所述数据块的预定存储空间,如此顺序执行,直到对应该数据块的预定存储空间写完,即该数据块已读完,各部分数据的索引值在该预定存储空间中自然拼接为压缩数据块的索引,各部分数据的压缩数据在该预定存储空间中也自然拼接为压缩数据块的压缩数据,即该数据块的预定存储空间中存储了该数据块的压缩数据块。如此,继续向下一数据块的读取、压缩以及存储,直到张量数据的多个数据块被读完。这里,一个数据块中各部分数据的读取顺序和每部分数据的数量与具体应用场景、高速存储器以及存储器的性能有关。一个示例中,每部分数据的数量可以取决于高速存储器的接口带宽,读取顺序则可以取决于张量数据的维度和/或其在高速存储器中的存储顺序。以卷积神经网络为例,可以在张量数据的至少一个维度上顺序读取数据,也可以按照张量数据在高速存储器中的存储顺序读取数据。对于数据的读取顺序,本文不予限制。
[0101] 另一种实现方式中,在高速存储器和/或存储器的接口带宽允许或者一个数据块的尺寸较小的情况下,可以一次读取一个或一组(即两个或多个)数据块,对该一个或一组数据块进行压缩并将其压缩数据块存入其对应的预定存储空间,然后继续读取下一个或下一组数据块,对下一个或下一组数据块进行压缩、存储,如此顺序执行,直到张量数据的多个数据块被读完。此实现方式更为高效。这里,读取各个或各组数据块时的顺序与具体应用场景、高速存储器和/或存储器的性能有关。一个示例中,读取各个或各组数据块时的顺序可以取决于张量数据的维度和/或其在高速存储器中的存储顺序。以卷积神经网络为例,可以在张量数据的至少一个维度上顺序读取一个或一组数据块,也可以按照张量数据在高速存储器中的存储顺序读取一个或一组数据块。对于数据块的读取顺序,本文不予限制。
[0102] 需要说明的是,本申请实施例中数据块的读取、压缩和存储的具体执行方式不限于上述两种。可以理解,在高速存储器和/或存储器带宽允许的情况下可以综合应用场景的特点、张量数据的大小等因素选择合适的执行方式来实现本申请实施例的读取、压缩和存储,只需要确保数据块压缩存储之后其在存储器中以维度顺序排列并自然拼接为完整的张量数据。
[0103] 下面以卷积神经网络为例来详细说明数据块的读取、压缩和存储的示例性实施过程。
[0104] 一个示例中,卷积神经网络中,将在高速存储器中的输出结果(即张量数据)分块存储至内存的过程可以包括:
[0105] 步骤1.将内存存储空间分为多个容量固定的预定存储空间,并配置各预定存储空间与维度坐标范围之间的映射关系;
[0106] 鉴于一个维度坐标范围可用于指示张量数据的一个数据块,本申请实施例的该示例中通过将预定存储空间与维度坐标范围的对应来实现预定存储空间与数据块及其压缩数据块之间的一一对应。
[0107] 这里,配置预定存储空间与维度坐标范围之间的映射关系的具体方式可以有多种。一个示例中,可以通过维度坐标区间来表示各个预定存储空间的存储地址,或者,通过数据块所属维度坐标范围在至少一个维度上的起始坐标表示预定存储空间的首地址并为该预定存储空间分配与该数据块在至少一个维度上的粒度值相应的存储容量,这样,在向各个预定存储空间存入压缩数据块时可直接通过该压缩数据块对应的维度坐标范围进行寻址,寻址更高效。另一种示例中,通过配置单独的映射表来指示维度坐标范围与预定存储空间的地址之间的映射关系,在向各个预定存储空间存入压缩数据块时可通过查询该映射表来寻址一个压缩数据块对应的预定存储空间,进而将该压缩数据块存储到该预定存储空间。除此之外,还可采用其他方式。对此,本文不予限制。
[0108] 步骤2.按照至少一个维度顺序从高速存储器中读取一批数据;
[0109] 这里,一批数据的量取决于高速存储器的接口带宽。以SRAM为例,接口带宽为16比特时,每批读取的数据即为16比特。
[0110] 以卷积神经网络为例,按照至少一个维度顺序读取高度存储器中的数据。该维度可以为高度、宽度、深度中至少之一。图9为1920x1080的图像在高速存储器中的存储示例,该1920x1080的图像以三维张量数据的形式存在,其中,以1920所在方向为该张量数据的宽度方向、1080方向为该张量数据的高度方向、图像的明亮度Y、色度U和浓度V各自为一个通道即为该张量数据的通道方向,图9中每列为一块SRAM,该SRAM的位宽为32bit(即4Byte),每行放置8块SRAM,在SRAM的每个点存放4个通道的张量数据,由此,横向排布的8块SRAM组成片(slice)来存放表示1920x1080的yuv图像的张量数据。在该示例中,采用上述方式从该slice中读取数据时,可以同时对该slice中的一块或多块SRAM进行读取,即一次可同时读取8块SARM,也可以一次同时读取1块、2块或4块SRAM,不论一次读取多少块SRAM,每次读取的数据整体上满足维度顺序要求。比如,可以一次读取8块SRAM,即一次读取该slice中的一行,相当于按照宽度顺序进行读取。
[0111] 步骤3.对于当前批数据中的各个数据,逐个执行如下处理:识别当前批数据中该数据的取值是否为预定值,生成对应该数据的索引值,该索引值(比如,一位二进制数)的取值可指示该数据的取值是否为预定值,如果该数据是预定值则删除该数据,并寻址到当前批数据对应的预定存储空间,将其索引值写入对应的预定存储空间的第一分区,继续当前批数据的下一数据;如果该数据不是预定值,则寻址到当前批数据对应的预定存储空间,将索引值写入该预定存储空间的第一分区,将该数据写入该预定存储空间的第二分区。
[0112] 这里,根据当前批数据的维度坐标,寻址对应的预定存储空间。具体来说,可以预先配置各预定存储空间与维度坐标范围之间的映射关系,在该映射关系中查询当前批数据的维度坐标所属维度坐标范围对应的存储地址,通过该存储地址即可寻址到当前批数据对应的预定存储空间。或者,利用当前批数据的维度坐标直接确定相应预定存储空间的存储地址,以该存储地址寻址到当前批数据对应的预定存储空间。
[0113] 这里,如果当前批数据为当前数据块的首批数据,从预定存储空间第一分区的起始位置开始写入所述索引值;如果当前批数据不是当前数据块的首批数据,则从预定存储空间第一分区的第一个空闲位置开始写入所述索引值,以确保各批数据的索引值以数据块中数据的顺序并连续的存储在预定存储空间的第一分区。
[0114] 这里,如果当前批数据为当前数据块的首批数据,从预定存储空间第二分区的起始位置开始写入所述数据;如果当前批数据不是当前数据块的首批数据,则从预定存储空间第二分区的第一个空闲位置开始写入所述数据,以确保各批数据的压缩数据按照其维度顺序并连续的存储在预定存储空间的第二分区。
[0115] 步骤4.判断高速存储器中的输出数据是否读完,如果是,则结束,否则返回步骤2,继续读取下一批数据,直到高速存储器中的输出结果读完。
[0116] 在上述过程中,如果一个预定存储空间存完即其对应的维度坐标范围内的所有数据均已执行过读取、压缩、存储的操作,那么相应数据块的读取、压缩和存储也执行完成,依次存入该预定存储空间第一分区的索引值在该预定存储空间中自然拼接为相应压缩数据块的索引,该索引中每位索引值(比如,二进制数)的取值可指示相应数据块中每个数据的取值是否为预定值,同理,依次存入该预定存储空间第二分区的数据在该预定存储空间中也自然拼接为相应压缩数据块的压缩数据,该数据块以压缩数据块的形式存储在该预定存储空间中。换言之,一个预定存储空间写完时,该预定存储空间中存储的便是一个数据块的压缩数据块,该压缩数据块包括索引和压缩数据。
[0117] 本申请的实施例中,在存储器带宽有限的情况下,上述示例方法的步骤220~步骤230中,一个数据块的读取、解压的过程可以分批执行。在存储器的带宽允许的情况下,上述示例方法的步骤220~步骤230中,也可以同时读取一个或多个数据块并进行解压。
[0118] 一种实现方式中,在高速存储器和/或存储器的接口带宽有一定限制而一个数据块的尺寸又较大时,步骤220~步骤230中可以对每个数据块分批进行读取、解压,直到读完需读取的张量数据一部分对应的预定存储空间。一种实现方式中,向一个预定存储空间读取压缩数据块并解压的过程可以包括:依次读取预定存储空间中的索引值,在当前索引值指示当前数据取值为预定值时则产生一个取值为该预定值的数据,在当前索引值指示当前数据取值不是预定值时则依次读取所述预定存储空间中一个数据,如此顺序执行,直到该预定存储空间中的索引读完,获得的所有数据即形成了原始的数据块,该数据块中的各个数据按照其读取的顺序排列,该读取的顺序可以为至少一个维度的顺序,如此,解压之后该数据块中各个数据仍按照其压缩前的至少一个维度顺序排列,该至少一个维度为高度、宽度和深度中至少之一。重复上述过程,继续向下一预定存储空间的读取及其压缩数据块的解压,直到步骤210中确定的各个预定存储空间均读完,即获得了所需的数据块。
[0119] 另一种实现方式中,在高速存储器和/或存储器的接口带宽允许或者一个数据块的尺寸较小的情况下,可以一次从一个或一组(即两个或多个)预定存储空间中读取一个或一组压缩数据块,对该一个或一组压缩数据块进行解压,然后继续读取下一个或下一组预定存储空间中的压缩数据块,对下一个或下一组压缩数据块进行解压,如此顺序执行,直到读完步骤210确定的预定存储空间。此实现方式更为高效。这里,向各个或各组预定存储空间读取压缩数据块时的顺序与具体应用场景、高速存储器和/或存储器的性能有关。一个示例中,向各个或各组预定存储空间读取压缩数据块时的顺序可以取决于张量数据的维度。以卷积神经网络为例,可以在张量数据的至少一个维度上顺序读取一个或一组预定存储空间中的压缩数据块,也可以按照各个预定存储空间在存储器中的排序顺序读取。对于该读取顺序,本文不予限制。
[0120] 需要说明的是,本申请实施例中从预定存储空间读取压缩数据块并解压的具体执行方式不限于上述两种。可以理解,在高速存储器和/或存储器带宽允许的情况下可以综合应用场景的特点、张量数据的大小等因素选择合适的执行方式来实现本申请实施例的步骤220~步骤230的读取、解压,只需要确保解压后的数据块中各个数据与其压缩前一致即可。
[0121] 下面以卷积神经网络为例来详细说明从存储器中读取张量数据的一部分的示例性实施过程。
[0122] 一个示例中,卷积神经网络中,从存储器中读取张量数据的一部分,并将张量数据的该部分存入高速存储器以便执行计算的过程(即步骤210~240),可以包括:
[0123] 步骤1.基于要读取的张量数据的一部分的维度坐标,确定需要读取哪个预定存储空间或哪些预定存储空间;
[0124] 这里,确定要读取哪个预定存储空间或哪些预定存储空间包括:确定要读取的预定存储空间的个数、以及要读取的第一个预定存储空间的存储地址。
[0125] 其中,可以根据要读取的张量数据的一部分在至少一个维度上的起始坐标值、以及每个预定存储空间所对应维度坐标范围在该维度上的粒度值(即上文所述数据块在该维度上的粒度值),确定要读取的第一个预定存储空间在张量数据的整个存储空间(即张量数据在存储器占用的整个存储空间)中于所述至少一个维度上的排位值(即需要读取的第一个预定存储空间在张量数据所占用的整个存储空间中是第几个);基于张量数据的整个存储空间的首地址、至少一个维度上的存储步长以及要读取的第一个预定存储空间在张量数据的整个存储空间中的排位值,确定要读取的第一个预定存储空间的存储地址。
[0126] 一个示例中,假设张量数据的整个存储空间中排在首位的预定存储空间在一维度上的排位值为S0,要读取的第一个预定存储空间在张量数据的整个存储空间中于所述至少一个维度上的排位值可以等于要读取的张量数据的一部分在该维度上的起始坐标值与数据块在该维度上的粒度值的比值加上S0。
[0127] 以图6为例,各个预定存储空间按照高度坐标顺序排列时,每个预定存储空间在张量数据的整个存储空间中的排位值具有一个,即高度上的排位值,通过这一个排位值即可唯一确定每个预定存储空间在张量数据的整个存储空间中的排位。
[0128] 以图7为例,各个预定存储空间按照高度、深度这两个维度顺序排列时,每个预定存储空间在张量数据的整个存储空间中的排位值具有两个,分别为高度上的排位值和深度上的排位值,通过这两个排位值即可唯一确定每个预定存储空间在张量数据的整个存储空间中的排位。
[0129] 以图8为例,各个预定存储空间按照高度、深度、宽度这三个维度顺序排列时,每个预定存储空间在张量数据的整个存储空间中的排位值具有三个,分别为高度上的排位值、深度上的排位值和宽度上的排位值,通过这三个排位值即可唯一确定每个预定存储空间在张量数据的整个存储空间中的排位。
[0130] 以卷积神经网络为例,如果第a+1层的一次卷积运算的输入数据的起始坐标为(h5,c5,w5)(即要读取的张量数据的一部分在高度上的起始坐标为h5,在宽度上的起始坐标是w5,在深度上的起始坐标是c5),假设存储器中排在首位的预定存储空间(即排位值为(0,0,0)的预定存储空间)对应的维度坐标范围的起始坐标为(0,0,0),每个预定存储空间所对应的维度坐标范围在高度上的粒度值为16、宽度上的粒度值为16、深度上的粒度值为512(即数据块在高度上的粒度值为16、宽度上的粒度值为16、深度上的粒度值为512),那么要读取的第一个预定存储空间在所述张量数据的整个存储空间中的排位值为
即要读取的第一个预定存储空间在高度上的排位值为 在深度上的排
位值为 在宽度上的排位值为
[0131] 这里,可以根据要读取的张量数据的一部分在各个维度上的尺寸(即上文所述的输入粒度)、以及每个预定存储空间所对应维度坐标范围在各个维度上的粒度值,确定要读取的预定存储空间的个数。以图4为例,第a+1层的输入粒度为H2*W2*C2,、每个预定存储空间所对应维度坐标范围在各个维度上的粒度值(即数据块在各个维度上的粒度值)为x、y、z时,那么需要读取的预定存储空间的个数为(H2×W2×C2)/(x×y×z)。
[0132] 步骤2.从所确定的预定存储空间中读取压缩数据块,并同时对该压缩数据块进行解压缩,获得对应的数据块;
[0133] 这里,需要读取多个预定存储空间时,可以根据步骤1中确定的第一预定存储空间的存储地址确定该多个预定存储空间中除第一个预定存储空间之外的其他各个预定存储空间的存储地址,从而根据各个预定存储空间的存储地址从中分别读取相应的压缩数据块。例如,如果第a层输出特征图(即张量数据)在存储器中的首地址为addr0,要读取的第一预定存储空间在该输出特征图所占用的整个存储空间中的排位值为(Si,Sj,Sk),其中,Si表示高度方向上的排位值,Sj表示深度方向上的排位值,即需要读取第(Si,Sj,Sk)个压缩数据块时,要读取的第一个预定存储空间的首地址为addr0+Si*Sh+Sj*Sc+Sk*Sw,这里,Sh为所述高度方向上的存储步长,Sc为上文所述深度方向上的存储步长,Sw为上文所述宽度方向上的存储步长。
[0134] 以图4为例,第a+1层的输入粒度为H2*W2*C2,每个预定存储空间所对应维度坐标范围在各个维度上的粒度值(即数据块在各个维度上的粒度值)为x、y、z时,需要读取的预定存储空间的个数为(H2×W2×C2)/(x×y×z),要读取的第一个预定存储空间的首地址addr,如果按照图8所示各个预定存储空间按照高度、深度、宽度这三个维度顺序排列,那么读取过程可以包括:
[0135] 首先,读取首地址为addr+0*Sh的(W2×C2)/(y×z)个预定存储空间,读取过程为:先在宽度上一次读取首地址为addr+0*Sh+0*Sc的 个预定存储空间,这 个预定存储空间的首地址分别为
这 个预定存储空间中的压缩数据块读完之后,继续跳转
到下一深度进行读取,即读取首地址为addr+0*Sh+1*Sc的 个预定存储空间,这些预定存储空间的首地址分别为
首地址为addr+0*Sh+1*Sc的 个预定存储空间读完之后继续读取首地址为
addr+0*Sh+2*Sc的 个预定存储空间,这些预定存储空间的首地址分别为
如此继续,直到首地址为
的预定存储空间全部读完,即首地址为addr+0*Sh的(W2×
C2)/(y×z)个预定存储空间已全部读完。
[0136] 接着,继续跳转到下一高度进行读取,即读取首地址为addr+1*Sh的(W2×C2)/(y×z)个预定存储空间,此过程与上述首地址为addr+0*Sh的(W2×C2)/(y×z)个预定存储空间的读取过程类似,不再赘述。
[0137] 按照上述读取的顺序继续,直至首地址为 的(W2×C2)/(y×z)个预定存储空间,即(H2×W2×C2)/(x×y×z)个预定存储空间均被读完。这里, 不大于k, 不大于g, 不大于m,k=0、1、2、3……,g=0、1、2、3……,m=0、1、2、3……。
[0138] 步骤3.在所确定的一个或多个预定存储空间均读完之后,从所获得的一个或多个数据块中提取到所述张量数据的一部分。
[0139] 示例性装置
[0140] 图10示出了本申请实施例的张量数据分块存取的一示例性装置10。其中,包括:
[0141] 第一读取单元101,被配置为依次读取张量数据的多个数据块;
[0142] 压缩单元102,被配置为对所述数据块进行压缩,以获得压缩数据块;以及[0143] 存储单元103,被配置为将所述压缩数据块存储到存储器中与所述压缩数据块对应的预定存储空间中。
[0144] 需要说明的是,第一读取单元101读取所述多个数据块是在至少一个维度上对所述张量数据进行划分而获得的。
[0145] 本申请实施例中,相邻数据块的边缘部分彼此重叠,并且在一维度上相邻的两个数据块的重叠区域的大小由用于对该数据块执行卷积运算的卷积核在该维度上的大小确定。
[0146] 本申请实施例的一种实现方式中,每个数据块在所述至少一个维度上的粒度等于基础值加上所述重叠区域的大小的一半,所述基础值由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。
[0147] 本申请实施例的另一种实现方式中,每个数据块在所述至少一个维度上的粒度由以所述张量数据作为输出的神经网络的层在该维度上的输出粒度与以所述张量数据作为输入的神经网络的层在该维度上的输入粒度确定。
[0148] 本申请实施例的一种实现方式中,压缩单元101具体可配置为对所述数据块进行压缩包括:生成所述数据块的索引,所述索引用于指示所述数据块中的各个数据是否为预定值;以及,删除所述数据块中取值为所述预定值的数据,以获得压缩数据;其中,所述压缩数据块包括所述索引和所述压缩数据。需要说明的是,该压缩方式仅为压缩单元101的示例,除此之外,压缩单元101还可采用其他适合张量数据的压缩方式来实现其压缩功能。对此,本文不予限制。
[0149] 本申请实施例中,上述示例性装置还可以包括:存储空间分配单元104,可被配置为在所述存储器中为所述压缩数据块分配所述预定存储空间;其中,与所述张量数据的多个压缩数据块对应的多个预定存储空间是彼此连续的。这里,存储空间分配单元104为各个压缩数据块分配的所述预定容量是彼此相等的。
[0150] 图11示出了本申请实施例的张量数据分块存取的另一示例性装置11,包括:
[0151] 存储空间确定单元111,被配置为基于要读取的张量数据的至少一部分的维度坐标,确定存储器与所述张量数据的至少一部分对应的预定存储空间;
[0152] 第二读取单元112,被配置为从所述预定存储空间读取对应的压缩数据块;
[0153] 解压缩单元113,被配置为对所述压缩数据块进行解压缩以获得对应的数据块;以及
[0154] 数据获取单元114,被配置为基于所述数据块获得所述张量数据的所述至少一部分。
[0155] 其中,装置11可以预先根据上述“示例性方法”中的示例性方法100将所述张量数据存储到所述存储器中。
[0156] 应当理解,图10所示的装置10和图11所示的装置11仅是示例性的,而非限制性的。根据需要,本申请的实施例的张量数据分块存取的示例性装置还可以具有其他部件和/或结构。
[0157] 本申请实施例的上述张量数据分块存取的装置,能够在不改变张量数据中各个数据的维度顺序的前提下将张量数据以数据块的形式压缩并存储到存储器中,从而在张量数据的计算过程中(尤其是张量数据的分批计算过程中),每次计算都可根据需要(比如,此次计算所需数据的粒度,也可称为每次计算的输入粒度)从存储器中读取对应的一块或多块压缩数据块,也就是说,每次计算时都可以从存储器中读取到与所需数据相匹配的数据而不需要读取远多于计算所需的数据,从而节省了数据传输带宽,降低了硬件资源(如存储器)的成本同时提高硬件资源的利用率,从而达到在较低的硬件成本下高效存取张量数据的计算的目的。
[0158] 本申请实施例的装置10和装置11可集成于同一设备中或通过同一设备来实现,该设备可以为上文所述第一设备,还可分别独立于第一设备部署并分别与第一设备连接。本申请实施例的上述张量数据分块存取的装置的其他技术细节可参照上文“示例性方法”,不再赘述。
[0159] 示例性电子设备
[0160] 除了上述方法以外,本申请的实施例还可以是电子设备,该电子设备包括:一个或多个处理器;以及,存储器,存储有计算机指令,所述计算机指令在被所述处理器运行时使所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的张量数据分块存取中的步骤。
[0161] 下面,参考图12来描述根据本申请实施例的电子设备。图12图示了根据本申请实施例的电子设备的框图
[0162] 如图12所示,电子设备12包括一个或多个处理器121和存储器122。
[0163] 处理器121可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备10中的其他组件以执行期望的功能。
[0164] 存储器122可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器121可以运行所述程序指令,以实现上文所述的本申请的各个实施例的声源定位方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
[0165] 在一个示例中,电子设备12还可以包括:输入装置123和输出装置124,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
[0166] 例如,该输入装置123可以是上述的麦克或麦克风阵列,用于捕捉声源的输入信号。在该电子设备是单机设备时,该输入装置123可以是通信网络连接器,用于接收所采集的输入信号。
[0167] 此外,该输入设备13还可以包括例如键盘鼠标等等。
[0168] 该输出装置124可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出设备124可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
[0169] 当然,为了简化,图12中仅示出了该电子设备12中与本申请有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备12还可以包括任何其他适当的组件。
[0170] 本申请实施例在具体实现时,示例性方法100的电子设备与示例性方法200的电子设备可以为同一设备,也可分别独立实现。一个示例中,示例性方法100的电子设备和示例性方法200的电子设备可通过两个第一设备来实现,该两个第一设备连接;另一个示例中,示例性方法100的电子设备与示例性方法200的电子设备可通过同一第一设备来实现。
[0171] 示例性计算机可读存储介质
[0172] 除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的声源定位方法中的步骤。
[0173] 所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
[0174] 此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的张量数据分块存取中的步骤。一个示例中,本申请的实施例的计算机可读存储介质可以集成于上文所述第一设备中。
[0175] 所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0176] 以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
[0177] 本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
[0178] 还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
[0179] 提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
[0180] 为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈