CN111767508A - 计算机实现张量数据计算的方法、装置、介质和设备 - Google Patents
计算机实现张量数据计算的方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN111767508A CN111767508A CN202010655451.4A CN202010655451A CN111767508A CN 111767508 A CN111767508 A CN 111767508A CN 202010655451 A CN202010655451 A CN 202010655451A CN 111767508 A CN111767508 A CN 111767508A
- Authority
- CN
- China
- Prior art keywords
- tensor
- dimension
- data
- data block
- operated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000012545 processing Methods 0.000 claims abstract description 53
- 239000000872 buffer Substances 0.000 claims abstract description 47
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 9
- 238000013461 design Methods 0.000 abstract description 6
- 238000013500 data storage Methods 0.000 description 31
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 11
- 230000003139 buffering effect Effects 0.000 description 3
- 230000002349 favourable effect Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005429 filling process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
公开了一种计算机实现张量数据计算的方法、装置、介质和设备,其中的方法包括:根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度;将所述存在差异的维度的步长更新为预定值;根据更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块;其中,所述待运算数据块为填充处理后的数据块;根据所述第二张量的待运算数据块,执行与所述第一张量的二元运算。本公开可以在不增加硬件设计难度的情况下,便捷的实现广播。
Description
技术领域
本公开涉及数据处理技术,尤其是涉及一种计算机实现张量数据计算的方法、计算机实现张量数据计算的装置、存储介质以及电子设备。
背景技术
通常情况下,具有相同维度的两个张量才能进行二元运算。例如,一个2×3的张量可以和另一个2×3的张量进行加法运算。在两个张量的维度不相同(尤其是两个张量的维度不同,且其中一个张量的至少一维度为1)的情况下,支持广播的硬件可以实现两个张量的二元运算。
如果使硬件支持广播,则往往会提高硬件的设计难度,如何在不增加硬件设计难度的情况下,快速实现不同维度的张量的二元运算,是一个值得关注的技术问题。
发明内容
为了解决上述技术问题,提出了本公开。本公开的实施例提供了一种计算机实现张量数据计算的方法、装置、存储介质以及电子设备。
根据本公开实施例的一个方面,提供了一种计算机实现张量数据计算的方法,包括:根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度;将所述存在差异的维度的步长更新为预定值;根据更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块;其中,所述待运算数据块为填充处理后的数据块;根据所述第二张量的待运算数据块,执行与所述第一张量的二元运算。
根据本公开实施例的再一个方面,提供了一种计算机实现张量数据计算的装置,该装置包括:确定维度差异模块,用于根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度;更新步长模块,用于将所述确定维度差异模块确定出的存在差异的维度的步长更新为预定值;读数据模块,用于根据所述更新步长模块更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块;其中,所述待运算数据块为填充处理后的数据块;执行运算单元,用于根据所述读数据模块读取出的第二张量的待运算数据块,执行与所述第一张量的二元运算。
根据本公开实施例的再一方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于实现上述方法。
根据本公开实施例的又一方面,提供了一种电子设备,该电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述方法。
基于本公开上述实施例提供的一种计算机实现张量数据计算的方法以及装置,通过对第二张量的存在差异的维度的步长进行更新,可以实现将缓存模块的读取位置定位到填充处理后的数据块位置处,由于步长的更新、缓存模块的读取位置的定位以及填充处理等操作可以采用编译方式实现,因此,在执行本公开实施例时,本公开可以在不需要硬件支持广播的情况下,通过从相应的读取位置处读取出待运算数据块,并使数据处理单元针对第一张量和读取出的待运算数据块执行其既有的二元运算操作,即可快速实现具有不同维度的张量间的二元运算。由此可知,本公开提供的技术方案可以在不增加硬件设计难度的情况下,实现具有不同维度的张量间的二元运算。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征以及优势将变得更加明显。附图用来提供对本公开实施例的进一步的理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是本公开所适用的场景一个实施例的流程图;
图2为本公开所适用的场景的寻址过程一个实施例的流程图;
图3为本公开的计算机实现张量数据计算的方法一个实施例的流程图;
图4为本公开的形成第二张量的待运算数据块一个实施例的流程图;
图5为本公开的缓存第二张量的有效数据一个实施例的流程图;
图6为本公开的计算机实现张量数据计算的装置一个实施例的结构示意图;
图7是本申请一示例性实施例提供的电子设备的结构图。
具体实施方式
下面将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅是一种描述关联对象的关联关系,表示可以存在三种关系,如A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本公开的实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或者专用计算系统环境或配置一起操作。适于与终端设备、计算机系统或者服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施。在分布式云计算环境中,任务可以是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
本公开概述
在实现本公开的过程中,发明人发现,在图像处理以及音频处理过程中,通常会存在大量的张量间的二元运算,利用现有的数据处理芯片(如CPU或者协同处理器等)可以便捷的实现两个具有相同维度的张量间的二元运算;然而,维度存在差异的两个张量间的二元运算,并不是所有的数据处理芯片均能够支持实现的。
示例性概述
本公开的计算机实现张量数据计算技术可以应用在图像处理以及音频处理等过程中。例如,本公开提供的技术方案可以应用于自动驾驶以及语音识别等应用场景中。无论是在图像处理过程中,还是在音频处理过程中,往往会涉及具有不同维度的两个张量的二元运算。
假设需要进行二元运算的两个张量分别为张量A和张量B,其中的张量A为16×16×8(h×w×c)的张量,且张量B为1×1×8(h×w×c)的张量。假设张量A和张量B的二元运算结果为张量C,且张量C为16×16×8(h×w×c)的张量。假设数据处理芯片一次能够同时执行128次二元运算。假设缓存模块的一个基本数据存储单位可以存储128个数据。
在上述假设情况下,本公开实现张量A和张量B的二元运算的过程的一个例子如图1和图2所示。
图1中,S100、开始两个张量的二元运算过程。
S101、对各张量共享的当前数据坐标进行初始化处理,并获取各张量的起始地址、各张量的各维度的步长以及各张量的最大数据坐标。
可选的,本公开中的张量A、张量B和张量C共享当前数据坐标。本公开对张量A、张量B和张量C共享的当前数据坐标h、w和c分别进行初始化处理,例如,将h、w和c均初始化为0。h、w和c可以表示出张量中的一数据在张量中的位置。本公开可以基于当前输入获取张量A的起始地址和张量A的各维度的步长。本公开获取到的张量A在缓存模块中的缓存起始地址,可以记为offset_A。张量A的各维度的步长用于表示张量A在缓存于缓存模块中时,张量A中的数据在缓存模块的行方向上的间隔。
本公开获取到的张量A在h维度的步长、张量A在w维度的步长以及张量A在c维度的步长可以分别记为h_stride_a(如4)、w_stride_a(如4)和c_stride_a(如8)。
可选的,本公开可以基于当前输入获取张量B的起始地址和张量B的各维度的步长。本公开获取到的张量B在缓存模块中的缓存起始地址,可以记为offset_B。
本公开获取到的张量B在h维度的步长、张量B在w维度的步长以及张量B在c维度的步长可以分别记为h_stride_b(如1)、w_stride_b(如1)和c_stride_b(如8)。由于张量B在h维度的步长与张量A在h维度的步长存在差异,张量B在w维度的步长与张量A在w维度的步长存在差异,且张量B在h维度的步长小于张量A在h维度的步长,张量B在w维度的步长小于张量A在w维度的步长,因此,本公开可以将张量B在h维度的步长h_stride_b更新为0,并将张量B在w维度的步长w_stride_b更新为0。张量B在c维度的步长c_stride_b仍然为8。
可选的,本公开可以基于当前输入获取张量C的起始地址和张量C的各维度的步长。本公开获得的张量C在缓存模块中的缓存起始地址,可以记为offset_C。
本公开获取到的张量C在h维度的步长、张量C在w维度的步长以及张量C在c维度的步长可以分别记为h_stride_c(如4)、w_stride_c(如4)和c_stride_c(如8)。
S102_1、基于当前数据坐标h、w和c、张量A的起始地址、以及张量A的各维度的步长h_stride_a、w_stride_a和c_stride_a,执行张量A的本次寻址操作,获得张量A的本次寻址操作的结果,即获得张量A的偏移地址offset_a。到S103-1。
针对张量A的本次寻址操作可以是指:为了获得张量A中需要参与本次二元运算的数据块,而进行的寻址操作。张量A的本次寻址操作的结果可以为:相对于张量A在缓存模块中的缓存起始地址offset_A的偏移地址offset_a。张量A的本次寻址操作的结果也可以为:张量A的所有寻址操作以及张量A的所有二元计算操作均完成。针对张量A进行寻址的过程可以参见图2中的相关描述。
S103_1、基于张量A的起始地址offset_A以及偏移地址offset_a,读取张量A中需要参与本次二元运算的数据块,记为第一数据块。到S105。
S102_2、基于当前数据坐标h、w和c、张量B的起始地址、以及张量B的各维度的步长h_stride_b、w_stride_b和c_stride_b,执行张量B的本次寻址操作,获得张量B的本次寻址操作的结果,即获得张量B的偏移地址offset_b。到S103-2。
针对张量B的本次寻址操作可以是指:为了获得张量B中需要参与本次二元运算的数据块,而进行的寻址操作。张量B的本次寻址操作的结果可以为:相对于张量B在缓存模块中的缓存起始地址offset_B的偏移地址offset_b。张量B的本次寻址操作的结果也可以为:张量B的所有寻址操作以及张量B的所有二元计算操作均完成。针对张量B进行寻址的过程与针对张量A进行寻址的过程类似,在此不再详细说明。
S103_2、基于张量B的起始地址offset_B以及偏移地址offset_b,读取张量B中需要参与本次二元运算的数据块,记为第二数据块。到S105。
S104、针对第一数据块和第二数据块执行二元运算操作,获得本次二元运算的结果,记为第三数据块,到S103_3。
S102_3、基于当前数据坐标h、w和c、张量C的起始地址、以及张量C的各维度的步长h_stride_c、w_stride_c和c_stride_c,执行张量C的本次寻址操作,获得张量C的本次寻址操作的结果,即获得张量C的偏移地址offset_c。到S103-3。
针对张量C的本次寻址操作可以是指:为了获得属于张量C的本次二元运算结果的数据块在缓存模块中的存储位置,而进行的寻址操作。张量C的本次寻址操作的结果可以为:相对于张量C在缓存模块中的缓存起始地址offset_C的偏移地址offset_c。张量C的本次寻址操作的结果也可以为:张量C的所有寻址操作以及所有二元计算操作均完成。针对张量C进行寻址的过程与针对张量A进行寻址的过程基本相同,在此不再详细说明。
S103_3、基于张量C的起始地址offset_C以及偏移地址offset_c,将S104获得的第三数据块,缓存于缓存模块中。到S105。
S105、判断张量C的寻址操作是否完成,如果完成,则到S106;如果未完成,则到S107。
可选的,如果当前数据坐标h大于张量C的最大数据坐标h_maxc,当前数据坐标w大于张量C的最大数据坐标w_maxc,且当前数据坐标c大于张量C的最大数据坐标c_maxc,则张量C的寻址操作完成。
S106、本次张量A和张量B的二元运算过程结束。
S107、更新各张量共享的当前数据坐标,并返回S102_1、S102_2和S102_3。
图2中,S200、开始缓存模块的寻址过程。
S201、获取张量A、张量B和张量C共享的当前数据坐标、张量C的最大数据坐标、张量A的各维度的步长以及张量A的当前数据的偏移地址。
可选的,张量A、张量B和张量C共享的当前数据坐标可以表示出当前需要进行寻址的数据在张量A中的位置。张量A、张量B和张量C共享的当前数据坐标可以包括:张量在每一个方向的当前数据坐标。例如,张量A、张量B和张量C共享的当前数据坐标可以包括:张量在w方向的当前数据坐标、张量在h方向的当前数据坐标及张量在c方向的当前数据坐标。张量C的最大数据坐标可以表示出张量C的数据规模。张量C的最大数据坐标可以包括:张量C在每一个方向的最大数据坐标,例如,张量C的最大数据坐标可以包括:张量C在w方向的最大数据坐标、张量C在h方向的最大数据坐标以及张量C在c方向的最大数据坐标。张量A的各维度的步长通常为预先设置的已知值。张量A的当前数据的偏移地址的初始值可以为张量A的起始地址。
S202、判断张量在w方向的当前数据坐标w与4之和是否小于张量C在w方向的最大数据坐标tw,如果小于,则到S2021,如果不小于,则到S203。
S2021、将张量A的当前数据的偏移地址更新为当前数据的偏移地址与张量A在w方向的维度的步长w_stride之和,并将张量在w方向的当前数据坐标w更新为张量在w方向的当前数据坐标w与4之和。到S209。
S203、将张量在w方向的当前数据坐标更新为0。到S204。
S204、判断张量在h方向的当前数据坐标h与4之和是否小于张量C在h方向的最大数据坐标th,如果小于,则到S2031,如果不小于,则到S205。
S2041、将张量A的当前数据的偏移地址更新为当前数据的偏移地址与张量A在h方向的维度的步长h_stride之和,并将张量在h方向的当前数据坐标h更新为张量在h方向的当前数据坐标h与4之和。到S209。
S205、将张量在h方向的当前数据坐标更新为0。到S206。
S206、判断张量在c方向的当前数据坐标c与8之和是否小于张量C在c方向的最大数据坐标tc,如果小于,则到S2061,如果不小于,则到S207。
S2061、将张量A的当前数据的偏移地址更新为当前数据的偏移地址与张量A在c方向的维度的步长c_stride之和,并将张量在c方向的当前数据坐标c更新为张量在c方向的当前数据坐标c与8之和。到S209。
S207、将张量在c方向的当前数据坐标更新为0。到S208。
S208、完成张量A的全部寻址过程。
S209、本次寻址过程结束。
示例性方法
图3为本公开的计算机实现张量数据计算的方法一个实施例的流程图。如图3所示的方法包括:S300、S301、S302以及S303。下面对各步骤分别进行说明。
S300、根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度。
本公开中的张量(Tensor)可以是指定义在一些向量空间和一些对偶空间的笛卡儿积上的多重线性映射。张量可以认为是坐标为n维空间内,有n个分量的一种量。张量的每个分量都是坐标的函数。在坐标变换时,张量的每个分量也依照相应的规则作线性变换。假设将张量理解为多维数组,则张量的维度可以认为是数组的所有维各自的维数。即本公开中的张量的维度通常包括多个数值,每一个数值表示张量在相应方向上的数据量(即维数)。例如,图3示出了一二维数组,该二维数组的维度为(3,2),即该二维数组的x方向维度为3,其y方向维度为2。
本公开中的第二张量的维度与第一张量的维度不相同。例如,两者的维度可以完全不相同,也可以部分不相同。也就是说,第二张量的至少一方向维度为与第一张量的维度存在差异的维度。
一个例子,第二张量的部分方向维度与第一张量的相应方向维度相同,而第二张量的其他方向维度与第一张量的相应方向维度不相同。具体的,假设第一张量为一个4维数组,且第一张量的n方向维度、h方向维度、w方向维度和c方向维度分别为4、4、4和8;假设第二张量为一个4维数组,且第二张量的n方向维度、h方向维度、w方向维度和c方向维度分别为1、4、4和8;在上述假设的情况下,第一张量和第二张量的n方向维度不相同,而第一张量和第二张量的h方向维度、w方向维度和c方向维度均相同。即第二张量中的n方向维度为与第一张量的维度存在差异的维度。
再一个例子,第二张量的所有方向维度分别与第一张量的相应方向维度相同。具体的,假设第一张量为一个4维数组,且第一张量的n方向维度、h方向维度、w方向维度和c方向维度分别为4、4、4和8;假设第二张量为一个4维数组,且第二张量的n方向维度、h方向维度、w方向维度和c方向维度分别为1、1、1和1;在上述假设的情况下,第一张量和第二张量的n方向维度、h方向维度、w方向维度和c方向维度均不相同。即第二张量中的n方向维度、h方向维度、w方向维度和c方向维度均为与第一张量的维度存在差异的维度。
需要特别说明的是,对于神经网络而言,上述n可以表示神经网络的输入数量,h可以表示图像或者音频数据的高度,w可以表示图像或者音频数据的的宽度,c可以表示图像或者音频数据中的各点(如像素点等)的通道数,例如,对于图像而言,每个像素点均具有红、绿、兰,三个通道。另外,第二张量的所有维度均不高于第一张量的相应维度,且第二张量的至少一维度低于第一张量的相应维度。
S301、将上述存在差异的维度的步长更新为预定值。
本公开中的张量的每一个维度均具有相应的步长,张量的各维度的步长可以用于决定从缓存模块中读取数据时的读取起始位置。张量的各维度的步长通常为预先设置的已知值。张量的各维度的步长的数值大小通常与张量在缓存模块中的存储方式相关,而张量在缓存模块中的存储方式可以与用于执行二元计算的数据处理单元的计算处理能力相关。本公开中的预定值通常为预先设置的已知值,例如,预定值为0。本公开的第二张量中的与第一张量的维度不存在差异的维度的步长不需要更新。
S302、根据更新后的具有上述预定值的第二张量的各维度的步长,从缓存模块中读取第二张量的待运算数据块。
本公开中的待运算数据块为填充处理后的数据块。也就是说,本公开的缓存模块中存储有填充处理后的第二张量,每次从缓存模块中读取出的内容,可以为填充处理后的第二张量的至少一部分。待运算数据块的大小通常与执行二元运算操作的数据处理芯片的基本计算粒度相关。本公开中的待运算数据块的大小可以是指待运算数据块所包含的数据量。例如,如果数据处理芯片一次能够同时执行m次计算,则待运算数据块可以包括m个数据。
S303、根据第二张量的待运算数据块,执行与第一张量的二元运算。
本公开中的二元运算可以是指基于二元运算符的运算。例如,二元运算符可以包括:加、乘、交以及并等。本公开中的第二张量与第一张量的二元运算可以称为广播(broadcasting)。本公开中的广播可以是指对形状不同的数组所采取的运算操作。
本公开通过对第二张量的存在差异的维度的步长进行更新,可以实现将缓存模块的读取位置定位到填充处理后的数据块位置处,由于步长的更新、缓存模块的读取位置的定位以及填充处理等操作可以采用编译方式实现,因此,在执行本公开实施例时,本公开可以在不需要硬件支持广播的情况下,通过从相应的读取位置处读取出待运算数据块,并使数据处理单元针对第一张量和读取出的待运算数据块执行其既有的二元运算操作,即可快捷实现具有不同维度的张量间的二元运算。由此可知,本公开提供的技术方案可以在不增加硬件设计难度的情况下,实现具有不同维度的张量间的二元运算。
在一个可选示例中,在本公开的技术方案适用于图像处理领域时,本公开中第一张量的维度可以包括:宽维度、高维度和通道维度,且本公开的第二张量也可以包括:宽维度、高维度和通道维度。例如,第一张量为宽维度为4、高维度为4、通道维度为8的张量(可以记为4h4w8c的张量)。本公开可以根据第一张量和第二张量的宽维度、高维度和通道维度,从第二张量中确定与第一张量的维度存在差异的维度。即本公开可以根据第一张量和第二张量的宽维度、高维度和通道维度,确定第二张量的与第一张量的维度存在差异的维度。例如,如果第二张量的宽维度与第一张量的宽维度不同,而第二张量的高维度与第一张量的高维度相同,且第二张量的通道维度与第一张量的通道维度相同,则第二张量的宽维度为本公开的存在差异的维度。
本公开通过利用具有宽维度、高维度和通道维度的第一张量和第二张量,有利于在不需要硬件支持广播的情况下,在采用编译方式实现步长的更新、缓存模块的读取位置的定位以及填充处理等操作的基础上,快捷的实现图像处理过程中的具有不同维度的两个张量的二元运算,从而有利于在不增加硬件设计难度的情况下,实现图像处理过程中的张量间的二元运算。
在一个可选示例中,本公开中的缓存模块可以具体为SRAM(Static RandomAccessMemory,静态随机存取存储器)等。本公开可以每次利用第二张量的起始地址和相应的第一偏移地址,从缓存模块中读取出第二张量的一个数据块,该数据块即为第二张量的待运算数据块。本公开中的第二张量的起始地址通常为已知值。例如,第二张量的起始地址可以是在存储第二张量时设置的。本公开中的第二张量的起始地址可以是指第二张量在缓存模块中缓存的起始地址。本公开中的第一偏移地址可以是指以第二张量的起始地址为基准的地址偏移量。本公开中的第二张量的起始地址和第一偏移地址主要用于决定本次针对缓存模块进行读取的起始地址。
可选的,本公开中的缓存模块(如SRAM)通常包括多行和多列。本公开中的SRAM的一个例子可以如下述表1所示。
表1
表1示意性的示出了SRAM中的3行16列。一行中的一列可以称为一个slice(片),且一个slice通常可以用于存储多个数据。例如,一个slice可以存储8个数据。具体的,假设第一张量和第二张量的通道维度为8,则一个像素点的8个通道的数据可以存储在SRAM的一个slice中。表1所示的SRAM的一行可以存储16×8=128个数据,SRAM中的一行可以称为一个缓存区域。对于n4h4w8c的张量而言,一个缓存区域可以存储一个4h4w8c的数据块。
表1所示的SRAM中的每一行具有一个偏移地址(offset),即本公开中的第一偏移地址,本公开可以利用第二张量的起始地址和第一偏移地址,从SRAM中读取出第二张量的一个待运算数据块。例如,本公开可以每次均基于第二张量的起始地址和第一偏移地址,从SRAM中读取一行数据。
可选的,在实现第一张量和第二张量的二元运算过程中,本公开可以利用更新后的第二张量的各维度的步长,每次计算出第二张量的一待运算数据块的第一偏移地址,上述更新后的第二张量的各维度的步长通常包含预定值;之后,本公开可以根据第二张量的起始地址和当前计算出的第一偏移地址,从缓存模块中读取第二张量的一待运算数据块,以便于利用当前读取出的待运算数据块,与第一张量进行二元运算。待运算数据块的大小通常为已知值。待运算数据块的大小通常可以根据数据处理芯片的实际情况设置。
可选的,假设第二张量为输入维度为n、宽维度为w、高维度为h、通道维度为c的张量,例如,第二张量可以为n4h4w8c的张量,且本公开的SRAM的存储结构如表1所示,则SRAM的一行可以存储一个4h4w8c的数据块,本公开可以利用下述公式(1)计算第一偏移地址:
Offset(n,c,h,w)=n×stride_n+(c/8)×stride_c+(h/4)×stride_h+(w/4)×stride_w+(h%4)×8×4+(w%4)×8+(c%8)
公式(1)
在上述公式(1)中,stride_n为输入维度n的步长;stride_c为通道维度c的步长;stride_h为高维度h的步长;stride_w为宽维度w的步长;n的取值范围为1至n;w的取值范围为1至w;c的取值范围为1至c;h的取值范围为1至h;公式(1)中的除法的商可以采用向下取整的方式确定;stride_n、stride_c、stride_h和stride_w的取值大小通常由编译器决定,且stride_n、stride_c、stride_h和stride_w中的至少之一的取值可以为0。
本公开通过利用更新后的第二张量的各维度的步长,计算第一偏移地址,可以便捷的获得本次需要读取的第二张量的待运算数据块的读取起始地址,从而有利于快捷的获得第二张量的待运算数据块,进而有利于提高两个张量的二元运算的效率。
在一个可选示例中,本公开在从缓存模块中读取第二张量的待运算数据块时,可以先根据第二张量的起始地址和第一偏移地址(如利用上述公式(1)计算出的第一偏移地址),确定从缓存模块读取的起始地址;然后,再根据执行二元运算操作的数据处理芯片的基本计算粒度和上述起始地址,从缓存模块中读取第二张量的待运算数据块。本公开中的基本计算粒度可以用于决定每次从缓存模块中读取数据的数据量。
可选的,本公开中的缓存模块存在基本数据存储单位,如果一数据所占用的存储空间小于一个基本数据存储单位的存储空间,则虽然该数据不能填满一个基本数据存储单位,但是,该数据仍应占用一个基本数据存储单位。本公开中的待运算数据块所占用的缓存区域可以为缓存模块的一个基本数据存储单位。本公开中的基本数据存储单位的大小,可以结合执行二元运算操作的数据处理芯片的基本计算粒度来设置。也就是说,一次从缓存模块的一个基本数据存储单位中读取出的所有数据,可以使数据处理芯片执行一次基于基本计算粒度的二元运算。
一个例子,如表1所示的SRAM,本公开可以将SRAM的每一行均作为一个SRAMblock(SRAM块),即SRAM中的每一行均为SRAM的一个基本数据存储单位。
可选的,本公开在从SRAM中读取数据时,一次可以读取一个SRAMblock中存储的数据。例如,如果根据第二张量的起始地址和第一偏移地址确定出的读取起始地址对应表1中的第2行,则本公开可以直接读取表1所示的SRAM的第2行中缓存的128个数据,这128个数据即为本次读取出的第二张量的待运算数据块。与此同时,本公开中的执行二元运算操作的数据处理芯片的基本计算粒度可以为128,这样,数据处理芯片可以同时针对本次读取出的128个数据,执行与第一张量的二元运算处理。
本公开通过利用第二张量的起始地址和第一偏移地址,来确定本次读取的起始地址,并基于基本计算粒度读取第二张量的待运算数据块,不仅有利于快捷的对待运算数据块进行定位,而且,可以使一次读取出的待运算数据块全部提供给数据处理芯片,执行二元运算处理,从而有利于充分利用数据处理芯片的计算资源,进而有利于提高数据处理芯片的计算效率。
在一个可选示例中,本公开中的第二张量的待运算数据块可以为执行了填充处理后的数据块,即本公开可以对第二张量的有效数据进行填充处理,从而形成第二张量的待运算数据块。对第二张量的有效数据进行填充处理可以通过复制有效数据的方式实现。例如,对第二张量的有效数据进行复制,并将第二张量的有效数据与复制的有效数据进行拼接结合,拼接结合的结果即为第二张量的待运算数据块。
可选的,本公开在对第二张量的有效数据进行填充处理时,如果一个缓存模块的一个基本数据存储单位中缓存的有效数据占据了该基本数据存储单位的一部分,则本公开可以复制该有效数据,并将复制的有效数据存储在该基本数据存储单位中的其他部分,即利用一个基本数据存储单位中缓存的有效数据填满该基本数据存储单位。
可选的,本公开可以使用填充硬件指令实现对第二张量的有效数据的填充处理。例如,本公开可以使用FetchRoi指令将表1所示的一个基本数据存储单位中的一个slice中存储的所有数据复制到该基本数据存储单位中的其他slice中。再例如,本公开可以使用ReplaceC指令将表1所示的一个基本数据存储单位中的一个slice中存储的某一个数据复制到其他基本数据存储单位中的相应位置处。
本公开通过对第二张量的有效数据进行复制,可以便捷的形成第二张量的待运算数据块,从而有利于便捷的执行第一张量和第二张量的二元运算。
在一个可选示例中,本公开可以在第二张量缓存于相应的缓存区域之后,对已经完成缓存的第二张量的有效数据进行复制处理,从而形成第二张量的待运算数据块,一个具体的例子如图4所示。
S400、根据更新前的第二张量的各维度的步长,将第二张量的有效数据缓存于缓存模块中。
可选的,本公开可以利用更新前的第二张量的各维度的步长,确定第二张量的各有效数据分别在缓存模块中的存储位置,并将第二张量的各有效数据分别缓存于缓存模块的相应的存储位置处。本公开缓存第二张量的有效数据的一个例子如图5所示。
S401、根据更新后的具有预定值的第二张量的各维度的步长,确定需要进行填充处理的有效数据在缓存模块中的缓存区域。
可选的,本公开可以将更新后的具有预定值的第二张量的各维度的步长代入上述公式(1)中,从而可以计算出多个偏移地址,本公开可以将每一个偏移地址中所对应的缓存区域中的有效数据均作为需要进行填充处理的有效数据。
S402、对上述确定出的缓存区域中的有效数据进行复制,并利用复制的有效数据将相应的缓存区域填满,形成第二张量的待运算数据块。
可选的,本公开可以使用FetchRoi指令和ReplaceC指令中的至少一个,进行有效数据的复制填充处理。其中的FetchRoi指令用于将缓存模块中的一个基本数据存储单位中缓存的有效数据,复制到另一个基本数据存储单位中。例如,本公开可以利用FetchRoi指令将表1所示的一个片中缓存的8个有效数据(如有效数据0至有效数据7)复制到另一个片中,从而两个片中缓存了同样的8个有效数据(如两个片中均缓存了有效数据0至有效数据7)。其中的ReplaceC指令用于利用缓存模块中的一个基本数据存储单位中缓存的有效数据,填充该基本数据存储单位。例如,本公开可以利用ReplaceC指令对表1所示的一个片中缓存的1个有效数据(如有效数据0)进行复制,并利用复制的有效数据填充该片,使该片中缓存8个同样的有效数据(如有效数据0)。
可选的,本公开通常需要结合FetchRoi指令和ReplaceC指令来形成第二张量的待运算数据块。例如,第一张量的维度为4×4×8(w×h×c),而第二张量的维度为1×1×1(w×h×c),则本公开获得第二张量的待运算数据块的过程可以为:
首先,先后使用7次ReplaceC指令,对缓存模块中的一个基本数据存储单位中缓存的一个有效数据进行复制,并利用复制的7个数据填充该基本数据存储单位,使该基本数据存储单位中缓存8个同样的数据;
其次,可以先后使用多次FetchRoi指令,将缓存模块中的一个基本数据存储单位中缓存的所有数据复制到其他基本数据存储单位中。例如,先后使用3次FetchRoi指令,将缓存模块中的一个基本数据存储单位中缓存的所有数据复制到利用w=0计算出的所有偏移地址所对应的基本数据存储单位中,先后使用3次FetchRoi指令,将缓存模块中的一个基本数据存储单位中缓存的所有数据复制到利用h=0计算出的所有偏移地址所对应的基本数据存储单位中。
本公开通过利用缓存区域中的有效数据来填充缓存区域,可以在不需要变更其他缓存数据的缓存位置的情况下,使缓存区域中存储由有效数据形成的待运算数据块,从而有利于便捷的实现张量的二元运算。
在一个可选示例中,本公开将第二张量的有效数据缓存于缓存模块中的一个例子如图5所示。
图5中,S500、根据更新前的第二张量的各维度的步长,计算第二张量的有效数据的第二偏移地址。
可选的,本公开可以利用上述公式(1),计算第二张量的有效数据的偏移地址,从而获得第二张量的有效数据的第二偏移地址。也就是说,本公开可以通过将更新前的第二张量的各维度的步长代入公式(1)中,可以获得第二张量的每一个有效数据的第二偏移地址。
S501、根据第二张量的起始地址和第二偏移地址,将有效数据缓存于相应的缓存区域中。
可选的,本公开中的第二张量的有效数据可以采用非紧密排布的方式,缓存在缓存模块的一缓存区域中。也就是说,缓存模块的一缓存区域中的有效数据可能并没有占满整个缓存区域,而是只占用了缓存区域中的部分空间。例如,表1中的一行16个片为一个缓存区域,第二张量的有效数据仅占用了表1所示的一缓存区域中的一个片。
可选的,本公开可以先根据第二张量的起始地址和第二偏移地址,确定第二张量的各有效数据的写起始地址,之后,再根据执行二元运算操作的数据处理芯片的基本计算粒度和写起始地址,将有效数据缓存于缓存模块的缓存区域中。其中的缓存区域的大小与基本计算粒度的大小相同。
可选的,本公开可以将更新前的第二张量的各维度的步长,代入上述公式(1)中,从而可以获得第二张量的各有效数据的第二偏移地址。
本公开通过利用第二张量的起始地址和第二偏移地址,来确定需要缓存的有效数据的写起始地址,可以快捷定位有效数据的缓存位置;通过基于该基本计算粒度将有效数据写入相应的缓存区域中,可以在不需要变更其他缓存数据的缓存位置的情况下,对有效数据进行填充处理,并缓存填充处理后的待运算数据块,从而有利于便捷的实现张量的二元运算。
示例性装置
图6为本公开的服务发现装置一个实施例的结构示意图。该实施例的装置可用于实现本公开相应的方法实施例。如图6所示的装置包括:确定维度差异模块600、更新步长模块601、读数据模块602以及执行运算单元603。可选的,该装置还可以包括:填充模块604。
确定维度差异模块600用于根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度。
更新步长模块601用于将确定维度差异模块600确定出的存在差异的维度的步长更新为预定值。
读数据模块602用于根据更新步长模块601更新后的具有预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块。其中的待运算数据块为填充处理后的数据块。
执行运算单元603用于根据读数据模块602读取出的第二张量的待运算数据块,执行与第一张量的二元运算。
可选的,确定维度差异模块600用于根据第一张量和第二张量的宽维度、高维度和通道维度,从第二张量中确定与第一张量的维度存在差异的维度。
可选的,读数据模块602可以包括:计算偏移地址子模块6021和读数据子模块6022。其中的计算偏移地址子模块6021用于根据更新步长模块601更新后的具有预定值的第二张量的各维度的步长,计算第二张量的待运算数据块的第一偏移地址。其中的读数据子模块6022用于根据第二张量的起始地址和计算偏移地址子模块6021获得的第一偏移地址,从缓存模块中读取第二张量的待运算数据块。
可选的,读数据子模块6022可以先根据第二张量的起始地址和计算偏移地址子模块6021获得的第一偏移地址确定从缓存模块读取的起始地址,之后,读数据子模块6022根据执行二元运算操作的数据处理芯片的基本计算粒度和其确定出的起始地址,从缓存模块中读取所述第二张量的待运算数据块。
填充模块604可以用于通过复制第二张量的有效数据,对第二张量进行填充处理,形成第二张量的待运算数据块。
可选的,填充模块604可以先根据更新前的第二张量的各维度的步长,将第二张量的有效数据缓存于缓存模块中;之后,填充模块604根据更新步长模块601更新后的具有预定值的第二张量的各维度的步长,确定需要进行填充处理的有效数据在所述缓存模块中的缓存区域;填充模块604对该缓存区域中的有效数据进行复制,并利用复制的有效数据将该缓存区域填满,形成第二张量的待运算数据块。
可选的,填充模块604根据更新前的第二张量的各维度的步长,计算第二张量的有效数据的第二偏移地址,并根据第二张量的起始地址和第二偏移地址,将有效数据缓存于该缓存区域中。
更具体的,填充模块604可以根据第二张量的起始地址和第二偏移地址,确定有效数据的写起始地址,并根据执行二元运算操作的数据处理芯片的基本计算粒度和上述写起始地址,将有效数据缓存于所述缓存模块的缓存区域中。其中的缓存区域的大小与基本计算粒度的大小相同。
示例性电子设备
下面参考图7来描述根据本公开实施例的电子设备。图7示出了根据本公开实施例的电子设备的框图。如图7所示,电子设备71包括一个或多个处理器711和存储器712。
处理器711可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备71中的其他组件以执行期望的功能。
存储器712可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器,例如,可以包括:随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器,例如,可以包括:只读存储器(ROM)、硬盘以及闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器711可以运行所述程序指令,以实现上文所述的本公开的各个实施例的计算机实现张量数据计算的方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备71还可以包括:输入装置713以及输出装置714等,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。此外,该输入设备713还可以包括例如键盘、鼠标等等。该输出装置714可以向外部输出各种信息。该输出设备714可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图7中仅示出了该电子设备71中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备71还可以包括任何其他适当的组件。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的计算机实现张量数据计算的方法或者基于语言模型的概率预测方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的计算机实现张量数据计算的方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列举)可以包括:具有一个或者多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势以及效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备以及系统。诸如“包括”、“包含、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述,以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改等对于本领域技术人员而言,是非常显而易见的,并且在此定义的一般原理可以应用于其他方面,而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式中。尽管以上已经讨论了多个示例方面以及实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (10)
1.一种计算机实现张量数据计算的方法,包括:
根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度;
将所述存在差异的维度的步长更新为预定值;
根据更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块;其中,所述待运算数据块为填充处理后的数据块;
根据所述第二张量的待运算数据块,执行与所述第一张量的二元运算。
2.根据权利要求1所述的方法,其中,所述根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度,包括:
根据第一张量和第二张量的宽维度、高维度和通道维度,从第二张量中确定与第一张量的维度存在差异的维度。
3.根据权利要求1或2所述的方法,其中,所述根据更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块,包括:
根据更新后的具有所述预定值的所述第二张量的各维度的步长,计算所述第二张量的待运算数据块的第一偏移地址;
根据所述第二张量的起始地址和所述第一偏移地址,从缓存模块中读取所述第二张量的待运算数据块。
4.根据权利要求3所述的方法,其中,所述根据所述第二张量的起始地址和所述第一偏移地址,从缓存模块中读取所述第二张量的待运算数据块,包括:
根据所述第二张量的起始地址和所述第一偏移地址,确定从缓存模块读取的起始地址;
根据执行二元运算操作的数据处理芯片的基本计算粒度和所述起始地址,从所述缓存模块中读取所述第二张量的待运算数据块。
5.根据权利要求1至4中任一项所述的方法,其中,所述方法在将所述存在差异的维度的步长更新为预定值之前,还包括:
通过复制所述第二张量的有效数据,对所述第二张量进行填充处理,形成所述第二张量的待运算数据块。
6.根据权利要求5所述的方法,其中,所述通过复制所述第二张量的有效数据,对所述第二张量进行填充处理,形成所述第二张量的待运算数据块,包括:
根据更新前的所述第二张量的各维度的步长,将所述第二张量的有效数据缓存于所述缓存模块中;
根据更新后的具有所述预定值的所述第二张量的各维度的步长,确定所述需要进行填充处理的有效数据在所述缓存模块中的缓存区域;
对所述缓存区域中的有效数据进行复制,并利用复制的有效数据将所述缓存区域填满,形成所述第二张量的待运算数据块。
7.根据权利要求6所述的方法,其中,所述根据更新前的所述第二张量的各维度的步长,将所述第二张量的有效数据缓存于所述缓存模块中,包括:
根据更新前的所述第二张量的各维度的步长,计算所述第二张量的有效数据的第二偏移地址;
根据所述第二张量的起始地址和所述第二偏移地址,将所述有效数据缓存于所述缓存区域中。
8.一种计算机实现张量数据计算的装置,包括:
确定维度差异模块,用于根据第一张量的维度和第二张量的维度,从第二张量中确定与第一张量的维度存在差异的维度;
更新步长模块,用于将所述确定维度差异模块确定出的存在差异的维度的步长更新为预定值;
读数据模块,用于根据所述更新步长模块更新后的具有所述预定值的第二张量的各维度的步长,从缓存模块中读取所述第二张量的待运算数据块;其中,所述待运算数据块为填充处理后的数据块;
执行运算单元,用于根据所述读数据模块读取出的第二张量的待运算数据块,执行与所述第一张量的二元运算。
9.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-7中任一项所述的方法。
10.一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-7中任一项所述的方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010655451.4A CN111767508B (zh) | 2020-07-09 | 2020-07-09 | 计算机实现张量数据计算的方法、装置、介质和设备 |
EP20944539.4A EP4020261A4 (en) | 2020-07-09 | 2020-11-24 | METHOD AND DEVICE FOR IMPLEMENTING TENSORD DATA CALCULATION BY COMPUTER AS WELL AS MEDIUM AND DEVICE |
JP2022519784A JP7353475B2 (ja) | 2020-07-09 | 2020-11-24 | コンピュータがテンソルデータの計算を実現する方法、装置、媒体及び機器 |
PCT/CN2020/131064 WO2022007311A1 (zh) | 2020-07-09 | 2020-11-24 | 计算机实现张量数据计算的方法、装置、介质和设备 |
US17/765,775 US11907112B2 (en) | 2020-07-09 | 2020-11-24 | Method and apparatus for calculating tensor data with computer, medium, and device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010655451.4A CN111767508B (zh) | 2020-07-09 | 2020-07-09 | 计算机实现张量数据计算的方法、装置、介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767508A true CN111767508A (zh) | 2020-10-13 |
CN111767508B CN111767508B (zh) | 2024-02-23 |
Family
ID=72725787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010655451.4A Active CN111767508B (zh) | 2020-07-09 | 2020-07-09 | 计算机实现张量数据计算的方法、装置、介质和设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11907112B2 (zh) |
EP (1) | EP4020261A4 (zh) |
JP (1) | JP7353475B2 (zh) |
CN (1) | CN111767508B (zh) |
WO (1) | WO2022007311A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022007311A1 (zh) * | 2020-07-09 | 2022-01-13 | 地平线(上海)人工智能技术有限公司 | 计算机实现张量数据计算的方法、装置、介质和设备 |
CN115658146A (zh) * | 2022-12-14 | 2023-01-31 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
WO2024012492A1 (zh) * | 2022-07-15 | 2024-01-18 | 北京有竹居网络技术有限公司 | 人工智能芯片、灵活地访问数据的方法、设备和介质 |
WO2024124807A1 (zh) * | 2022-12-14 | 2024-06-20 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114444675A (zh) * | 2020-10-30 | 2022-05-06 | 北京晶视智能科技有限公司 | 一种硬件加速器 |
DE112022002258T5 (de) * | 2022-01-28 | 2024-02-22 | Nvidia Corporation | Tensormodifikation basierend auf der verarbeitung von ressourcen |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU1498000A (en) * | 1997-04-30 | 2000-04-13 | Canon Kabushiki Kaisha | Graphics processor architecture |
CN101611387A (zh) * | 2007-01-10 | 2009-12-23 | 移动半导体公司 | 用于增强外部计算设备的性能的自适应存储系统 |
CN104391820A (zh) * | 2014-11-25 | 2015-03-04 | 清华大学 | 基于fpga的通用浮点矩阵处理器硬件结构 |
CN105160623A (zh) * | 2015-08-17 | 2015-12-16 | 河南科技学院 | 基于组块低秩张量模型的无监督高光谱数据降维方法 |
CN105183665A (zh) * | 2015-09-08 | 2015-12-23 | 福州瑞芯微电子股份有限公司 | 一种数据缓存访问方法和数据缓存控制器 |
CN105531602A (zh) * | 2013-07-17 | 2016-04-27 | 雪佛龙美国公司 | 利用多个加速处理部件(apc)实现时域有限差分模型的系统和方法 |
TW201706871A (zh) * | 2015-05-21 | 2017-02-16 | 咕果公司 | 使用類神經網路處理器計算卷積 |
US20170323224A1 (en) * | 2016-05-07 | 2017-11-09 | 1026 Labs, Inc. | Apparatus for hardware accelerated machine learning |
CN109215372A (zh) * | 2018-10-15 | 2019-01-15 | 百度在线网络技术(北京)有限公司 | 路网信息更新方法、装置及设备 |
US20190042092A1 (en) * | 2018-06-12 | 2019-02-07 | Olivia Wu | Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle |
CN110050267A (zh) * | 2016-12-09 | 2019-07-23 | 北京地平线信息技术有限公司 | 用于数据管理的系统和方法 |
CN110084361A (zh) * | 2017-10-30 | 2019-08-02 | 上海寒武纪信息科技有限公司 | 一种运算装置和方法 |
CN110659068A (zh) * | 2018-06-29 | 2020-01-07 | 英特尔公司 | 用于张量置换引擎的装置和方法 |
CN110991229A (zh) * | 2019-10-24 | 2020-04-10 | 中山大学 | 基于dsp芯片与量化模型的三维物体识别方法 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5333291A (en) * | 1991-06-14 | 1994-07-26 | International Business Machines Corporation | Stride enhancer for high speed memory accesses with line fetching mode and normal mode employing boundary crossing determination |
US5860076A (en) * | 1996-01-11 | 1999-01-12 | Alliance Semiconductor Corporation | 48-bit wide memory architecture addressing scheme reconfigurable for 8-bit, 16-bit and 32-bit data accesses |
US20140181171A1 (en) * | 2012-12-24 | 2014-06-26 | Pavel Dourbal | Method and system for fast tensor-vector multiplication |
US9875104B2 (en) * | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10404290B2 (en) * | 2016-07-29 | 2019-09-03 | Western Digital Technologies, Inc. | Non-binary decoding using tensor product transforms |
US9779786B1 (en) * | 2016-10-26 | 2017-10-03 | Xilinx, Inc. | Tensor operations and acceleration |
US20190392297A1 (en) * | 2016-12-30 | 2019-12-26 | Intel Corporation | Deep learning hardware |
US20190130291A1 (en) * | 2017-10-27 | 2019-05-02 | Wave Computing, Inc. | Dynamic reconfiguration with partially resident agents |
US20200174707A1 (en) * | 2017-10-27 | 2020-06-04 | Wave Computing, Inc. | Fifo filling logic for tensor calculation |
US11016848B2 (en) | 2017-11-02 | 2021-05-25 | Seagate Technology Llc | Distributed data storage system with initialization-less parity |
US11467973B1 (en) * | 2018-09-28 | 2022-10-11 | Amazon Technologies, Inc. | Fine-grained access memory controller |
CN112840356B (zh) * | 2018-10-09 | 2023-04-11 | 华为技术有限公司 | 运算加速器、处理方法及相关设备 |
CN111324294B (zh) * | 2018-12-17 | 2023-11-07 | 地平线(上海)人工智能技术有限公司 | 存取张量数据的方法和装置 |
CN109886399B (zh) | 2019-02-13 | 2021-03-23 | 上海燧原智能科技有限公司 | 一种张量处理装置及方法 |
CN110837483B (zh) | 2019-09-30 | 2021-07-23 | 厦门星宸科技有限公司 | 张量维度变换的方法以及装置 |
CN111767508B (zh) | 2020-07-09 | 2024-02-23 | 地平线(上海)人工智能技术有限公司 | 计算机实现张量数据计算的方法、装置、介质和设备 |
CA3195228A1 (en) * | 2020-09-18 | 2022-03-24 | Nubis Communications Inc. | Data processing systems including optical communication modules |
US11636569B1 (en) * | 2020-09-23 | 2023-04-25 | Amazon Technologies, Inc. | Matrix transpose hardware acceleration |
US11988874B2 (en) * | 2020-10-07 | 2024-05-21 | Nubis Communications, Inc. | Data processing systems including optical communication modules |
US20220391320A1 (en) * | 2021-05-24 | 2022-12-08 | Industry-Academic Cooperation Foundation, Yonsei University | Operation device of convolutional neural network, operation method of convolutional neural network and computer program stored in a recording medium to execute the method thereof |
JP2022187683A (ja) * | 2021-06-08 | 2022-12-20 | 株式会社日立製作所 | データ圧縮伸長システム、及びその方法 |
-
2020
- 2020-07-09 CN CN202010655451.4A patent/CN111767508B/zh active Active
- 2020-11-24 EP EP20944539.4A patent/EP4020261A4/en active Pending
- 2020-11-24 JP JP2022519784A patent/JP7353475B2/ja active Active
- 2020-11-24 WO PCT/CN2020/131064 patent/WO2022007311A1/zh unknown
- 2020-11-24 US US17/765,775 patent/US11907112B2/en active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU1498000A (en) * | 1997-04-30 | 2000-04-13 | Canon Kabushiki Kaisha | Graphics processor architecture |
CN101611387A (zh) * | 2007-01-10 | 2009-12-23 | 移动半导体公司 | 用于增强外部计算设备的性能的自适应存储系统 |
CN105531602A (zh) * | 2013-07-17 | 2016-04-27 | 雪佛龙美国公司 | 利用多个加速处理部件(apc)实现时域有限差分模型的系统和方法 |
CN104391820A (zh) * | 2014-11-25 | 2015-03-04 | 清华大学 | 基于fpga的通用浮点矩阵处理器硬件结构 |
TW201706871A (zh) * | 2015-05-21 | 2017-02-16 | 咕果公司 | 使用類神經網路處理器計算卷積 |
CN105160623A (zh) * | 2015-08-17 | 2015-12-16 | 河南科技学院 | 基于组块低秩张量模型的无监督高光谱数据降维方法 |
CN105183665A (zh) * | 2015-09-08 | 2015-12-23 | 福州瑞芯微电子股份有限公司 | 一种数据缓存访问方法和数据缓存控制器 |
US20170323224A1 (en) * | 2016-05-07 | 2017-11-09 | 1026 Labs, Inc. | Apparatus for hardware accelerated machine learning |
CN110050267A (zh) * | 2016-12-09 | 2019-07-23 | 北京地平线信息技术有限公司 | 用于数据管理的系统和方法 |
CN110084361A (zh) * | 2017-10-30 | 2019-08-02 | 上海寒武纪信息科技有限公司 | 一种运算装置和方法 |
US20190042092A1 (en) * | 2018-06-12 | 2019-02-07 | Olivia Wu | Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle |
CN110659068A (zh) * | 2018-06-29 | 2020-01-07 | 英特尔公司 | 用于张量置换引擎的装置和方法 |
CN109215372A (zh) * | 2018-10-15 | 2019-01-15 | 百度在线网络技术(北京)有限公司 | 路网信息更新方法、装置及设备 |
CN110991229A (zh) * | 2019-10-24 | 2020-04-10 | 中山大学 | 基于dsp芯片与量化模型的三维物体识别方法 |
Non-Patent Citations (4)
Title |
---|
LERTORA FRANCESCO 等: "Handling Different Computational Granularity by a Reconfigurable IC Featuring Embedded FPGAs and a Network-On-Chip", 《13TH ANNUAL IEEE SYMPOSIUM ON FIELD-PROGRAMMABLE CUSTOM COMPUTING MACHINES (FCCM\'05)》, 17 October 2005 (2005-10-17), pages 45 - 54 * |
YANG YI 等: "A GPGPU compiler for memory optimization and parallelism management", 《ACM SIGPLAN NOTICES》, vol. 45, no. 6, 5 June 2010 (2010-06-05), pages 86 - 97 * |
张顺 等: "深度卷积神经网络的发展及其在计算机视觉领域的应用", 《计算机学报》, vol. 42, no. 03, 18 September 2017 (2017-09-18), pages 453 - 482 * |
王巍达: "聚类算法的GPU实现及其应用", 《中国优秀硕士学位论文全文数据库信息科技辑》, no. 03, 15 March 2016 (2016-03-15), pages 138 - 5542 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022007311A1 (zh) * | 2020-07-09 | 2022-01-13 | 地平线(上海)人工智能技术有限公司 | 计算机实现张量数据计算的方法、装置、介质和设备 |
US11907112B2 (en) | 2020-07-09 | 2024-02-20 | Horizon (Shanghai) Artificial Intelligence Technology Co., Ltd | Method and apparatus for calculating tensor data with computer, medium, and device |
WO2024012492A1 (zh) * | 2022-07-15 | 2024-01-18 | 北京有竹居网络技术有限公司 | 人工智能芯片、灵活地访问数据的方法、设备和介质 |
CN115658146A (zh) * | 2022-12-14 | 2023-01-31 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
WO2024124807A1 (zh) * | 2022-12-14 | 2024-06-20 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
JP7353475B2 (ja) | 2023-09-29 |
CN111767508B (zh) | 2024-02-23 |
US20220374347A1 (en) | 2022-11-24 |
JP2022550170A (ja) | 2022-11-30 |
EP4020261A4 (en) | 2023-10-11 |
US11907112B2 (en) | 2024-02-20 |
EP4020261A1 (en) | 2022-06-29 |
WO2022007311A1 (zh) | 2022-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111767508A (zh) | 计算机实现张量数据计算的方法、装置、介质和设备 | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
US9986187B2 (en) | Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register | |
US20120221788A1 (en) | Multi-dimensional array manipulation | |
US20180137414A1 (en) | Convolution operation device and convolution operation method | |
Dongarra et al. | Achieving numerical accuracy and high performance using recursive tile LU factorization with partial pivoting | |
CN113032007B (zh) | 一种数据处理方法及装置 | |
US20110103712A1 (en) | Structured grids and graph traversal for image processing | |
US20210117806A1 (en) | Composable neural network kernels | |
US10152310B2 (en) | Fusing a sequence of operations through subdividing | |
US20200410330A1 (en) | Composable neural network kernels | |
WO2019141160A1 (zh) | 一种数据处理的方法及装置 | |
CN112116071B (zh) | 神经网络计算方法、装置、可读存储介质以及电子设备 | |
KR20180055447A (ko) | 데이터 처리 방법 및 장치 | |
US9349155B2 (en) | Computing apparatus and method using X-Y stack memory | |
US11636569B1 (en) | Matrix transpose hardware acceleration | |
CN112084443B (zh) | 页面缓存方法及装置 | |
TWI722684B (zh) | 關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置 | |
CN114065119A (zh) | 数据处理方法及相关产品 | |
JP2018088098A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
EP3495947A1 (en) | Operation device and method of operating same | |
US12125124B1 (en) | Matrix transpose hardware acceleration | |
CN117742664B (zh) | 基于gpu的求模方法、装置、设备及介质 | |
KR20230095775A (ko) | Ndp 기능을 포함하는 메모리 확장 장치 및 이를 포함하는 가속기 시스템 | |
WO2020250420A1 (ja) | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |