CN117851742B - 数据存储方法、数据处理方法、数据存储器、数据处理器 - Google Patents
数据存储方法、数据处理方法、数据存储器、数据处理器 Download PDFInfo
- Publication number
- CN117851742B CN117851742B CN202410251377.8A CN202410251377A CN117851742B CN 117851742 B CN117851742 B CN 117851742B CN 202410251377 A CN202410251377 A CN 202410251377A CN 117851742 B CN117851742 B CN 117851742B
- Authority
- CN
- China
- Prior art keywords
- data
- sub
- tensor
- block
- storage
- 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.)
- Active
Links
- 238000013500 data storage Methods 0.000 title claims abstract description 87
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000003672 processing method Methods 0.000 title claims abstract description 24
- 230000004044 response Effects 0.000 claims description 36
- 230000006870 function Effects 0.000 claims description 12
- 229910052698 phosphorus Inorganic materials 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 abstract description 22
- 238000010586 diagram Methods 0.000 description 28
- 238000004590 computer program Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 229910052757 nitrogen Inorganic materials 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000007480 spreading Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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
- 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
一种数据存储方法、数据处理方法、数据存储器、数据处理器。该数据存储方法包括:针对每个张量子数据,将张量子数据划分成至少一个数据块,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数;以数据块为单位,将至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。该数据存储方法提供了一种新的存储方式,该存储方式以数据块为单位实现对张量子数据的存储,每个数据块对应一个存储地址,从而可以使用一个存储地址提取整个数据块的数据,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,提升了计算单元的利用率。
Description
技术领域
本公开的实施例涉及一种数据存储方法、数据处理方法、数据存储器、数据处理器和非瞬时性计算机可读存储介质。
背景技术
张量(Tensor)是一个定义在一些向量空间和一些对偶空间的笛卡尔积上的多重线性映射,例如,标量可以看作0维张量,向量可以看作一维张量,矩阵可以看作二维张量。张量操作在并行处理器等处理器中广泛使用。
随着人工智能及机器学习的发展,对以并行处理器(例如,多核处理器、数字信号处理器等)为代表的众多并行处理器设备提出了新的要求。在通用计算中,并行处理器的计算单元需要大量的数据,而这些数据一般是存储并行处理器的存储部件中,例如存储部件可以是内存,通过数据加载指令可以将这些数据从存储部件提取至计算单元中进行计算。
发明内容
本公开至少一实施例提供一种数据处理方法,用于存储张量数据,其中,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,所述数据存储方法包括:针对每个张量子数据,将所述张量子数据划分成至少一个数据块,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数;以数据块为单位,将所述至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
例如,在本公开至少一实施例所述的数据存储方法中,将所述张量子数据划分成至少一个数据块,包括:根据所述张量子数据的数据类型,将所述张量子数据划分成至少一个数据块,其中,数据类型不同的张量子数据划分得到的数据块的尺寸不同,数据总量相同。
例如,在本公开至少一实施例所述的数据存储方法中,根据所述张量子数据的数据类型,将所述张量子数据划分成至少一个数据块,包括:根据所述数据类型,确定所述数据类型对应的数据块模板,其中,所述数据块模板指示对所述数据类型的张量子数据划分得到的数据块的形状尺寸;按照所述数据块模板对所述张量子数据进行划分,以得到所述至少一个数据块,其中,所述至少一个数据块的并集为所述张量子数据,所述至少一个数据块在划分时互不重叠。
例如,在本公开至少一实施例所述的数据存储方法中,所述数据类型包括所述张量子数据中元素的数据位宽以及所述张量子数据的类别,所述类别包括卷积核类型,响应于所述数据类型指示所述张量子数据的类别为卷积核类型以及所述张量子数据中元素的数据位宽为8比特,所述数据块模板指示m=2×a,n=1,c=2×b;响应于所述数据类型指示所述张量子数据的类别为卷积核类型以及所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示m=a,n=1,c=2×b;响应于所述数据类型指示所述张量子数据的类别为卷积核类型以及所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示m=a,n=1,c=b;其中,a和b为正整数。
例如,在本公开至少一实施例所述的数据存储方法中,所述数据类型包括所述张量子数据中元素的数据位宽以及所述张量子数据的类别,所述类别包括输入数据,响应于所述数据类型指示所述张量子数据的类别为输入数据类型以及所述张量子数据中元素的数据位宽为8比特,所述数据块模板指示m=d,n=k,c=4×g;响应于所述数据类型指示所述张量子数据的类别为输入数据类型以及所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示m=d,n=k,c=2×g;响应于所述数据类型指示所述张量子数据的类别为输入数据类型以及所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示m=d,n=k,c=g;其中,d、k和g为正整数。
例如,在本公开至少一实施例所述的数据存储方法中,以数据块为单位,将所述至少一个数据块存入数据存储器中,包括:以数据块为单位,将所述至少一个数据块按第一存储顺序依次存入所述数据存储器中;以及针对每个数据块:确定所述数据块对应的存储地址;将所述数据块中的元素按第二存储顺序依次存入所述存储地址对应的存储空间中。
例如,在本公开至少一实施例所述的数据存储方法中,所述第二存储顺序由根据所述张量子数据的数据类型确定的数据块模板指示。
例如,在本公开至少一实施例所述的数据存储方法中,所述数据块模板指示所述数据块包括多个数据子块,所述多个数据子块通过对所述数据块在深度方向上进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素,所述第二存储顺序指示将所述多个数据子块按照深度方向依次存入所述数据存储器,每个数据子块中的多个数据单元按照行优先顺序依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示所述数据块包括c个数据子块,每个数据子块的尺寸为m×n×1,每个数据子块包括m×n个数据单元,每个数据单元包括1个元素,每个数据子块中的多个数据单元按照行优先顺序依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:将每个数据子块中的元素按照行优先顺序或列优先顺序依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示所述数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:将每个数据单元中的c/u个元素按照深度方向依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为8比特以及所述张量子数据的类别为输入数据类型,所述数据块模板指示所述数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:将每个数据单元中的c/u个元素按照深度方向依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为8比特以及所述张量子数据的类别为卷积核类型,所述数据块模板指示所述数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括(m/v)×n个数据单元,每个数据单元的尺寸为v×1×(c/u),u和v为正整数,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:将每个数据单元中的v×(c/u)个元素先按行方向、再按深度方向依次存入所述数据存储器,或者,将每个数据单元中的v×(c/u)个元素先按深度方向、再按行方向依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,所述第一存储顺序指示将所述至少一个数据块先沿行方向,再沿列方向,最后沿深度方向依次存入所述数据存储器。
例如,在本公开至少一实施例所述的数据存储方法中,按所述第一存储顺序存入所述数据存储器的所述至少一个数据块的存储地址连续。
例如,在本公开至少一实施例所述的数据存储方法中,在将所述张量子数据划分成至少一个数据块之前,所述数据存储方法还包括:响应于W与m不是整数倍关系:在所述张量子数据的边界外围填充多个数值为第一值的元素,以将所述张量子数据在行方向上的尺寸增加至W’,其中,;响应于H与n不是整数倍关系:在所述张量子数据的边界外围填充多个数值为第一值的元素,以将所述张量子数据在列方向上的尺寸增加至H’,其中,;响应于C与c不是整数倍关系:在所述张量子数据的边界外围填充多个数值为第一值的元素,以将所述张量子数据在深度方向上的尺寸增加至C’,其中,/>,其中,表示向上取整函数,W’、H’和C’为正整数。
本公开至少一实施例提供一种数据处理方法,包括:接收数据加载指令,其中,所述数据加载指令包括待加载的张量数据的存储地址,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,解析所述数据加载指令之后执行所述数据加载指令,其中,执行所述数据加载指令,包括:确定所述张量数据对应的各个数据块的存储地址,其中,每个数据块的尺寸为m×n×c,所述各个数据块通过对所述张量数据进行划分得到,属于同一个数据块中的元素在数据存储器中对应同一个存储地址,m、n和c为正整数;以数据块为单位,利用各个数据块的存储地址从所述数据存储器中提取数据,以得到所述张量数据,其中,同一个数据块中的元素在所述数据存储器中连续存储。
本公开至少一实施例提供一种数据存储器,用于存储张量数据,其中,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,所述数据存储器配置为以数据块为单位存储所述张量数据,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
例如,在本公开至少一实施例提供的数据存储器中,每个数据块的数据总量相同,且由所述数据存储器中单个存储地址对应的存储单元的存储容量决定。
本公开至少一实施例提供一种数据处理器,包括如本公开至少一实施例所述的数据存储器。
本公开至少一实施例提供一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如本公开至少一实施例所述的数据存储方法或如本公开至少一实施例所述的数据处理方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为一种通用图形处理器(GPGPU)的一种结构示意图;
图2A为一种进行卷积计算的输入数据的示意图;
图2B为一种进行卷积计算的卷积核的示意图;
图3为本公开至少一实施例提供的数据存储方法的示意性流程图;
图4A为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图;
图4B为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图;
图5A为本公开至少一实施例提供的张量子数据与数据块的关系示意图;
图5B为本公开至少一实施例提供的第一存储顺序的示意图;
图6A和图6B为本公开至少一实施例提供的数据块模板的示意图;
图7为本公开至少一实施例提供的数据处理方法的示意性流程图;
图8为本公开至少一实施例提供的数据处理方法的示意性流程图;
图9为本公开至少一实施例提供的数据处理器的示意性框图;
图10为本公开至少一实施例提供的一种非瞬时性计算机可读存储介质的示意图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
图1为一种通用图形处理器(GPGPU)的一种结构示意图。
在并行计算中,计算任务一般通过多个线程(thread)执行。如图1所示,这些线程在通用图形处理器(或称为并行计算处理器)中执行前,线程块调度模块中被划分成多个线程块(thread block),然后经由线程块分发模块,将多个线程块分发到各个计算单元(Compute Unit,简称CU)。一个线程块中的所有线程必须要分配到同一个计算单元上执行。同时,线程块会被拆分成最小执行线程束(或简称线程束,thread warp),每个线程束包含了固定数量(或小于这个固定数量)的线程,例如,32个线程。多个线程块可以在同一个计算单元中执行,或者在不同计算单元中执行。
在每个计算单元中,线程束调度/分发模块对线程束进行调度、分配,以便该计算单元的多个计算核心运行线程束。每个计算核心包括算数逻辑单元(ALU)、浮点计算单元等。根据计算单元中计算核心的个数,一个线程块中的多个线程束可以同时执行或分时执行。每个线程束中的多个线程会执行相同的指令。指令的读取、译码、发射都在线程束调度/分发模块中完成。内存执行指令会被发射到计算单元中的共享缓存(例如共享L1缓存)或进一步发射到统一缓存中以进行读写操作等。
如图1所示,通用计算操作,例如关于矩阵的计算操作通常需要大量的数据,这些数据通常存储在存储器中,例如可以存储在HBM( High Bandwidth Memory,高带宽内存)中,在进行通用计算操作时需要从存储器中加载数据(Load操作)。数据在存储器中的存储方式会影响内存访问带宽,进而影响计算单元的硬件利用率。
需要进行卷积运算的数据包括卷积核(kernal)和输入数据(activation)两种,例如,输入数据可以是需要进行卷积运算的输入图片等。
例如,对于卷积核,可以表示为Kh×Kw×IC×OC,其中,Kh表示卷积核的高度,Kw表示卷积核的宽度,IC表示输入通道数,OC表示输出通道数。
例如,对于输入数据,可以表示为[N,H,W,C],N表示batch size(批尺寸),即一次训练所抓取的数据样本数量,H表示输入数据的高度,W表示输入数据的宽度,C表示通道数。
矩阵计算可以包括通用卷积乘法。例如,在人工智能等领域中经常使用的神经网络处理中(例如,卷积神经网络)经常需要执行卷积乘法计算,例如多通道卷积或三维卷积。
例如,对于多通道卷积,不同通道上的卷积核的参数是不相同的,本质上对于多通道卷积,仍然是按照二维卷积的计算过程进行计算。例如,对于一个3通道的输入图像,卷积核也是3个通道的卷积核,3通道的卷积核与3通道的输入图像在每个通道上一一对应,最终经过卷积乘法计算得到1个输出特征图。具体的,在每个通道都按照二维卷积进行单通道的滑窗操作得到三个中间输出结果,将三个中间输出结果对应位置元素相加得到最终的输出特征图。
例如,对于三维卷积,与二维卷积所不同的是三维卷积可以在所有方向(图像的高度、宽度和通道)上移动,在每个位置,逐元素的乘法和加法都会提供一个数值,因为卷积核(过滤器)滑过一个三维空间,所以输出数据也是按三维空间排布,最终输出一个三维特征图。
图2A为一种进行卷积计算的输入数据的示意图。
在图2A的示例中,输入数据示出了一个batch,但实际进行卷积运算的输入数据可能有N个batch,每个batch的结构与图2A所示的相同,N为正整数。
如图2A所示,一个batch包括21×6×8个元素,图2A中位于一个batch中的1个小立方体代表1个元素,例如1个元素可以为8比特、16比特等数据位宽。
例如,以HBM为例,在存储器中1个存储单元可以存储512B(Byte,字节)的数据,例如一个存储地址指示的存储单元中可以存储512B的数据。一笔数据加载指令(用于load操作)需要从存储器中加载512B的数据,例如该512B数据由图2A中加粗虚线框所示的宽度为4、高度为4、通道数为8,每个元素的数据位宽为32比特。
例如,在图2A中,假设箭头所指的元素为原点,C、W和H分别表示三个坐标轴,row为高度H方向(也是列方向)的坐标值,col为宽度W方向(也是行方向)的坐标值,c为通道C方向(也是深度方向)的坐标值,箭头所指元素在输入数据中的坐标为:c=0,row=0且col=0。其它元素的坐标中的通道、宽度和高度值沿箭头方向递增。
目前,进行卷积计算的输入数据数据通常采用NCWH或NHWC的方式存储在存储器中。
例如,对于NCWH,从第一个通道(c=0)开始,该通道中的元素以行优先(row-major)顺序连续排列,然后继续第二个通道(c=1)和后续通道,直到所有通道的元素都布置好,如果 N>1,继续下一个batch。
例如,对于NHWC,从第一个通道(c=0)的第一个元素开始,然后存储第二个通道(c=1)的第一个元素,以此类推,直到所有通道的第一个元素都布局完,之后,选择第一个通道(c=0)的第二个元素,然后存储第二个通道(c=1)的第二个元素,以此类推,直到所有通道的第二个元素布局完毕,以此类推。
若图2A所示的输入数据以NCWH方式存储在存储器中,位于同一行且属于同一通道的元素在存储器中具有同一个地址,例如c=0且row=0的4个元素对应存储器中的地址0,c=0且row=1的4个元素对应存储器中的地址1,c=0且row=2的4个元素对应存储器中的地址2,c=0且row=3的4个元素对应存储器中的地址3,c=1且row=0的4个元素对应存储器中的地址4,以此类推。因此,提取图2A所示的4行、4列、8通道元素时需要将加载512B的数据Load指令分解成32个请求(request)才可将数据全部提取出来。具体地,提取数据时计算地址0、地址1、地址2、地址3等地址,32个地址用32个请求发送至存储器,每个请求用于提取4个元素,返回的数据也会分成32笔,每笔数据包括4个元素共16B。
图2B为一种进行卷积计算的卷积核的示意图。
在图2B的示例中,卷积核示出对应一张输出图片的卷积核,但实际进行卷积运算的输出图片可能有多个,对应每个输出图片的卷积核的结构与图2B所示的相似,这里不再赘述。
如图2B所示,一个卷积核包括21×6×8个元素,每个元素是一个权重值,图2B中每个小立方体代表1个元素,例如1个元素可以为8比特、16比特等数据位宽。
例如,以HBM为例,一笔数据加载指令(用于load操作)需要从存储器中加载512B的数据,例如该512B数据由图2B中加粗虚线矩形框所示的4行、4列、8通道元素组成,每个元素的数据位宽为32比特。
例如,在图2B中,假设箭头所指的元素为原点,ich、och和filter x×filter y分别表示三个坐标轴,row为filter x×filter y方向(也即列方向)的坐标值,col为输入通道ich方向(也即行方向)的坐标值,c为输出通道och方向(也即深度方向)的坐标值,箭头所指元素在卷积核中的坐标为:c=0,row=0且col=0。其它元素的坐标中的c、row和col沿箭头方向递增。
在本公开中,filter x表示卷积核的行方向,filter y表示卷积核的列方向,filter x×filter y表示将2个方向展开成一维作为卷积核的列方向,具体的展开成一维是指将卷积核中的参数先按行方向、再按列方向的顺序排列成一维。
目前,进行卷积计算的卷积核通常采用Kh×Kw×IC×OC或者Kh×Kw×OC×IC的方式存储在存储器中。Kh×Kw×IC×OC方式与前述的NCWH类似,Kh×Kw×OC×IC方式与前述的NHWC类似,这里不再赘述。
若图2B所示的卷积核以Kh×Kw×IC×OC方式存储在存储器中,位于同一行且属于同一通道的元素在存储器中具有同一个地址,例如c=0且row=0的4个元素对应存储器中的地址0,c=0且row=1的4个元素对应存储器中的地址1,以此类推。因此,提取图2B所示的4行、4列、8通道元素时需要将加载512B的数据Load指令分解成32个请求(request)才可将数据全部提取出来。具体地,提取数据时计算地址0、地址1、地址2、地址3等地址,32个地址用32个请求发送至存储器,每个请求用于提取4个元素,返回的数据也会分成32笔,每笔数据包括4个元素共16B。
由于卷积计算本身的数据特性,其总是由多行多列元素组成,因此,目前的数据存储方式在进行卷积计算时,加载数据总是需要计算、发送多个请求才可完成,且每个请求返回的数据量也较小,极大地降低了加载数据时的数据带宽,降低了硬件计算效率。
本公开至少一实施例提供一种数据存储方法、数据处理方法、数据存储器、数据处理器和非瞬时性计算机可读存储介质。
该数据存储方法包括:针对每个张量子数据,将张量子数据划分成至少一个数据块,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数;以数据块为单位,将至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。
不同于传统的NHWC、NCWH、Kh×Kw×IC×OC或者Kh×Kw×OC×IC存储方式,该数据存储方法提供了一种新的存储方式,该存储方式以数据块为单位实现对多维张量数据的存储,每个数据块对应一个存储地址,从而可以使用一个存储地址提取整个数据块的数据,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,进而提升了计算单元的利用率。
需要说明的是,在本公开至少一实施例中,参考三维坐标系,为描述方便,统一以图2A和图2B中箭头所指元素作为原点,其在卷积核中的坐标为c=0,row=0且col=0。行方向指横向(x轴,例如图2A中的W方向或图2B中的ich方向),列方向指纵向(y轴,例如图2A中的H方向或图2B中的filter x×filter y方向),深度方向指竖向(z轴,例如图2A中的C方向或图2B中的och方向)。在本公开中统一以箭头所指元素作为原点描述元素在张量子数据或数据块中的位置信息。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图3为本公开至少一实施例提供的数据存储方法的示意性流程图。
如图3所示,本公开至少一实施例提供的数据存储方法至少包括步骤S10-S20。
例如,本公开至少一实施例提供的数据存储方法用于存储张量数据。
例如,张量数据的维度为4,张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,也即行方向上有W个元素,H表示列方向尺寸,也即列方向上有H个元素,C表示深度方向尺寸,也即深度方向上有C个元素,P、W、H和C均为正整数。
例如,张量数据可以是卷积核,也可以是输入数据。例如,张量数据可以是多个三维卷积核或者是多通道卷积核,或者,张量数据可以是多批三维输入图片或者是多通道输入图片。
根据实际需要,张量数据还可以是其它类型或用途,本公开对此不作具体限制。
例如,在张量数据是卷积核时,W为图2B中ich方向(输入通道方向)的尺寸,H为图2B中filter x ×filter y方向的尺寸,C为图2B中och方向(输出通道方向)的尺寸。
例如,在张量数据是输入数据时,W为图2A中W方向(宽度方向)的尺寸,H为图2A中H方向(高度方向)的尺寸,C为图2A中C方向(通道方向)的尺寸。
在本公开至少一实施例中,为便于通用描述卷积核和输入数据的存储方式,统一将图2A中的宽度W方向以及图2B中的输入通道ich方向称为行方向,将图2A中的高度H方向以及图2B中的filter x×filter y方向称为列方向,将图2A中的通道C方向以及图2B中的输出通道och方向称为深度方向。
例如,张量数据可以表示为[P, W, H, C],如前,张量数据可以包括P个张量子数据,每个张量子数据包括多个元素且维度为3,形状尺寸为W×H×C。
例如,张量数据可以是权重(weight),例如张量数据包括卷积层的权重值,或者,张量数据也可以是输入数据(data),例如包括输入卷积层的输入数据。
在本公开至少一个实施例中,张量数据的形状尺寸可以依据需要设置,本公开对此不作具体限制。
如图3所示,在步骤S10,针对每个张量子数据,将张量子数据划分成至少一个数据块。
例如,每个数据块的尺寸为m×n×c,m、n和c为正整数。
例如,数据块在行方向上的尺寸为m,在列方向上的尺寸为n,在深度方向上的尺寸为c。
在步骤S20,以数据块为单位,将至少一个数据块存入数据存储器中。
例如,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。
例如,数据存储器可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。
例如,数据存储器可以是高带宽内存。本公开对数据存储器的形式、结构、应用环境等不作具体限制,本领域技术人员可以依据需要选择。
对于张量子数据,由于将张量子数据划分成了一个个形状尺寸为m×n×c的数据块,以数据块为单位存入数据存储器,并且,属于同一个数据块的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。不同于目前的存储方式,本公开至少一实施例提供的数据存储方法在存储张量子数据时颗粒度更大,且不需要每行都对应一个存储地址,使用一个存储地址即可提取整个数据块的数据,更适合张量数据的存储,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,进而提升了计算单元的利用率。
下面结合附图具体说明本公开至少一实施例提供的数据存储方法中步骤S10和步骤S20的过程。
例如,步骤S10可以包括:根据张量子数据的数据类型,将张量子数据划分成至少一个数据块。
例如,数据类型不同的张量子数据划分得到的数据块的尺寸不同,但数据块的数据总量相同。
例如,数据块的数据总量是由数据存储器中一个存储地址对应的存储单元的存储容量决定。以HBM为例,在HBM中一个存储地址对应的存储单元的存储容量为512B,因此,对于不同数据位宽的张量子数据,都可以以512B为单位划分成多个数据块,每个数据块的数据总量都是512B。
例如,数据类型包括元素的数据位宽,在元素的数据位宽不同时,数据块的数据总量相同情况下,不同数据位宽的张量子数据划分得到的数据块的尺寸必然不同。
例如,元素的数据格式不同,但数据位宽相同,例如,INT16和FP16,数据格式不同但位宽都是16比特,则此时不同数据格式划分得到的数据块的尺寸可以是相同的。
例如,在至少一个实施例中,根据张量子数据中元素的数据类型,将张量子数据划分成至少一个数据块,包括:根据张量子数据的数据类型,确定该数据类型对应的数据块模板,其中,张量子数据的数据块模板指示对该数据类型的张量子数据划分得到的数据块的形状尺寸;按照张量子数据的数据块模板对该张量子数据进行划分,以得到该至少一个数据块。
例如,至少一个数据块的并集为张量子数据,至少一个数据块在划分时互不重叠。
例如,可以预先设置针对不同数据类型的数据块模板,数据块模板可以包括对张量子数据划分得到的数据块的尺寸的规定,例如,数据块模块可以规定了针对某个数据位宽的张量子数据划分得到的数据块在行方向上的尺寸m、列方向上的尺寸n以及深度方向的尺寸c。
例如,数据块的尺寸可以根据数据位宽、数据存储器中一个存储地址对应的存储单元的存储容量决定。例如,可以根据单个存储单元的存储容量和数据位宽的商确定m、n和c的乘积,m、n和c的具体取值可以依据需要设定,只要其乘积为计算出的商即可。
例如,按照数据块模板划分张量子数据时,划分得到的所有数据块的并集为该张量子数据,且这些数据块在划分时互不重叠。这里,数据块互不重叠的意思是,张量子数据的每个元素仅被划分至一个数据块中,而所有数据块的并集为该张量子数据,则表示张量子数据中的每个元素都已划分至某个数据块,不存在未被划分的元素。
例如,数据类型还可以包括张量子数据的类别,类别包括卷积核类型(也即张量子数据为卷积核)或输入数据类型(也即张量子数据为输入数据)。对于卷积核类型和输入数据类型,可以依据实际需要设置不同的数据块尺寸。当然,也可以设置卷积核类型和输入数据类型具有相同的数据块尺寸,也即数据块模板可以只与数据位宽有关,本公开对此不作具体限制。
例如,在一个示例中,响应于数据类型指示张量子数据的类别为卷积核类型以及张量子数据中元素的数据位宽为8比特,数据块模板指示m=2×a,n=1,c=2×b,响应于数据类型指示张量子数据的类别为卷积核类型以及张量子数据中元素的数据位宽为16比特,数据块模板指示m=a,n=1,c=2×b;响应于数据类型指示张量子数据的类别为卷积核类型以及张量子数据中元素的数据位宽为32比特,数据块模板指示m=a,n=1,c=b;其中,a和b为正整数。
例如,根据数据存储器中单个存储单元的存储容量不同,a和b的具体取值可以不同。例如,针对卷积核,下面以数据存储器中单个存储单元的存储容量为512B为例,具体说明在一个示例中数据块的形状和尺寸。
图4A为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图。
例如,图4A为针对卷积核的数据块模板。
在图4A中,数据块模板1为数据位宽为32比特时对应的数据块模板,数据块模板2为数据位宽为16比特时对应的数据块模板,数据块模板3为数据位宽为8比特时对应的数据块模板。
图4A中每个小立方体代表一个元素,例如,数据块模板1中一个小立方体表示一个数据位宽为32比特的元素,数据块模板2中一个小立方体表示一个数据位宽为16比特的元素,数据块模板3中一个小立方体表示一个数据位宽为8比特的元素。
例如,尽管三个数据块模板对应的数据位宽不同,但数据总量都相同。例如,在图4A的示例中,每个数据块的数据总量都是512B。从图4A可以看出,不同数据块模板中的数据块的尺寸不同。
如图4A所示,对于数据块模板1,其对应数据位宽为32比特的元素,数据块模板1指示对元素的数据位宽为32比特的张量子数据进行划分得到的单个数据块在行方向上的尺寸m为32,列方向上的尺寸n为1,深度方向上的尺寸c为4。
如图4A所示,对于数据块模板2,其对应数据位宽为16比特的元素,数据块模板2指示对元素的数据位宽为16比特的张量子数据进行划分得到的单个数据块在行方向上的尺寸m为32,列方向上的尺寸n为1,深度方向上的尺寸c为8。
如图4A所示,对于数据块模板3,其对应数据位宽为8比特的元素,数据块模板3指示对元素的数据位宽为8比特的张量子数据进行划分得到的单个数据块的在行方向上的尺寸m为64,列方向上的尺寸n为1,深度方向上的尺寸c为8。
例如,在一个示例中,响应于数据类型指示张量子数据的类别为输入数据类型以及张量子数据中元素的数据位宽为8比特,数据块模板指示m=d,n=k,c=4×g;响应于数据类型指示张量子数据的类别为输入数据类型以及张量子数据中元素的数据位宽为16比特,数据块模板指示m=d,n=k,c=2×g;响应于数据类型指示张量子数据的类别为输入数据类型以及张量子数据中元素的数据位宽为32比特,数据块模板指示m=d,n=k,c=g;其中,d、k和g为正整数。
例如,d,k和g的具体取值可以根据需要设定,只要m、n和c的乘积为单个存储单元的存储容量和数据位宽的商即可。例如,针对输入数据,下面以数据存储器中单个存储单元的存储容量为512B为例,具体说明在一个示例中数据块的形状和尺寸。
图4B为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图。
图4B为针对输入数据的数据块模板。
在图4B中,数据块模板1为数据位宽为32比特对应的数据块模板,数据块模板2为数据位宽为16比特对应的数据块模板,数据块模板3为数据位宽为8比特对应的数据块模板。
图4B中每个小立方体代表一个元素,例如,数据块模板1中一个小立方体表示一个数据位宽为32比特的元素,数据块模板2中一个小立方体表示一个数据位宽为16比特的元素,数据块模板3中一个小立方体表示一个数据位宽为8比特的元素。
例如,尽管三个数据块模板对应的数据位宽不同,但数据总量都相同。例如,在图4B的示例中,每个数据块的数据总量都是512B。从图4B可以看出,不同数据块模板中的数据块的尺寸不同。
如图4B所示,对于数据块模板1,其对应数据位宽为32比特的元素,数据块模板1指示对元素的数据位宽为32比特的张量子数据进行划分得到的单个数据块在行方向上的尺寸m为8,列方向上的尺寸n为4,深度方向上的尺寸c为4。
如图4B所示,对于数据块模板2,其对应数据位宽为16比特的元素,数据块模板2指示对元素的数据位宽为16比特的张量子数据进行划分得到的单个数据块在行方向上的尺寸m为8,列方向上的尺寸n为4,深度方向上的尺寸c为8。
如图4B所示,对于数据块模板3,其对应数据位宽为8比特的元素,数据块模板3指示对元素的数据位宽为8比特的张量子数据进行划分得到的单个数据块的在行方向上的尺寸m为8,列方向上的尺寸n为4,深度方向上的尺寸c为16。
在上述实施例中,不同数据位宽对应的数据块模板尽可能在某个维度上相似,且各维度尺寸的关系更加平均,划分更加合理。
当然,需要说明的是,图4A和图4B所示为一种数据块模板的定义,本领域技术人员也可以设置数据块为其它形状尺寸,本公开对此不作具体限制。例如,卷积核在列方向上的尺寸也可以设置为大于1,输入数据在列方向上的尺寸也可以设置为1,本公开对此不作具体限制。
例如,在获得数据块模板后,可以根据数据块模板对张量子数据进行划分,例如将数据块模板指示的m×n×c作为一个数据块,将张量子数据划分成多个数据块。
例如,在一些实施例中,张量子数据的尺寸可能与数据块模板并不恰好是整数倍关系,此时需要对张量子数据进行边界填充,以将张量子数据的尺寸扩展至数据块模板的尺寸的整数倍,从而保证划分得到的数据块的并集为张量子数据,数据块在划分时互不重叠。
例如,在一些实施例中,在将张量子数据划分成至少一个数据块之前,数据存储方法还包括:响应于W与m不是整数倍关系:在张量子数据的边界外围填充多个数值为第一值的元素,以将张量子数据在行方向上的尺寸增加至W’,其中,。
例如,在一些实施例中,在将张量子数据划分成至少一个数据块之前,数据存储方法还包括:响应于H与n不是整数倍关系:在张量子数据的边界外围填充多个数值为第一值的元素,以将张量子数据在列方向上的尺寸增加至H’,其中,。
例如,在一些实施例中,在将张量子数据划分成至少一个数据块之前,数据存储方法还包括:响应于C与c不是整数倍关系:在张量子数据的边界外围填充多个数值为第一值的元素,以将张量子数据在深度方向上的尺寸增加至C’,其中,。
这里,表示向上取整函数,W’、H’和C’为正整数。
之后,再对边界填充后的张量子数据进行划分,得到多个数据块。
例如,边界外围填充可以是在张量子数据的行方向上的左侧或右侧,列方向上的上侧或下侧,深度方向上的前侧或后侧填充,填充方向不作具体限制。
例如,在一个示例中,张量子数据的尺寸为W=120,H=60,C=7,数据块的尺寸为m=32,n=16,c=4,M与m不是整数倍关系,N与n不是整数倍关系,C与c也不是整数倍关系,需要对张量子数据进行边界填充。
例如,可以在张量子数据的行方向上的左侧或右侧填充多个数值为第一值的元素,例如,第一值可以是0或其它预先规定好的数值,例如,可以在张量子数据行方向上的右侧边界外围填充8个0,以将张量子数据在行方向上的尺寸增加至。
例如,可以在张量子数据的列方向的上侧或下侧填充多个数值为第一值的元素,例如,第一值可以是0或其它预先规定好的数值,例如,可以在张量子数据列方向上的上侧边界外围填充4个0,以将张量子数据在列方向上的尺寸增加至。
例如,可以在张量子数据的深度方向的前侧或后侧填充多个数值为第一值的元素,例如,第一值可以是0或其它预先规定好的数值,例如,可以在张量子数据深度方向上的后侧边界外围填充1个0,以将张量子数据在深度方向上的尺寸增加至。
由此,张量子数据从形状尺寸为120×60×7扩充至形状尺寸为128×64×8,扩充后的张量子数据的尺寸是数据块尺寸的整数倍,可以实现完整的划分。
例如,在本公开至少一个实施例中,步骤S20可以包括:以数据块为单位,将至少一个数据块按第一存储顺序依次存入数据存储器中;以及针对每个数据块:确定数据块对应的存储地址;将数据块中的元素按第二存储顺序依次存入存储地址对应的存储空间中。
在存储张量子数据时,是以数据块为单位进行存储。
存储多个数据块时,多个数据块的存储顺序可以是第一存储顺序。
例如,在本公开至少一实施例中,第一存储顺序指示将至少一个数据块先沿行方向,再沿列方向,最后沿深度方向依次存入数据存储器。
例如,在本公开至少一实施例中,按第一存储顺序存入数据存储器的至少一个数据块的存储地址连续。
图5A为本公开至少一实施例提供的张量子数据与数据块的关系示意图。
如图5A所示,张量子数据通过步骤S10可以划分成多个数据块,分别是图5A中的数据块B000、数据块B001、...、数据块B00x、数据块B010、数据块B011、...数据块B01x、数据块B0y0、数据块B0y1、...数据块B0yx、...、数据块B100、数据块B101、...数据块B10x、数据块Bz00、数据块Bz01、...、数据块Bz0x。
具体划分过程可以参考前述实施例的相关描述,这里不再赘述。
例如,张量子数据中在行方向上相邻的两个数据块,例如数据块B000和数据块B001,在数据存储器中的存储地址连续。例如,列方向坐标和深度方向坐标相同(坐标值row和坐标值c相同)的连续数据块在数据存储器中彼此相邻。
例如,张量子数据中在深度方向上相邻的两个数据块,例如数据块B000和数据块B100,在数据存储器中的存储地址连续。例如,行方向坐标和列方向坐标相同(坐标值col和坐标值row相同)的连续数据块在数据存储器中彼此相邻。
例如,张量子数据中在列方向上相邻的两个数据块,例如数据块B000和数据块B010,在数据存储器中的存储地址连续。例如,深度方向坐标和行方向坐标相同(坐标值c和坐标值col相同)的连续数据块在数据存储器中彼此相邻。
图5B为本公开至少一实施例提供的第一存储顺序的示意图。
例如,按照第一存储顺序可以将图5A中的多个数据块排列成图5B所示的顺序。例如,图5A中的多个数据块先按行方向,再按列方向排列,最后沿深度方向排列,得到图5B所示的排列顺序。例如,可以将深度方向坐标相同的(x+1)×(y+1)个数据块按照行优先顺序排列,然后,将这些排列好的数据块再按深度方向排列起来,形成图5B所示的第一存储顺序。
之后,将多个数据块按照图5B所示的顺序依次存入数据存储器,并且,这些数据块的存储地址连续。
当然,需要说明的是,在另一些实施例中,也可以先按照列方向、再按照行方向,最后按照深度方向将数据块存入数据存储器,或者先按照深度方向、再按照行方向,最后按照列方向将数据块存入数据存储器,本公开对此不作具体限制。
在本公开至少一实施例中,存储地址连续表示两个存储地址之差为数据存储器中一个存储地址对应的存储单元的存储容量,两个数据块在数据存储器中彼此相邻。
在上述实施例中,设置存储地址连续,则数据加载指令只需要提供一个起始地址,例如数据块B000的存储地址即可,提取各个数据块的数据的请求可以直接依据数据块B000的存储地址计算得到,无需传输所有数据块的存储地址,减少需要传输的数据量,提高数据加载效率。而且,在数据块按照某个预设存储顺序连续的时候,返回的数据具有一定规律性,可以直接按照该预设存储顺序指定的顺序将返回的数据拼接成张量子数据,提高数据加载效率。进一步的,通常在数据加载时可以预取要加载的存储地址附近的一些存储地址的数据,如果存储地址连续,在数据加载时能够提高数据命中率,提高数据读取性能。
当然,数据块的存储顺序也可以依据设置为其它形式,数据块的存储地址也可以设置为不连续,或者,行方向上相邻的数据块的存储地址连续,某行里最后一个存入数据存储器的数据块与下一行里第一个存入数据存储器的数据块的存储地址不连续等,本公开对此不作具体限制。
针对单个数据块,本公开至少一实施例选择按第二存储顺序将数据块中的元素存入数据存储器,且数据块中相邻的元素在数据存储器中也相邻,单个数据块中的数据在数据存储器中是连续的。
例如,第二存储顺序可以根据需要设置。例如,在本公开至少一实施例中,第二存储顺序可以由张量子数据的数据类型确定的数据块模板指示。当然,本公开不限于此,还可以根据需要设置其他的第二存储顺序。
例如,数据块模板还可以规定了数据块的进一步层次结构,以及数据块内部元素的第二存储顺序。
例如,数据块模板指示数据块包括多个数据子块,多个数据子块通过对数据块在深度方向上进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素。
例如,第二存储顺序指示按照深度方向将多个数据子块依次存入数据存储器,每个数据子块中的多个数据单元按照行优先顺序依次存入数据存储器,每个数据单元中的至少一个元素按照数据块模板指示的预设元素顺序依次存入数据存储器。
例如,多个数据单元按照行优先顺序依次存入数据存储器表示将一个数据子块中的数据单元先按行方向、再按列方向的顺序依次存入数据存储器。
例如,响应于数据类型指示张量子数据中元素的数据位宽为32比特,数据块模板指示数据块包括c个数据子块,每个数据子块的尺寸为m×n×1,每个数据子块包括m×n个数据单元,每个数据单元包括1个元素。
例如,此时第二存储顺序指示按照深度方向将c个数据子块依次存入数据存储器,每个数据子块中的m×n个数据单元(也即m×n个元素)按照行优先顺序或列优先顺序依次存入数据存储器。
例如,响应于数据类型指示张量子数据中元素的数据位宽为16比特,数据块模板指示数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数。
例如,此时第二存储顺序指示按照深度方向将u个数据子块依次存入数据存储器,每个数据子块中的m×n个数据单元按照行优先顺序依次存入数据存储器,每个数据单元中的c/u个元素按照深度方向依次存入数据存储器。
例如,响应于数据类型指示张量子数据中元素的数据位宽为16比特,数据块模板指示数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数。
例如,此时第二存储顺序指示按照深度方向将u个数据子块依次存入数据存储器,每个数据子块中的m×n个数据单元按照行优先顺序依次存入数据存储器,每个数据单元中的c/u个元素按照深度方向依次存入数据存储器。
例如,响应于数据类型指示张量子数据中元素的数据位宽为8比特以及张量子数据的类别为输入数据类型,数据块模板指示数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数。
例如,此时第二存储顺序指示按照深度方向将u个数据子块依次存入数据存储器,每个数据子块中的m×n个数据单元按照行优先顺序依次存入数据存储器,每个数据单元中的c/u个元素按照深度方向依次存入数据存储器。
例如,响应于数据类型指示张量子数据中元素的数据位宽为8比特以及张量子数据的类别为卷积核类型,数据块模板指示数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括(m/v)×n个数据单元,每个数据单元的尺寸为v×1×(c/u),u和v为正整数。
例如,此时第二存储顺序指示按照深度方向将u个数据子块依次存入数据存储器,每个数据子块中的(m/v)×n个数据单元按照行优先顺序依次存入数据存储器,每个数据单元中的v×(c/u)个元素先按行方向、再按深度方向依次存入数据存储器,或者,每个数据单元中的v×(c/u)个元素也可以先按深度方向、再按行方向依次存入数据存储器。
图6A和图6B为本公开至少一实施例提供的数据块模板的示意图。其中,图6A为针对卷积核类型的数据块模板,图6B为针对输入数据类型的数据块模板。
在图6A和图6B中,数据块模板1为数据位宽为32比特对应的数据块模板,数据块模板2为数据位宽为16比特对应的数据块模板,数据块模板3为数据位宽为8比特对应的数据块模板。
图6A和图6B中每个立方体代表一个元素,例如,数据块模板1中一个小立方体表示一个数据位宽为32比特的元素,数据块模板2中一个小立方体表示一个数据位宽为16比特的元素,数据块模板1中一个小立方体表示一个数据位宽为8比特的元素。
例如,如图6A所示,对于数据块模板1,其包括4个数据子块,例如如图6A所示的数据子块1、数据子块2、数据子块3和数据子块4所示。例如,可以将一个数据块在深度方向上平均分成4份得到4个数据子块,属于一个数据子块的所有元素在深度方向上的坐标值相同。例如,对于数据块模板1,m=32,每个数据子块的尺寸为32×1×1,也即一个数据子块包括m个元素,一个元素作为一个数据单元。
例如,对于图6A中的数据块模板1,数据块模板1指示可以将4个数据子块按照数据子块1、数据子块2、数据子块3、数据子块4的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序依次将32个元素存入数据存储器。
因此,对于数据位宽为32比特、类型为卷积核的数据块来说,第二存储顺序可以是:row(0)col(0)c(0)->row(0)col(1)c(0)->...->row(0)col(31)c(0)->row(0)col(0)c(1)->row(0)col(1)c(1)->...->row(0)col(31)c(1)->row(0)col(0)c(2)->...->row(0)col(31)c(3),这里,row(0)表示数据块中列方向的坐标row=0,row(1)表示数据块中列方向的坐标row=1,以此类推;col(0)表示数据块中行方向的坐标为col=0,col(1)表示数据块中行方向的坐标为col=1,以此类推;c(0)表示数据块中深度方向的坐标为c=0,c(1)表示数据块中深度方向的坐标为c=1,以此类推。
例如,如图6A所示,对于数据块模板2,其包括4个数据子块,例如如图6A所示的数据子块5、数据子块6、数据子块7和数据子块8所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块的尺寸为32×1×2。例如,数据子块5包括数据块中的深度方向坐标c=0和c=1的所有元素,数据子块6包括数据块中深度方向坐标c=2,c=3的所有元素,以此类推。例如,每个数据子块包括32个数据单元,每个数据单元的尺寸为1×1×2,也即每个数据单元包括数据子块中在深度方向上相邻的2个元素,例如,对于数据子块5,坐标为col=0,row=1、c=0的元素和坐标为col=0,row=1、c=1的元素作为一个数据单元,以此类推。
例如,对于图6A中的数据块模板2,数据块模板2指示可以将4个数据子块按照数据子块5、数据子块6、数据子块7、数据子块8的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序依次将32个数据单元存入数据存储器,对于单个数据单元,按深度方向将两个元素依次存入数据存储器。
因此,对于数据位宽为16比特、类型为卷积核的数据块来说,第二存储顺序可以是:row(0)col(0)c(0)->row(0)col(0)c(1)->row(0)col(1)c(0)->row(0)col(1)c(1)->...->row(0)col(31)c(0)->row(0)col(31)c(1)->row(0)col(0)c(2)->row(0)col(0)c(3)->row(0)col(1)c(2)->row(0)col(1)c(3)->...->row(0)col(31)c(2)->row(0)col(31)c(3)->...->row(0)col(31)c(7)。
例如,如图6A所示,对于数据块模板3,其也包括4个数据子块,例如如图6A所示的数据子块9、数据子块10、数据子块11和数据子块12所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块的尺寸为64×1×2。例如,数据子块9包括数据块中的深度方向坐标c=0、c=1的所有元素,数据子块10包括数据块中深度方向坐标c=2、c=3的所有元素,以此类推。例如,每个数据子块包括32个数据单元,每个数据单元的尺寸为2×1×2,例如,对于数据子块9,坐标为col=0、row=0、c=0的元素、坐标为col=0、row=0、c=1的元素、坐标为col=1、row=0、c=0的元素以及坐标为col=1、row=0、c=1的元素作为一个数据单元,以此类推。
例如,对于图6A中的数据块模板3,数据块模板3指示将4个数据子块按照数据子块9、数据子块10、数据子块11、数据子块12的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序(由于n=1,实际行优先顺序也是指行方向)依次将32个数据单元存入数据存储器,对于单个数据单元,先按深度方向、再按行方向依次存入数据存储器。
因此,对于数据位宽为8比特、类型为卷积核的数据块来说,第二存储顺序可以是:row(0)col(0)c(0)->row(0)col(0)c(1)->row(0)col(1)c(0)->row(0)col(1)c(1)->...->row(0)col(63)c(0)->row(0)col(63)c(1)->row(0)col(0)c(2)->row(0)col(0)c(3)->...->row(0)col(63)c(2)->row(0)col(63)c(3)->...->row(0)col(63)c(7)。
例如,如图6B所示,对于数据块模板1,其包括4个数据子块,例如如图6B所示的数据子块1、数据子块2、数据子块3和数据子块4所示。例如,可以将一个数据块在深度方向上平均分成4份得到4个数据子块,属于一个数据子块的所有元素在深度方向上的坐标值相同。例如,对于数据块模板1,每个数据子块的尺寸为m×n×1,m=8,n=4,也即1个数据子块包括32个元素,一个元素作为一个数据单元。
例如,对于图6B中的数据块模板1,数据块模板1指示可以将4个数据子块按照数据子块1、数据子块2、数据子块3、数据子块4的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序依次将32个元素存入数据存储器。
因此,对于数据位宽为32比特、类型为输入数据的数据块来说,第二存储顺序可以是:row(0)col(0)c(0)->row(0)col(1)c(0)->...->row(0)col(7)c(0)->row(1)col(0)c(0)->row(1)col(1)c(0)->...->row(3)col(7)c(0)->row(0)col(0)c(1)->row(0)col(1)c(1)->...->row(0)col(7)c(1)->row(1)col(0)c(1)->row(1)col(1)c(1)->...->row(3)col(7)c(1)->...->row(3)col(7)c(3),这里,row(0)表示数据块中列方向的坐标row=0,row(1)表示数据块中列方向的坐标row=1,以此类推;col(0)表示数据块中行方向的坐标为col=0,col(1)表示数据块中行方向的坐标为col=1,以此类推;c(0)表示数据块中深度方向的坐标为c=0,c(1)表示数据块中深度方向的坐标为c=1,以此类推。
例如,如图6B所示,对于数据块模板2,其包括4个数据子块,例如如图6B所示的数据子块5、数据子块6、数据子块7和数据子块8所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块的尺寸为8×4×2。例如,数据子块5包括数据块中的深度方向坐标c=0和c=1的所有元素,数据子块6包括数据块中深度方向坐标c=2,c=3的所有元素。例如,每个数据子块包括8×4个数据单元,每个数据单元的尺寸为1×1×2,也即每个数据单元包括数据子块中在深度方向上相邻的2个元素,例如,对于数据子块5,坐标为col=0,row=1、c=0的元素和坐标为col=0,row=1、c=1的元素作为一个数据单元,以此类推。
例如,对于图6B中的数据块模板2,数据块模板2指示可以将4个数据子块按照数据子块5、数据子块6、数据子块7、数据子块8的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序依次将32个数据单元存入数据存储器,对于单个数据单元,按深度方向将两个元素依次存入数据存储器。
因此,对于数据位宽为16比特、类型为输入数据的数据块来说,第二存储顺序可以是:row(0)col(0)c(0)->row(0)col(0)c(1)->row(0)col(1)c(0)->row(0)col(1)c(1)->...->row(3)col(7)c(0)->row(3)col(7)c(1)->row(0)col(0)c(2)->row(0)col(0)c(3)->row(0)col(1)c(2)->row(0)col(1)c(3)->...->row(3)col(7)c(2)->row(3)col(7)c(3)->...->row(3)col(7)c(7)。
例如,如图6B所示,对于数据块模板3,其也包括4个数据子块,例如如图6B所示的数据子块9、数据子块10、数据子块11和数据子块12所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块的尺寸为8×4×4。例如,数据子块9包括数据块中的深度方向坐标c=0、c=1、c=2以及c=3的所有元素,数据子块10包括数据块中深度方向坐标c=4、c=5、c=6以及c=7的所有元素。例如,每个数据子块包括8×4个数据单元,每个数据单元的尺寸为1×1×4,也即每个数据单元包括数据子块中在深度方向上相邻的4个元素,例如,对于数据子块9,坐标为col=0、row=1、c=0的元素、坐标为col=0、row=1、c=1的元素、坐标为col=0、row=1、c=2的元素以及坐标为col=0、row=1、c=3的元素作为一个数据单元,以此类推。
例如,对于图6B中的数据块模板3,数据块模板3指示将4个数据子块按照数据子块9、数据子块10、数据子块11、数据子块12的顺序依次存入数据存储器;对于一个数据子块,按行优先顺序依次将32个数据单元存入数据存储器,对于单个数据单元,按深度方向将4个元素依次存入数据存储器。
因此,对于数据位宽为8比特、类型为输入数据的数据块来说,第二存储顺序可以是: row(0)col(0)c(0)->row(0)col(0)c(1)->row(0)col(0)c(2)->row(0)col(0)c(3)->row(0)col(1)c(0)->row(0)col(1)c(1)->row(0)col(1)c(2)->row(0)col(1)c(3)->...->row(3)col(7)c(3)->row(0)col(0)c(4)->row(0)col(0)c(5)->row(0)col(0)c(6)->row(0)col(0)c(7)->row(0)col(1)c(4)->...->row(3)col(7)c(7)->row(0)col(0)c(8)->...->row(3)col(7)c(15)。
在该实施例中提供了一种具体的预设存储顺序,但本公开不限于此。数据子块的分割、数据子块内存储顺序的设置可以依据需要变化和调整,在此不再赘述。例如,对于数据子块内的数据单元存储顺序可以设置为按照列优先顺序依次存入数据存储器,例如,列优先顺序指示将一个数据子块中的数据单元先按行方向、再按列方向的顺序依次存入数据存储器。本公开对此不作具体限制。
例如,若P大于1,则对于每个张量子数据,都可以使用上述步骤S10-S20将一个张量子数据存入数据存储器。例如,对P个张量子数据依次执行上述步骤S10和S20,直到将P个张量子数据都存入数据存储器。
例如,不同张量子数据在数据存储器中可以连续存储,或者也可以不连续存储。例如,第p个张量子数据中最后一个存入数据存储器的存储块的存储地址例如是addr0,第p+1个张量子数据中第一个存入数据存储器的存储块的存储地址例如是addr1,p为正整数且小于P,addr0可以和addr1连续,例如addr1=addr0+数据块大小,或者,addr0也可以和addr1不连续,本公开对此不作具体限制。
本公开至少一实施例提供了一种数据存储方法,张量数据能够以数据块为单位存入数据存储器,且在数据存储器中,单个数据块中的元素连续排布,在数据加载时可一次性将整个数据块的数据读取出来,相比于传统的NHWC、NCWH、Kh×Kw×IC×OC或者Kh×Kw×OC×IC的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
本公开至少一实施例还提供一种数据处理方法。图7为本公开至少一实施例提供的数据处理方法的示意性流程图。
例如,如图7所示,本公开实施例提供的数据处理方法包括步骤S30至S40。
在步骤S30,接收数据加载指令。
例如,数据加载指令包括待加载的张量数据的存储地址,张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数。
关于张量数据的相关描述可以参考前述数据存储方法中的相关内容,重复之处不再赘述。
在步骤S40,解析数据加载指令之后执行数据加载指令。
例如,本公开至少一实施例提供的数据处理方法可以应用于图9所示的数据处理器200。
例如,在本公开至少一实施例提供的数据处理方法中,提供数据加载指令,数据加载指令包括待加载的张量数据的存储地址。例如,数据处理器接收数据加载指令后,解析数据加载指令,例如对数据加载指令进行译码,产生微指令并将微指令发送给指令分配单元;指令分配单元根据微指令类别,将其发送给相应的调度队列;响应于微指令,待加载的张量数据的存储地址(全部或所需的部分)被准备好之后,执行数据加载指令操作。
图8为本公开至少一实施例提供的数据处理方法的示意性流程图。
例如,如图8所示,本公开实施例提供的数据处理方法中的步骤S40里的执行数据加载指令可以包括步骤S401至S402。
在步骤S401,确定张量数据对应的各个数据块的存储地址。
例如,每个数据块的尺寸为m×n×c,m、n和c为正整数。
例如,张量数据对应的各个数据块包括对张量数据中每个张量子数据划分得到的数据块,例如,每个张量子数据在存入数据存储器时划分成至少一个数据块,具体划分过程可以参考前述数据存储方法中步骤S10的相关内容,这里不再赘述。
例如,张量数据对应的各个数据块的存储地址可以基于待加载的张量数据的存储地址确定。
例如,在一些实施例中,待加载的张量数据的存储地址包括了各个数据块的存储地址。
例如,在另一些实施例中,各个存储块的存储地址之间存在一些预定关系,例如,一个张量子数据中的数据块的存储地址按第一存储顺序连续,由此,待加载的张量数据的存储地址提供了各个张量子数据中第一个数据块的存储地址,其它数据块的存储地址可以依据该存储地址计算得到。关于第一存储顺序可以参考前述数据存储方法中的相关内容,重复之处不再赘述。
例如,在另一些实施例中,一个张量子数据中的数据块的存储地址按第一存储顺序连续,不同张量子数据的存储地址之间也存在一些预定关系,例如当前张量子数据中最后一个存入数据存储器的数据块的存储地址和下一个存入数据存储器的张量子数据中第一个存入数据存储器的数据块的存储地址连续,由此,待加载的张量数据的存储地址提供了第一个存入数据存储器的张量子数据中第一个数据块的存储地址,张量数据中所有其它数据块的存储地址可以依据该存储地址计算得到。
例如,在一些实施例中,数据加载指令还可以包括待加载的数据块的数量,或者,待加载的张量数据的尺寸,根据待加载的张量数据的尺寸和元素的数据位宽可以确定数据块的数量,由此可以确定需要加载多少个数据块以及计算多少个数据块的存储地址。
例如,属于同一个数据块中的元素在数据存储器中对应同一个存储地址。在存储张量数据时,以数据块为单位进行存储,因此一个数据块中的元素在数据存储器中对应同一个存储地址。
在步骤S402,以数据块为单位,利用各个数据块的存储地址从数据存储器中提取数据,以得到张量数据。
例如,同一个数据块的元素在数据存储器中连续存储。
例如,数据块按第一存储顺序存入数据存储器,在提取数据时,提取出的数据块也按照第一存储顺序组合成一个张量子数据,多个张量子数据进而组合成张量数据。
关于数据块按照第一存储顺序存储的相关内容可以参考前述数据存储方法中步骤S20的相关描述,这里不再赘述。
例如,针对单个数据块,结合数据块中的元素的第二存储顺序对提取的数据进行重排列,将其复原至原始张量子数据中单个数据块的状态。
例如,第二存储顺序由根据张量子数据的数据类型确定的数据块模板指示。
关于第二存储顺序可以参考前述数据存储方法中步骤S20的相关描述,这里不再赘述。
在本公开至少一实施例提供的数据处理方法中,数据加载时可以以数据块为单位一次性将整个数据块的数据读取出来,相比于传统的NHWC、NCWH、Kh×Kw×IC×OC或者Kh×Kw×OC×IC的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
与上述数据存储方法相对应,本公开至少一实施例还提供一种数据存储器。
数据存储器用于存储张量数据。例如,张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数。
关于张量数据的相关描述可以参考前述数据存储方法中的相关内容,重复之处不再赘述。
数据存储器配置为以数据块为单位存储张量子数据,其中,每个数据块的尺寸为m×n×c,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在存储器中对应同一个存储地址。
例如,各个数据块通过对P个张量子数据进行划分得到。
例如,根据张量子数据的数据类型,将张量子数据划分成至少一个数据块,数据类型不同的张量子数据划分得到的数据块的尺寸不同,但数据块的数据总量相同。
例如,每个数据块的数据总量相同,且由数据存储器中单个存储地址对应的存储单元的存储容量决定。
例如,在划分时,根据数据类型,确定数据位宽对应的数据块模板,数据块模板指示了对该数据类型的张量子数据划分得到的数据块的尺寸;之后,按照数据块模板对张量子数据进行划分,以得到至少一个数据块。例如,对一个张量子数据进行划分得到的至少一个数据块的并集为该张量子数据,该至少一个数据块在划分时互不重叠。
关于数据块划分的具体描述可以参考前述数据存储方法中步骤S10的相关描述,重复之处不再赘述。
例如,数据存储器执行以数据块为单位存储张量子数据时,包括执行以下操作:以数据块为单位,将至少一个数据块按第一存储顺序依次存入数据存储器中;以及针对每个数据块:确定数据块对应的存储地址;将数据块中的元素按第二存储顺序依次存入存储地址对应的存储空间中。
关于第一存储顺序的具体描述可以参考前述数据存储方法中的相关描述,重复之处不再赘述。
针对单个数据块,单个数据块中的元素在数据存储器中连续存储,存储时遵照的第二存储顺序由根据张量子数据的数据类型确定的数据块模板指示。
关于第二存储顺序的相关描述可以参考前述数据存储方法中的相关描述,重复之处不再赘述。
数据存储器可以包括内存、缓存等能够存储数据功能的任意结构的存储装置。本公开对数据存储器的硬件结构、性能、原理不作具体限制,只要能实现数据存储功能即可。
例如,在本公开至少一实施例提供的数据存储器中,张量数据能够以数据块为单位存入数据存储器,且在数据存储器中,单个数据块中的元素连续排布,从而在数据加载时可一次性将整个数据块的数据读取出来,相比于传统的NHWC、NCWH、Kh×Kw×IC×OC或者Kh×Kw×OC×IC的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
图9为本公开至少一实施例提供的数据处理器的示意性框图。
如图9所示,该数据处理器200包括如本公开任一实施例所述的数据存储器100。关于数据存储器100的结构、功能、技术效果参考如前所述的数据处理器的实施例中相关描述,这里不再赘述。应当注意,图9所示的数据处理器200的组件只是示例性的,而非限制性的,根据实际应用需要,数据处理器200还可以具有其他组件。
例如,数据处理器可以配置为执行本公开至少一实施例提供的数据处理方法。关于数据处理方法的相关内容、技术效果可以参考如前所述的数据处理方法的实施例中相关描述,这里不再赘述。
例如,数据处理器200和数据存储器100之间可以直接或间接地互相通信。
例如,数据处理器200和数据存储器100可以通过网络进行通信。网络可以包括无线网络、有线网络、和/或无线网络和有线网络的任意组合。数据处理器200和数据存储器100之间也可以通过系统总线实现相互通信,本公开对此不作限制。
例如,数据处理器200根据实际需要,可以实现为GPU(图形处理器)、CPU(中央处理器)、NPU(神经网络处理器)、DSP(数字信号处理器)等,本公开对此不作限制。
例如,在一种实施例中,数据处理器200可以为GPU或GPGPU,数据存储器100可以为HBM。
需要注意的是,在本公开的实施例中,该数据处理器200可以包括更多或更少的电路或单元,例如还可以包括其他支撑数据处理器200运行的电路或单元,本公开对此不作具体限制。
各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路或单元的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。
图10为本公开至少一实施例提供的一种非瞬时性计算机可读存储介质的示意图。例如,如图10所示,存储介质300可以为非瞬时性计算机可读存储介质,在存储介质300上可以非暂时性地存储一个或多个计算机可读指令301。例如,当计算机可读指令301由处理器执行时可以执行根据上文所述的数据存储方法中的一个或多个步骤或者数据处理方法中的一个或多个步骤。
例如,该存储介质300可以应用于上述数据处理器中,例如,该存储介质300可以包括数据处理器中的数据存储器。
例如,存储装置可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机可读指令,数据处理器可以运行所述计算机可读指令,以实现数据处理器的各种功能。在存储介质中还可以存储各种应用程序和各种数据等。
例如,存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种数据存储方法,用于存储张量数据,其中,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,
所述数据存储方法包括:
针对每个张量子数据,将所述张量子数据划分成至少一个数据块,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数;
以数据块为单位,将所述至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
2.根据权利要求1所述的数据存储方法,其中,将所述张量子数据划分成至少一个数据块,包括:
根据所述张量子数据的数据类型,将所述张量子数据划分成至少一个数据块,其中,数据类型不同的张量子数据划分得到的数据块的尺寸不同但数据总量相同。
3.根据权利要求2所述的数据存储方法,其中,根据所述张量子数据的数据类型,将所述张量子数据划分成至少一个数据块,包括:
根据所述数据类型,确定所述数据类型对应的数据块模板,其中,所述数据块模板指示对所述数据类型的张量子数据划分得到的数据块的形状尺寸;
按照所述数据块模板对所述张量子数据进行划分,以得到所述至少一个数据块,其中,所述至少一个数据块的并集为所述张量子数据,所述至少一个数据块在划分时互不重叠。
4.根据权利要求3所述的数据存储方法,其中,所述数据类型包括所述张量子数据中元素的数据位宽以及所述张量子数据的类别,所述类别包括卷积核类型,
响应于所述数据类型指示所述张量子数据的类别为所述卷积核类型以及所述张量子数据中元素的数据位宽为8比特,所述数据块模板指示m=2×a,n=1,c=2×b;
响应于所述数据类型指示所述张量子数据的类别为所述卷积核类型以及所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示m=a,n=1,c=2×b;
响应于所述数据类型指示所述张量子数据的类别为所述卷积核类型以及所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示m=a,n=1,c=b;
其中,a和b为正整数。
5.根据权利要求3所述的数据存储方法,其中,所述数据类型包括所述张量子数据中元素的数据位宽以及所述张量子数据的类别,所述类别包括输入数据类型,
响应于所述数据类型指示所述张量子数据的类别为所述输入数据类型以及所述张量子数据中元素的数据位宽为8比特,所述数据块模板指示m=d,n=k,c=4×g;
响应于所述数据类型指示所述张量子数据的类别为所述输入数据类型以及所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示m=d,n=k,c=2×g;
响应于所述数据类型指示所述张量子数据的类别为所述输入数据类型以及所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示m=d,n=k,c=g;
其中,d、k和g为正整数。
6. 根据权利要求1所述的数据存储方法,其中,以数据块为单位,将所述至少一个数据块存入数据存储器中,包括:
以数据块为单位,将所述至少一个数据块按第一存储顺序依次存入所述数据存储器中;以及
针对每个数据块:
确定所述数据块对应的存储地址;
将所述数据块中的元素按第二存储顺序依次存入所述存储地址对应的存储空间中。
7.根据权利要求6所述的数据存储方法,其中,所述第二存储顺序由根据所述张量子数据的数据类型确定的数据块模板指示。
8.根据权利要求7所述的数据存储方法,其中,所述数据块模板指示每个数据块包括多个数据子块,所述多个数据子块通过对所述数据块在深度方向上进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素,
所述第二存储顺序指示对于每个数据块,将所述数据块中的多个数据子块按照所述深度方向依次存入所述数据存储器,每个数据子块中的多个数据单元按照行优先顺序依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器。
9.根据权利要求8所述的数据存储方法,其中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为32比特,所述数据块模板指示每个数据块包括c个数据子块,每个数据子块的尺寸为m×n×1,每个数据子块包括m×n个数据单元,每个数据单元包括1个元素,
每个数据子块中的多个数据单元按照行优先顺序依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
将每个数据子块中的m×n个元素按照所述行优先顺序或列优先顺序依次存入所述数据存储器。
10.根据权利要求8所述的数据存储方法,其中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为16比特,所述数据块模板指示每个数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数,
每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
将每个数据单元中的c/u个元素按照所述深度方向依次存入所述数据存储器。
11.根据权利要求8所述的数据存储方法,其中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为8比特以及所述张量子数据的类别为输入数据类型,所述数据块模板指示每个数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括m×n个数据单元,每个数据单元的尺寸为1×1×(c/u),u为正整数,
每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
将每个数据单元中的c/u个元素按照所述深度方向依次存入所述数据存储器。
12.根据权利要求8所述的数据存储方法,其中,响应于所述数据类型指示所述张量子数据中元素的数据位宽为8比特以及所述张量子数据的类别为卷积核类型,
所述数据块模板指示每个数据块包括u个数据子块,每个数据子块的尺寸为m×n×(c/u),每个数据子块包括(m/v)×n个数据单元,每个数据单元的尺寸为v×1×(c/u),u和v为正整数,
每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
将每个数据单元中的v×(c/u)个元素先按行方向、再按所述深度方向依次存入所述数据存储器,或者,将每个数据单元中的v×(c/u)个元素先按所述深度方向、再按所述行方向依次存入所述数据存储器。
13.根据权利要求6所述的数据存储方法,其中,所述第一存储顺序指示将所述至少一个数据块先沿行方向,再沿列方向,最后沿深度方向依次存入所述数据存储器。
14.根据权利要求13所述的数据存储方法,其中,按所述第一存储顺序存入所述数据存储器的所述至少一个数据块的存储地址连续。
15.根据权利要求1-14任一项所述的数据存储方法,其中,在将所述张量子数据划分成至少一个数据块之前,所述数据存储方法还包括:
响应于W与m不是整数倍关系:
在所述张量子数据的边界外围填充多个数值为第一值的元素,以将所述张量子数据在行方向上的尺寸增加至W’,其中,;
响应于H与n不是整数倍关系:
在所述张量子数据的边界外围填充多个数值为所述第一值的元素,以将所述张量子数据在列方向上的尺寸增加至H’,其中,;
响应于C与c不是整数倍关系:
在所述张量子数据的边界外围填充多个数值为所述第一值的元素,以将所述张量子数据在深度方向上的尺寸增加至C’,其中,,
其中,表示向上取整函数,W’、H’和C’为正整数。
16.一种数据处理方法,包括:
接收数据加载指令,其中,所述数据加载指令包括待加载的张量数据的存储地址,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,
解析所述数据加载指令之后执行所述数据加载指令,
其中,执行所述数据加载指令,包括:
确定所述张量数据对应的各个数据块的存储地址,其中,每个数据块的尺寸为m×n×c,所述各个数据块通过对所述P个张量子数据进行划分得到,属于同一个数据块中的元素在数据存储器中对应同一个存储地址,m、n和c为正整数;
以数据块为单位,利用各个数据块的存储地址从所述数据存储器中提取数据,以得到所述张量数据,其中,同一个数据块中的元素在所述数据存储器中连续存储。
17.一种数据存储器,用于存储张量数据,其中,所述张量数据包括P个张量子数据,每个张量子数据包括多个元素且形状尺寸为W×H×C,W表示行方向尺寸,H表示列方向尺寸,C表示深度方向尺寸,P、W、H和C均为正整数,
所述数据存储器配置为以数据块为单位存储所述张量数据,其中,每个数据块的尺寸为m×n×c,m、n和c为正整数,各个数据块通过对所述P个张量子数据进行划分得到,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
18.根据权利要求17所述的数据存储器,其中,每个数据块的数据总量相同,且由所述数据存储器中单个存储地址对应的存储单元的存储容量决定。
19.一种数据处理器,包括如权利要求17或18所述的数据存储器。
20.一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,
所述计算机可执行指令被处理器执行时实现根据权利要求1-15任一项所述的数据存储方法或权利要求16所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410251377.8A CN117851742B (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410251377.8A CN117851742B (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117851742A CN117851742A (zh) | 2024-04-09 |
CN117851742B true CN117851742B (zh) | 2024-05-10 |
Family
ID=90540530
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410251377.8A Active CN117851742B (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117851742B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118503601B (zh) * | 2024-07-16 | 2024-09-20 | 北京壁仞科技开发有限公司 | 数据处理方法及装置、处理器、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108183973A (zh) * | 2018-02-23 | 2018-06-19 | 苏州汉辰数字科技有限公司 | 一种流媒体量子流数据块结构及加解密方法 |
CN110798311A (zh) * | 2019-10-15 | 2020-02-14 | 中国电子科技集团公司第三十研究所 | 基于量子真随机数矩阵实现一次一密的ip加密方法 |
CN111782577A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理装置及方法以及相关产品 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10447472B2 (en) * | 2017-02-21 | 2019-10-15 | Bank Of America Corporation | Block computing for information silo |
-
2024
- 2024-03-06 CN CN202410251377.8A patent/CN117851742B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108183973A (zh) * | 2018-02-23 | 2018-06-19 | 苏州汉辰数字科技有限公司 | 一种流媒体量子流数据块结构及加解密方法 |
CN111782577A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理装置及方法以及相关产品 |
CN110798311A (zh) * | 2019-10-15 | 2020-02-14 | 中国电子科技集团公司第三十研究所 | 基于量子真随机数矩阵实现一次一密的ip加密方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117851742A (zh) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7329533B2 (ja) | 演算を加速するための方法および加速器装置 | |
JP7358382B2 (ja) | 演算を加速するための加速器及びシステム | |
US11847550B2 (en) | Sparse convolutional neural network accelerator | |
CN112214726B (zh) | 运算加速器 | |
CN111937009B (zh) | 用于执行卷积神经网络计算的电路和方法 | |
CN106228238B (zh) | 现场可编程门阵列平台上加速深度学习算法的方法和系统 | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
US9235769B2 (en) | Parallel object detection method for heterogeneous multithreaded microarchitectures | |
CN117851742B (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
US20190244080A1 (en) | Neural Network Processor with On-Chip Convolution Kernel Storage | |
US20120221788A1 (en) | Multi-dimensional array manipulation | |
TW202123093A (zh) | 實行卷積運算的系統及方法 | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN109313663B (zh) | 人工智能计算辅助处理装置、方法、存储介质、及终端 | |
US11481994B2 (en) | Method and apparatus for extracting image data in parallel from multiple convolution windows, device, and computer-readable storage medium | |
CN113469350A (zh) | 一种适于npu的深度卷积神经网络加速方法和系统 | |
US9170836B2 (en) | System and method for re-factorizing a square matrix into lower and upper triangular matrices on a parallel processor | |
CN113673701A (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
US20240004702A1 (en) | Thread construction method and device | |
US20240037179A1 (en) | Data processing method and apparatus | |
DE102023105572A1 (de) | Effiziente Matrixmultiplikation und -addition mit einer Gruppe von Warps | |
US20220100814A1 (en) | Graphics processor and acceleration method thereof | |
CN115480919A (zh) | 卷积优化运算方法、装置、计算机设备及存储介质 | |
CN114116208A (zh) | 一种基于gpu的短波辐射传输模式三维加速方法 |
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 |