一种数据处理装置、数据处理方法及相关产品与流程

文档序号:24073926发布日期:2021-02-26 16:26阅读:163来源:国知局
一种数据处理装置、数据处理方法及相关产品与流程

[0001]
本披露一般地涉及数据处理领域。更具体地,本披露涉及一种数据处理装置、数据处理方法、芯片和板卡。


背景技术:

[0002]
转置(transpose)运算是数学和工程领域的常用运算之一,用于对多维数组进行转置操作。对于多维数组转置的计算机硬件实现,通常将一部分数据搬运到缓存上,通过在缓存上执行一次或多次读取和写入操作来实现多维数组的转置运算。
[0003]
然而,通过硬件指令在缓存上执行转置操作时,如果待转置的两个维度之一特别小,由于缓存以块为单位进行调度的特性,执行转置操作的效率将会特别低。因此,针对这种情况需要提供能够提高这种特殊规模的转置操作的执行效率的技术方案。


技术实现要素:

[0004]
为了至少解决如上所提到的技术问题,本披露在多个方面中提出了基于维度重组的多维数组转置的硬件实现方案,从而在针对前述特殊规模的多维数组的转置操作中,能够提高执行效率。
[0005]
在第一方面中,本披露提供了一种数据处理装置,包括:处理单元,配置用于对第一多维数据块执行转置指令;以及第一存储单元,配置用于在所述转置指令执行期间缓存数据;其中,所述处理单元配置成通过如下步骤来执行所述转置指令:确定所述转置指令所针对的第一多维数据块的两个维度及相应的维度大小;以及当所述两个维度中仅一个维度大小低于第一阈值时,通过在所述第一存储单元上对所述第一多维数据块执行多次读取和写入操作,对所述第一多维数据块执行多次维度重组和转置操作以得到第二多维数据块,其中所述维度重组使得参与第一次转置操作的两个维度的维度大小均超过所述第一阈值。
[0006]
在第二方面中,本披露提供了一种芯片,其包括前述第一方面的任一实施例的数据处理装置。
[0007]
在第三方面中,本披露提供了一种板卡,其包括前述第二方面的任一实施例的芯片。
[0008]
在第四方面中,本披露提供了一种由数据处理装置实施的数据处理方法,所述数据处理装置包括处理单元和第一存储单元,所述方法包括:所述处理单元确定转置指令所针对的第一多维数据块的两个维度及相应的维度大小;以及当所述两个维度中仅一个维度大小低于第一阈值时,通过在所述第一存储单元上对所述第一多维数据块执行多次读取和写入操作,对所述第一多维数据块执行多次维度重组和转置操作以得到第二多维数据块,其中所述维度重组使得参与第一次转置操作的两个维度的维度大小均超过所述第一阈值。
[0009]
通过如上所提供的数据处理装置、芯片、板卡以及由数据处理装置实施的数据处理方法,本披露的方案通过维度重组来优化针对特定规模的多维数据块的硬件转置操作,从而提高处理效率。
附图说明
[0010]
通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
[0011]
图1示出了可以实施本披露实施例的计算机硬件的示例性架构图;
[0012]
图2示出了示例性三维数组;
[0013]
图3示例性示出了多维数组在存储器上的存储顺序;
[0014]
图4示例性示出了三维数组转置的计算机硬件实现过程;
[0015]
图5示例性示出了四维数组的示意性转换过程;
[0016]
图6示出了根据本披露实施例的维度重组的示例性概念;
[0017]
图7示例性示出了可以实施本披露实施例的数据处理装置的示意性结构图;
[0018]
图8示出了根据本披露实施例的数据处理方法的示例性流程图;
[0019]
图9示出了根据本披露实施例的维度重组和转置操作的示例性流程图;
[0020]
图10a-图10b示出了根据本披露实施例的多次维度重组和转置操作的简化示意图;
[0021]
图11示出根据本披露实施例的一种组合处理装置的结构图;以及
[0022]
图12是示出根据本披露实施例的一种板卡的结构示意图。
具体实施方式
[0023]
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
[0024]
应当理解,本披露的权利要求、说明书及附图中可能使用的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0025]
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0026]
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0027]
图1示出了可以实施本披露实施例的计算机硬件的示例性架构图。图1所示的处理核100可以是单核或多核处理器中的处理核,用以处理计算机视觉、语音、自然语言、数据挖掘等各种输入数据。如图1所示,处理核100可以包括三大模块:控制模块10、运算模块20及
存储模块30。
[0028]
控制模块10用以协调并控制运算模块20和存储模块30的工作,以完成各种任务(例如,深度学习),其包括取指单元(instruction fetch unit,ifu)11及指令译码单元(instruction decode unit,idu)12。取指单元11用以获取来自处理装置(未示出)的指令,例如从内存dram 40获取指令。指令译码单元12则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块20和存储模块30。
[0029]
运算模块20用于完成各种计算任务,其例如可以包括向量运算单元21及矩阵运算单元22。向量运算单元21用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元22负责深度学习算法的核心计算,例如矩阵乘和卷积。随着数据维度的增加,运算模块20还可以包括更高维度数据运算单元,例如张量运算单元(未示出)。
[0030]
存储模块30用来存储或搬运相关数据,其可以包括各种ram(random acess memory,随机访问存储器)和直接内存访问模块(direct memory access,dma)。例如,如图所示,在实施深度学习时,存储模块30可以包括神经元存储单元(neuron ram,nram)31、权值存储单元(weight ram,wram)32和直接内存访问模块dma 33。nram 31用以存储供处理核100计算的输入、输出数据及中间结果;wram 32则用以存储深度学习网络的权值;dma 33通过总线连接处理核内部高速缓存(例如,nram 31、wram 32)和芯片存储(例如,dram 40),负责芯片存储与处理核内部高速缓存之间的数据搬运。
[0031]
随着人工智能技术的发展,在诸如图像处理和模式识别等的任务中,面向的数据往往是多维数组形式。而且,针对多维数组的运算,例如转置运算,也越来越多,因此需要提高对应的处理效率。下面描述本披露实施例中涉及的多维数组以及对应的转置操作。
[0032]
顾名思义,多维数组是包括多个维度的数组。一个多维数组的维度信息可以包括该数组的维度数、各个维度的尺寸等。例如,对于n维数组,可以使用x
n
=(x1,x2,

,x
i


,x
n
)来表示其维度信息,其中x
i
(i∈1,2,

,n)表示其中某一个维度的大小。
[0033]
图2示出了示例性三维数组,或称三维数据块。如图2中(a)图所示,该三维数组x具有三个维度,分别是数据块深度方向的维度0(dim0)、数据块高度方向的维度1(dim1)和数据块宽度方向的维度2(dim2)。维度0的尺寸为2,维度1的尺寸为2,维度2的尺寸为3。相应地,按照维度从高到低的顺序,也即从维度0、维度1到维度2的顺序,该三维数组x的维度信息可以表示为:x3=(2,2,3)。基于图中所示的示例性数据,按照低维度优先的原则,该三维数组x可以表示为:
[0034]
x=[[[1,2,3],[4,5,6]];[[7,8,9],[10,11,12]]]。
[0035]
根据某种维度转换规则perm
n
=(p1,p2,

,p
i
,

,p
n
),可以得到维度转换后的数据排列,其中p
i
(i∈1,2,

,n)的取值代表数组的原始维度,p
i
在perm
n
中的位置代表转换的目标维度。例如,给定维度转换规则perm3=(0,2,1),表示要将维度1与维度2进行交换,也即原始维度1要转换成新数组的维度2,原始维度2要转换成新数组的维度1。
[0036]
图2中(b)图示出了对(a)图所示的三维数组x应用上述示例性维度转换规则perm3后得到的转换后的数组y。从图中可以看出,相比于数组x,数组y的维度1和维度2发生了交换。此时,三维数组y的维度信息可以表示为:y3=(2,3,2)。仍然按照低维度优先的原则,三维数组y变为:
[0037]
y=[[[1,4],[2,5],[3,6]];[[7,10],[8,11],[9,12]]]。
[0038]
虽然多维数组具有多个维度,但是因为存储器(例如,前面提到的内存dram和缓存ram)的布局始终是一维的,因此多维数组与存储器上的存储顺序之间存在对应关系。多维数组通常被分配在连续的存储空间中,也即可以将多维数组进行一维展开(例如,低维度优先方式),按顺序存储在存储器上。但是,对多维数组进行前述转置操作后,将会改变多维数组在内存中的存储顺序。
[0039]
图3示例性示出了多维数组在存储器上的存储顺序,其使用一块连续内存的一维数组来实现多维数组的存储。例如,仍然以图2所示的示例性三维数组x为例,按照低维度优先方式(例如行优先),可以将其一维展开为x=[1,2,3,4,5,6,7,8,9,10,11,12]。
[0040]
图3的(a)图中示出了三维数组x的存储顺序,其与三维数组x的一维展开顺序一致。在(a)图中,背景相同的数据表示位于同一行(维度dim2)。可以看出,最低维度(同一行)的数据是连续的,更高维度的数据则间隔不同的距离。例如,在(a)图所示的存储方式下,访问维度dim2上相邻元素物理结构需要偏移1个位置(例如,从数据1到数据2,数据5到数据6,等等);访问维度dim1上相邻元素物理结构需要偏移3个位置(例如,从数据1到数据4,数据2到数据5,

,数据9到数据12,等等);而访问维度dim0上相邻元素物理结构则需要偏移6个位置(例如,从数据1到数据7,数据2到数据8,

,数据6到数据12,等等)。这个偏移量称为步长(stride)。三维数组x的各个维度的步长可以表示为s
x
=(6,3,1)。
[0041]
当图2中的三维数组x通过转置变换变成三维数组y时,仍然按照低维度优先方式,可以将其一维展开为y=[1,4,2,5,3,6,7,10,8,11,9,12]。
[0042]
图3的(b)图中示出了三维数组y的存储顺序,其与三维数组y的一维展开顺序一致。类似地,在(b)图中,背景相同的数据表示位于同一行(图2(b)中y的dim1)。可以看出,最低维度(同一行)的数据是连续的,更高维度的数据则间隔不同的距离。例如,在(b)图所示的存储方式下,访问维度dim1上相邻元素物理结构的步长是1,也即需要偏移1个位置(例如,从数据1到数据4,数据2到数据5,等等);访问维度dim2上相邻元素物理结构的步长是2,也即需要偏移2个位置(例如,从数据1到数据2,数据2到数据3,数据4到数据5,等等);而访问维度dim0上相邻元素物理结构的步长是6,也即需要偏移6个位置(例如,从数据1到数据7,数据4到数据10,数据2到数据8,等等)。三维数组y的各维度的步长可以表示为s
y
=(6,2,1)。
[0043]
从图3可以看出,三维数组x经过转置运算后变成三维数组y,其维度信息发生了变化,在存储器上的存储顺序也发生变化,例如从(a)变成(b),各维度的访问步长也发生变化。
[0044]
对于多维数组转置的计算机硬件实现,通常将一部分数据从内存(例如图1所示的dram 40)搬运到缓存(例如,图1所示的各种ram)上,通过在缓存上用硬件指令执行一次或多次转置操作来实现多维数组的转置运算。
[0045]
图4示例性示出了三维数组转置的计算机硬件实现过程。具体地,图4中(a)图示出了内存dram上三维数组的存储情况。通常dram的存储容量较大,能够容纳大量的数据。缓存ram的存储容量较小,只能容纳少量的数据。因此,在实际处理时,根据缓存的最大可用空间,将一部分数据(图中的小立方体)从内存搬运到缓存。图4中(b)图示出了搬运到缓存上的三维数组,图中的(dim0

,dim1

,dim2

)表示该缓存上一次能够处理的数据块。
[0046]
接着,利用硬件指令在缓存上对搬运过去的数据执行一次或多次转置操作。根据
不同的目标转换维度,有不同的硬件指令执行,其对应关系如表1所示。表1中假设原始摆放维度为(dim0,dim1,dim2)。
[0047]
目标转换维度硬件指令(dim0,dim2,dim1)trans(dim1,dim2)(dim1,dim0,dim2)trans(dim0,dim1)(dim2,dim1,dim0)trans(dim0,dim2)(dim1,dim2,dim0)trans(dim0,dim2)+trans(dim1,dim2)(dim2,dim0,dim1)trans(dim1,dim2)+trans(dim0,dim2)
[0048]
表1.目标转换维度与其对应的硬件指令
[0049]
对于表1中的最后两种情况,可以把没有改变顺序的两个维度进行合并,使用一条硬件指令完成相同的功能,如表2所示。
[0050]
目标转换维度硬件指令(dim1,dim2,dim0)trans(dim0,dim1*dim2)(dim2,dim0,dim1)trans(dim0*dim1,dim2)
[0051]
表2.目标转换维度与其对应的硬件指令
[0052]
以目标转换维度(dim2,dim1,dim0)为例,通过硬件指令trans(dim0,dim2)对在缓存上的三维数组的维度0和维度2执行维度转换。维度转换后的数据再搬运回内存。
[0053]
图4中(c)图示出了在缓存上执行硬件转置指令之后得到三维数组,从图中可以看出,相比于(b),该三维数组的维度0和维度2已经进行了交换,也即变为(dim2

,dim1

,dim0

)。
[0054]
图4中(d)图示出了将维度转换后的三维数组从缓存搬运回内存的示意图。如图(d)所示,维度转换后的数据块(dim2

,dim1

,dim0

)被搬运回内存中。对于规模较大、不能一次在缓存上处理完的数据,可以接着搬运其余部分的数据块并重复上述步骤,直至全部处理完。
[0055]
对于多于三维的多维数组转置,可以在上述图4的搬运过程中完成部分转置操作。也即,在从内存到缓存(从(a)到(b)),和/或从缓存回到内存(从(c)到(d))的搬运过程中执行部分转置操作。
[0056]
例如,对于四维数组x4=(dim0,dim1,dim2,dim3),假设给定维度转换规则perm4=(3,2,1,0),则要将该四维数组x4重新摆放成四维数组y4=(dim3,dim2,dim1,dim0)的形式。
[0057]
图5示例性示出了上述四维数组的示意性转换过程。
[0058]
图5中(a)图示出了原始四维数组x4=(dim0,dim1,dim2,dim3),该数组x4可以保存在内存上。直观上,四维数组可以理解为在三维数组的基础上增加一个维度,也即在单个立体矩形的基础上再增加立体矩形这个维度。例如,(a)图中示出三维数据块(dim1,dim2,dim3),当再增加一个三维数据块(dim1,dim2,dim3)时,可以表示四维数据块x4=(dim0,dim1,dim2,dim3),在此示例中dim0的大小为2,也即存在2个立体矩形块。
[0059]
首先,从内存向缓存连续搬运dim0、dim1和dim3,此时,dim2在最高维,即在缓存上的摆放顺序为(dim2,dim0,dim1,dim3),如图5中的(b)图所示。图中从(a)到(b)的实线箭头指示了dim1的搬运,点划线箭头指示了dim0的搬运。
[0060]
接着,根据表1和表2中的对应关系,在缓存上对搬运过来的数组执行硬件转置指
令(例如执行trans(dim0,dim3),把(dim0,dim1,dim3)转成(dim3,dim1,dim0)),得到如图5的(c)图所示的数组。
[0061]
最后,在从缓存把转换后的数据搬回内存的过程中交换dim2和dim3,从而得到转换后的四维数组y4=(dim3,dim2,dim1,dim0),如图5的(d)图所示。图中从(c)到(d)的实线箭头指示了dim1的搬运。
[0062]
本领域技术人员可以理解,尽管图4和图5分别示出了三维数组和四维数组的示例性转置过程,但是对于更高维度的数组转置,可以参考上述示例类似实现。
[0063]
如背景技术中所提到的,通过硬件指令在缓存上执行转置操作时,如果待转置的两个维度中有一个维度特别小,例如远远小于指令对齐要求的尺寸,那么由于指令对齐要求导致的访问特性,执行转置操作的效率将会特别低。通常在这种情况下,会对待转置的数据块进行补齐操作,例如相对于指令对齐要求的大小进行补齐。但是即便如此,对于某一个维度特别小并且不能与其他维度合并这种特殊规模的多维数组,其转置操作的效率仍然非常低。
[0064]
以下通过具体示例详细说明上述情况下转置效率低下的原因。例如,假设缓存大小为32kb,缓存块大小为64b,该缓存可以有512个缓存块。缓存是以缓存块为单位进行调度,也即每次连续读/写一个缓存块,也称为缓存行。所谓对齐是指数据在存储器中存放的规则。指令对齐是指指令要求数据在存储器中存放的一种规则。一般指令需要片上两行对齐,在上述示例中,一行64b,两行128b。对于float32数据类型,需要对齐到128/4=32个数,对于float16数据类型,需要对齐到128/2=64个数。假设待转置的源数组的两个维度分别为3和1024,不妨将该数组表示为3*1024的二维矩阵,数组中的数据为float16类型,也即矩阵的每个元素占据两个字节(byte),其已经存储在缓存上。按照上述示例,此时需要对齐到64个数。
[0065]
由于列维度的大小(此处为3)没有对齐到指令对齐要求(64),因此在执行转置前,需要针对列维度进行补齐操作。例如,可以将列维度大小从3补齐到64,比如通过填充0来实现。当执行转置时,从缓存读取第一行数据,也即1024个元素,需要读取16次。接着,将第一行数据作为转置后的目标数组的第一列数据写入缓存中。由于多维数组是以低维度优先(例如,行优先)方式进行存储的,因此转置得到的第一列数据在缓存中不是连续存储的,而是跳跃的,步长为源数组的列维度大小,在此示例中为补齐后的64个数。对缓存的这种不连续写入耗时较大。在此示例中,需要写入1024次。
[0066]
接着,从缓存读取第二行数据,也即1024个元素,同样需要读取16次。然后,将第二行数据作为转置后的目标数组的第二列数据写入缓存中。同样地,需要写入1024次。针对补齐区域类似地执行上述操作,直到完成整个数组的转置。整个转置过程,总计需要读16
×
64次,写入1024
×
64次。
[0067]
从上述过程可以看出,由于源数组的列维度较小,为了补齐到指令对齐要求,需要比较大的填0区域,在执行转置时也需要对填0区域进行操作,这样既降低了效率,又浪费了缓存资源。
[0068]
鉴于此,本披露实施例针对这种特殊规模的多维数组的转置操作,提供了一种优化方案以提高转置操作的执行效率。
[0069]
具体地,本披露实施例提供了一种基于维度重组的多维数组转置操作的方案。在
此方案中,当在缓存上针对这种特殊规模的多维数组执行硬件转置指令时,通过对维度进行拆分和合并以将维度重组成合适的大小,并在此基础上执行硬件转置指令。特别地,对于待转置的两个维度中的一个维度特别小,例如低于第一阈值,而另一维度较大的情况,可以将较大的维度进行拆分,拆分出来的子维度可以与较小的维度进行合并,从而得到维度重组的多维数组。维度重组后的多维数组的两个维度均大于第一阈值。继而针对维度重组后的多维数组执行硬件转置指令。通过多次维度重组和转置操作,可以获得针对原始多维数组的目标转置结果。
[0070]
在本披露实施例中,多维数组的维度合并是指将多维数组中相邻的两个或更多个维度合并成一个维度。多维数组的维度拆分则是指将多维数组中的一个维度拆分成两个或多个相邻的子维度。如前面所提到,多维数组的维度可以按照从高维度到低维度的方式排列,例如从dim0到dimn,相邻的维度是指数据块的维度信息表示中相互紧挨着的维度,例如dim0和dim1,dim1和dim2,以此类推。
[0071]
图6示出了根据本披露实施例的维度重组的示例性概念。
[0072]
图6(a)中示出了原始三维数组x,包括三个维度(dim0,dim1,dim2),维度信息为x3=(2,2,3)。按照低维度优先的方式进行一维展开,x在存储器上的存储顺序如图6(d)所示。x各维度的访问步长信息可以表示为s
x
=(6,3,1)。
[0073]
根据前面对维度合并的解释,对于三维数组x,可以存在如下维度合并情况:相邻的dim0和dim1合并,或者相邻的dim1和dim2合并。当然,三个维度也可以全部合并成一个维度,为了描述简便起见,此处暂时不考虑这种情况。
[0074]
图6(b)示出了将原始三维数组x的dim1和dim2合并后得到的二维数组x1。此时,合并后的数组x1包括两个维度(dim0,dim1*dim2),其维度信息为x12=(2,2*3)=(2,6)。按照低维度优先的方式进行一维展开,x1在存储器上的存储顺序如图6(e)所示。x1各维度的访问步长信息可以表示为s
x1
=(6,1)。
[0075]
图6(c)示出了将原始三维数组x的dim0和dim1合并后得到的二维数组x2。此时,合并后的数组x2包括两个维度(dim0*dim1,dim2),其维度信息为x22=(2*2,3)=(4,3)。按照低维度优先的方式进行一维展开,x2在存储器上的存储顺序如图6(f)所示。x2各维度的访问步长信息可以表示为s
x2
=(3,1)。
[0076]
从图6中可以看出,维度合并不影响多维数组在存储器上的存储顺序。例如,对于数组x、x1和x2,三者在存储器上的存储顺序是相同的(参见图6(d)、图6(e)和图6(f)),区别仅在于维度信息和步长信息。基于维度信息和步长信息,可以访问多维数组中相应的数据。
[0077]
虽然上面结合图6描述了维度合并,上面的原理可以类似地应用于维度拆分和维度重组。
[0078]
针对维度拆分,不妨假设初始数组为二维数组x1,如图6(b)所示,其包括行方向(低维度)的维度dim1*dim2,以及列方向的维度dim0。将二维数组x1行方向的维度拆分成两个子维度dim1和dim2,则可以得到三维数组x,其包括三个维度(dim0,dim1,dim2),如图6(a)所示。
[0079]
类似地,假设初始数组为二维数组x2,如图6(c)所示,其包括行方向(低维度)的维度dim2,以及列方向的维度dim0*dim1。将二维数组x2行方向的维度拆分成两个子维度dim0和dim1,则可以得到三维数组x,其包括三个维度(dim0,dim1,dim2),如图6(a)所示。
[0080]
从上述过程可以看出,维度拆分也不影响多维数组在存储器上的存储顺序,只影响维度信息和步长信息。
[0081]
针对维度重组,不妨假设初始数组为二维数组x1,如图6(b)所示,其包括行方向(低维度)的维度dim1*dim2,以及列方向的维度dim0。在此示例中,列方向的维度尺寸(例如2)比较小,而行方向的维度尺寸(例如6)较大,因此希望通过维度重组来调整各维度尺寸。此时,可以先将二维数组x1行方向的维度拆分成两个子维度dim1和dim2,则可以得到三维数组x,其包括三个维度(dim0,dim1,dim2),如图6(a)所示。接着,将三维数组x的dim0和dim1进行维度合并,从而得到维度重组后的二维数组x2,如图6(c)所示。此时,合并后的数组x2包括两个维度(dim0*dim1,dim2),其维度信息为x22=(2*2,3)=(4,3)。
[0082]
从上述过程可以看出,维度重组包括维度拆分和维度合并,因而也不影响多维数组在存储器上的存储顺序,只影响维度信息和步长信息。
[0083]
图7示例性示出了可以实施本披露实施例的数据处理装置的示意性结构图。如图7所示,数据处理装置700包括处理单元710以及第一存储单元720。
[0084]
处理单元710负责处理数据处理装置700上的各种功能,包括但不限于控制(例如,控制单元711)、解码(例如,解码单元712)、运算(例如,运算单元713)等。处理单元710例如可以包括图1中的控制模块10和/或运算模块20。在一些实施例中,处理单元710可以配置用于对多维数据块执行转置指令。
[0085]
第一存储单元720可以用于存储或搬运相关数据,其例如可以是图1所示的各种ram,或称片上缓存。在一些实施例中,第一存储单元720可以配置用于在处理单元710执行转置指令期间缓存数据。
[0086]
附加地,数据处理装置700还可以包括第二存储单元730,其同样可以用于存储或搬运相关数据,其例如可以是内存,例如图1所示的dram,或者是多核处理器中的共享存储单元。通常第二存储单元的存储空间会比第一存储单元的存储空间大得多,因此对于大块的数据,需要分成小块,逐块搬运到第一存储单元上进行处理。
[0087]
第一存储单元720和第二存储单元730之间可以通过dma(例如图1的dma 33)来负责处理二者之间的数据搬运。
[0088]
在一些实施例中,解码单元712可以配置用于将针对多维数组的转置运算指令解码成一个或多个转置指令。例如,解码单元712可以参考前面表1和表2的目标转换维度与对应的硬件转置指令之间的关系,将指示了目标转换维度的转置运算指令解码成一个或多个硬件转置指令。对于更高维度(例如,四维)的转置运算指令,解码单元712可以根据需要,将这种转置运算指令解码成搬运指令与硬件转置指令的组合。例如,可以根据需要将四维的转置运算指令解码成第一搬运指令、硬件转置指令以及第二搬运指令。第一搬运指令可以涉及从第二存储单元730到第一存储单元720的数据搬运,其可以指示搬运时的第一搬运规则。第二搬运指令可以涉及从第一存储单元720到第二存储单元730的数据搬运,其可以指示搬运时的第二搬运规则。硬件转置指令则涉及在第一存储单元720上对数据执行的转置操作。
[0089]
以前面结合图5描述的四维数组转置示例为例,针对四维数组x4=(dim0,dim1,dim2,dim3)的转置运算指令指示了维度转换规则perm4=(3,2,1,0)。经过解码单元的解码,该转置运算指令可以分解成第一搬运指令、硬件转置指令和第二搬运指令。第一搬运指
令的第一搬运规则可以是将维度摆放为(dim2,dim0,dim1,dim3),也即dim2在最高维,连续搬运dim0、dim1和dim3,第一搬运规则可以类似地用维度转换规则来表示,例如此处可以表示为perm4=(2,0,1,3)。硬件转置指令可以是trans(dim0,dim3),也即将维度重新摆放成(dim2,dim3,dim1,dim0)。第二搬运指令的第二搬运规则可以是将维度摆放为(dim3,dim2,dim1,dim0),也即在搬运过程中交换dim2和dim3,类似地,此处第二搬运规则可以用维度转换规则表示为perm4=(3,2,1,0)。由此,可以实现对四维数组的上述转置运算指令。
[0090]
下面将结合方法流程图来详细描述由图7的数据处理装置700实施的数据处理过程。
[0091]
图8示出了根据本披露实施例的数据处理方法的示例性流程图。数据处理方法800例如涉及在图7的第一存储单元720上的硬件转置指令执行过程。
[0092]
如图8所示,数据处理方法800包括步骤s810,确定转置指令所针对的第一多维数据块的两个维度及相应的维度大小。该步骤例如可以由图7的处理单元710来执行。
[0093]
如前面所提到的,要处理的多维数据块可能比较大并且超过第一存储单元(例如缓存)的最大可用空间,此时需要将大的多维数据块拆分成若干小的多维数据块,分多次逐块搬运到缓存上进行转置操作。因此,此处的第一多维数据块表示将在第一存储单元中一次处理的数据块,其大小不超过第一存储单元的最大可用空间。就此而言,第一多维数据块可以是大的多维数据块中拆分出的小的多维数据块,其维度大小可能存在各种情形。当然,第一多维数据块也可以本身就是尺寸较小的多维数据块。
[0094]
不防假设第一多维数据块为x,其维度信息为x
n
=(x1,x2,

,x
i


,x
n
),其中x
i
(i∈1,2,

,n)表示其中某一个维度的大小,n为总维度数。转置运算指令指定了需要执行的维度转换规则为perm
n
=(p1,p2,

,p
i


,p
n
),表示输入的第p
i
维在输出的第i维。
[0095]
上述转置运算指令例如可以由图7的解码单元712参考前面的表1和表2的对应关系进行解码,例如解码成搬运指令和转置指令的组合(参考前面对图7的解码单元712的描述)。在当前实施例中,仅考虑转置指令。此时,解码出的转置指令例如可以表示为集合{trans
k
(x
i
,x
j
)|k∈{1,2,

}},其中k表示第k个转置指令,i、j分别表示执行转置的两个维度。从前面的表1和表2可以看出,在执行维度转换时,待交换的维度可以是多维数组的原始维度,也可以是多维数组的两个或更多个维度合并而成的维度。在本披露实施例中,转置指令所针对的维度不限于原始维度或合并后的维度。为了简便起见,上述转置指令中的x
i
,x
j
暂且对此不作区分。
[0096]
接着,在步骤s820,当两个维度中仅一个维度大小低于第一阈值时,对第一多维数据块执行多次维度重组和转置操作以得到第二多维数据块。所执行的维度重组使得参与第一次转置操作的两个维度的维度大小均超过第一阈值。上述多次维度重组和转置操作可以在图7的处理单元710控制下,通过在第一存储单元720上对该第一多维数据块执行多次读取和写入操作来实现。
[0097]
由于转置指令所针对的第一多维数据块可能是从大的多维数据块中拆分出的小的多维数据块,因此,其维度大小存在各种可能。本披露实施例主要针对待交换的两个维度中一个维度很小,而另一个维度很大的情况,提高这种特殊维度的数组的转置处理效率。
[0098]
在本披露实施例中,通过第一阈值th来筛选合适的第一多维数据块。第一阈值可以基于多种因素确定。在一些实施例中,第一阈值可以至少部分基于指令对齐要求而确定。
例如,一般指令需要片上存储器的两个缓存行对齐。假设一个缓存行为64b,则两行128b。对于float32数据类型,需要对齐到128/4=32个数,对于float16数据类型,需要对齐到128/2=64个数。因此,第一阈值可以设置为指令对齐要求的一半。例如,指令对齐要求是64个数时,第一阈值可以设置为32。
[0099]
根据本披露的实施例,通过对将要转置的维度进行拆分和合并,可以将较大的维度进行拆分,拆分出来的子维度可以与较小的维度进行合并,从而得到维度重组的多维数组。维度重组后的多维数组的两个维度均大于第一阈值,因此可以减小为了补齐而填充的区域大小,从而可以提高基于该维度重组后的多维数组执行硬件转置指令的处理效率。通过这种多次维度重组和转置操作,可以获得针对原始多维数组的目标转置结果。
[0100]
图9示出了根据本披露实施例的维度重组和转置操作的示例性流程图。
[0101]
如图9所示,在步骤s910中,对第一多维数据块执行第一次维度重组和转置操作以获得第一转置结果。
[0102]
第一次维度重组的目的在于将两个维度中的较大维度的数据拆分出一部分组合到较小维度上,使得组合后的较小维度能够超过第一阈值,从而无需执行补齐处理,或者补齐处理中需要填充的区域变小。拆分后的较大维度仍然需要保持超过第一阈值。
[0103]
具体地,在一些实施例中,步骤s910可以包括子步骤s911,将第一多维数据块的两个维度中较大的(大于第一阈值th的)第一维度拆分成第一子维度和第二子维度。为了后面便于描述,此处将与两个维度中较小的(小于第一阈值th的)第二维度相邻的子维度规定为第二子维度。
[0104]
例如,对于转置指令trans
k
(x
i
,x
j
),不防假设x
i
>th,x
j
<th,此时x
i
为较大的第一维度,x
j
为较小的第二维度。将较大的第一维度x
i
拆分成第一子维度x
i1
和第二子维度x
i2
,拆分后确保x
i1
≥th,x
i2
*x
j
≥th。拆分后的维度信息可以表示为(x
i1
*x
i2
,x
j
)。
[0105]
以具体数值为例,假设x
i
=1024>th,x
j
=3<th,th=32。
[0106]
在一个示例中,可以进行如下拆分:x
i
=1024=64*16,此时x
i1
=64>th,x
i2
*x
j
=16*3=48>th,满足预定条件。
[0107]
在另一个示例中,可以进行如下拆分:x
i
=1024=32*32,此时x
i1
=32=th,x
i2
*x
j
=32*3=96>th,也满足预定条件。
[0108]
在上述拆分中,可以选择使得后续针对重组后的数组的对齐操作的填充区域尽可能小或没有的拆分方式。例如,在上面的第一个示例中,为了对齐到指令对齐要求(64),只需对齐一个维度,也即将x
i2
*x
j
这一维度从48对齐到64,填充区域的大小为16*64=1024。相比之下,在上面的第二个示例中,两个维度都需要对齐,也即将x
i1
从32对齐到64,同时将x
i2
*x
j
从96对齐到2*64=128,此时填充区域的大小为32*96+32*64=5120。通过对比,优选采用第一个示例。
[0109]
在一些实现中,第一维度可能是由两个或更多个维度合并而成的维度,在这些实现中,可以基于合成第一维度的这两个或更多个维度,对第一维度进行拆分。例如,如果第一维度x
i
本身就是由两个维度x
i1
和x
i2
构成的,则可以直接拆分为这两个维度x
i1
和x
i2
,只要其仍然满足上面的要求,也即x
i1
≥th,x
i2
*x
j
≥th。
[0110]
接着,在子步骤s912中,将第二子维度与第二维度合并成第一组合维度。
[0111]
仍然以上面的示例为例,此时拆分后的维度信息(x
i1
*x
i2
,x
j
)可以重新表示为
(x
i1
,x
i2
*x
j
)。在此步骤中需注意,相邻的维度才可以进行合并,从而不影响数据在存储单元上的存储顺序。
[0112]
最后,在子步骤s913中,对由第一子维度和第一组合维度构成的第一重组数据块(x
i1
,x
i2
*x
j
)执行转置操作tans(x
i1
,x
i2
*x
j
)以获得第一转置结果(x
i2
*x
j
,x
i1
)。
[0113]
如前面所提到的,在缓存上执行硬件转置指令时,会有指令对齐的要求。因此在本披露实施例执行第一次转置操作之前,可以根据需要进行对齐操作,例如适当地填充0以对齐到指令对齐要求。由于在后续处理中会有相应的去对齐操作来去除所填充的部分(例如,0),因此为了便于描述和易于理解,在上述以及后续的维度表示中未体现出对齐操作对维度大小的改变。
[0114]
基于前面结合图6的描述,本领域技术人员可以理解,维度的拆分和合并(例如,子步骤s911和s912)不影响数据在存储单元上的存储顺序,因此也不涉及对第一存储单元上的第一多维数据块的硬件操作,只需要调整对应的维度信息和步长信息。因此,步骤s910的主要处理时间花费在子步骤s913的转置操作上。
[0115]
接着,在步骤s920中,对第一转置结果执行第二次维度重组和转置操作以获得第二转置结果。
[0116]
由于通过第一次维度重组已经将待转置的特殊规模的多维数组调整为合适的大小,因此,后续的维度重组和转置操作旨在于通过尽量少的步骤来得到最终期望的转置结果。
[0117]
具体地,在一些实施例中,步骤s920可以包括子步骤s921,将第一转置结果中的第一组合维度拆分成第二子维度和第二维度,其中第二维度与第一转置结果中的第一子维度相邻。
[0118]
继续上面的示例,第一转置结果(x
i2
*x
j
,x
i1
)中的第一组合维度x
i2
*x
j
可以直接拆分成第二子维度x
i2
和第二维度x
j

[0119]
接着,在子步骤s922中,将第二维度x
j
与第一子维度x
i1
合并成第二组合维度x
j
*x
i1
。此时,数据块的维度信息可以表示为(x
i2
,x
j
*x
i1
)。在此维度合并步骤中同样需注意,相邻的维度才可以进行合并,从而不影响数据在存储单元上的存储顺序。
[0120]
最后,在子步骤s923中,对由第二子维度和第二组合维度构成的第二重组数据块(x
i2
,x
j
*x
i1
)执行转置操作tans(x
i2
,x
j
*x
i1
)以获得第二转置结果(x
j
*x
i1
,x
i2
)。
[0121]
与前面类似地,维度的拆分和合并(例如,子步骤s921和s922)不影响数据在存储单元上的存储顺序,因此也不涉及对第一存储单元上的多维数据块的硬件操作,只需要调整对应的维度信息和步长信息。因此,步骤s920的主要处理时间花费在子步骤s923的转置操作上。
[0122]
最后,在步骤s930中,对第二转置结果执行第三次维度重组操作以获得第二多维数据块。该第二多维数据块即可以作为原始的第一多维数据块的目标转置结果。
[0123]
此时,需要的转置操作已经完成,只需要对转置结果进行维度重组即可获得目标转置结果。
[0124]
具体地,在一些实施例中,步骤s930可以包括子步骤s931,将第二转置结果(x
j
*x
i1
,x
i2
)中的第二组合维度x
j
*x
i1
拆分成第二维度x
j
和第一子维度x
i1
,其中第一子维度x
i1
与第二转置结果中的第二子维度x
i2
相邻。
[0125]
接着,在子步骤s932中,将第一子维度x
i1
与第二子维度x
i2
合并成第一维度x
i1
*x
i2
=x
i
,以获得由第二维度x
j
和第一维度x
i
构成的第二多维数据块(x
j
,x
i
)。从维度信息表示可以看出,第二多维数据块(x
j
,x
i
)是第一多维数据块(x
i
,x
j
)的转置结果。
[0126]
在一些实施例中,如果在第一次转置操作之前有对齐操作,则相应地在对第二转置结果执行第三次维度重组之后,对第三次维度重组后的第三重组数据块的各个维度执行去对齐处理,以获得第二多维数据块。
[0127]
步骤s930仅涉及维度的拆分和合并(例如,子步骤s931和s932),不影响数据在存储单元上的存储顺序,因此也不涉及对第一存储单元上的多维数据块的硬件操作,只需要调整对应的维度信息和步长信息。因此,步骤s930的处理时间可以忽略不计。
[0128]
从图9的描述可以看出,通过将一次低效的转置操作(原来的tans(x
i
,x
j
))替换为两次高效的转置操作(第一次转置操作tans(x
i1
,x
i2
*x
j
)和第二次转置操作tans(x
i2
,x
j
*x
i1
)),可以有效地提高这种特定规模的多维数组的转置处理效率。
[0129]
为了清楚起见,图10a示出了根据本披露实施例的多次维度重组和转置操作的简化示意图。图10a的示例对应于前面结合图9描述的示例。
[0130]
如图10a所示,框1010为初始待转置的数组的两个维度(x
i
,x
j
),在此示例中,x
i
>th>x
j
。接着进行第一次拆分,框1011示出拆分后的维度(x
i1
*x
i2
,x
j
)。然后,将拆分后的数组维度重组成(x
i1
,x
i2
*x
j
),并对该维度重组后的数据执行第一次转置trans(x
i1
,x
i2
*x
j
),如框1012所示。第一次转置后的结果为(x
i2
*x
j
,x
i1
),如框1013所示。再接着,进行第二次拆分和合并,维度重组为(x
i2
,x
j
*x
i1
),如框1014所示。基于第二次重组后的数据执行第二次转置trans(x
i2
,x
j
*x
i1
),如框1015所示。第二次转置后的结果为(x
j
*x
i1
,x
i2
),如框1016所示。最后,对第二次转置结果进行维度重组,得到最终结果(x
j
,x
i1
*x
i2
)=(x
j
,x
i
),如框1017所示。
[0131]
图10b示出了根据本披露实施例的多次维度重组和转置操作的又一简化示意图。
[0132]
如图10b所示,框1020为初始待转置的数组的两个维度(x
i
,x
j
),在此示例中,x
i
<th<x
j
,因此需要拆分维度x
j
,与图10a所拆分的维度不同。框1021示出第一次拆分后的维度(x
i
,x
j1
*x
j2
)。然后,将拆分后的数组维度重组成(x
i
*x
j1
,x
j2
),并对该维度重组后的数据执行第一次转置trans(x
i
*x
j1
,x
j2
),如框1022所示。第一次转置后的结果为(x
j2
,x
i
*x
j1
),如框1023所示。再接着,进行第二次拆分和合并,维度重组为(x
j2
*x
i
,x
j1
),如框1024所示。基于第二次重组后的数据执行第二次转置trans(x
j2
*x
i
,x
j1
),如框1025所示。第二次转置后的结果为(x
j1
,x
j2
*x
i
),如框1026所示。最后,对第二次转置结果进行维度重组,得到最终结果(x
j1
*x
j2
,x
i
)=(x
j
,x
i
),如框1027所示。
[0133]
从图10a和图10b可以看出,无论待转置的两个维度中哪个维度更大,都可以应用本披露实施例提供的转置方法来实施转置操作。本披露实施例的方法通过拆解较大的维度,并与较小的维度进行重组,规避了直接用小维度与大维度做转置运算的过程。最终,通过用两次高效的转置指令来代替一次低效的转置指令,从而获得总体性能的提升。
[0134]
本披露还提供了一种芯片,其可以包括前面结合附图描述的任一实施例的数据处理装置。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
[0135]
图11是示出根据本披露实施例的一种组合处理装置1100的结构图。如图11中所示,该组合处理装置1100包括计算处理装置1102、接口装置1104、其他处理装置1106和存储装置1108。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置1110,该计
算装置可以配置成本披露实施例的数据处理装置,以执行本文结合附图所描述的操作。
[0136]
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
[0137]
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0138]
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0139]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
[0140]
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0141]
在一些实施例里,本披露还公开了一种芯片(例如图12中示出的芯片1202)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图11中所示的组合处理装置。该芯片可以通过对外接口装置(如图12中示出的对外接口装置1206)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图12对该板卡进行详细地描述。
[0142]
图12是示出根据本披露实施例的一种板卡1200的结构示意图。如图12中所示,该板卡包括用于存储数据的存储器件1204,其包括一个或多个存储单元1210。该存储器件可以通过例如总线等方式与控制器件1208和上文所述的芯片1202进行连接和数据传输。进一步,该板卡还包括对外接口装置1206,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1212(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0143]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0144]
根据上述结合图11和图12的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0145]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0146]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0147]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设
备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0148]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0149]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0150]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如cpu、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0151]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1