CN118132456A - 数据存储方法、数据处理方法、数据存储器、数据处理器 - Google Patents
数据存储方法、数据处理方法、数据存储器、数据处理器 Download PDFInfo
- Publication number
- CN118132456A CN118132456A CN202410256838.0A CN202410256838A CN118132456A CN 118132456 A CN118132456 A CN 118132456A CN 202410256838 A CN202410256838 A CN 202410256838A CN 118132456 A CN118132456 A CN 118132456A
- Authority
- CN
- China
- Prior art keywords
- data
- block
- data block
- memory
- 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.)
- Pending
Links
- 238000013500 data storage Methods 0.000 title claims abstract description 73
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000003672 processing method Methods 0.000 title claims abstract description 38
- 239000011159 matrix material Substances 0.000 claims abstract description 166
- 230000004044 response Effects 0.000 claims description 28
- 230000006870 function Effects 0.000 claims description 13
- 238000004364 calculation method Methods 0.000 abstract description 15
- 238000010586 diagram Methods 0.000 description 25
- 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
- QXOQNNAWFUXKMH-UHFFFAOYSA-N 1-(Malonylamino)cyclopropanecarboxylic acid Chemical compound OC(=O)CC(=O)NC1(C(O)=O)CC1 QXOQNNAWFUXKMH-UHFFFAOYSA-N 0.000 description 1
- 238000009825 accumulation Methods 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
- 230000018109 developmental process Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011773 genetically engineered mouse model 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
- 230000011218 segmentation Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
一种数据存储方法、数据处理方法、数据存储器、数据处理器和存储介质。该数据存储方法包括:针对每批矩阵数据,将矩阵数据划分成至少一个数据块,其中,每个数据块包括m行n列元素,其中,m和n为正整数;以数据块为单位,将至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。该数据存储方法提供了一种新的存储方式,该存储方式以数据块为单位实现对矩阵数据的存储,每个数据块对应一个存储地址,从而可以使用一个存储地址提取整个数据块的数据,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,进而提升了计算单元的利用率。
Description
技术领域
本公开的实施例涉及一种数据存储方法、数据处理方法、数据存储器、数据处理器和非瞬时性计算机可读存储介质。
背景技术
张量(Tensor)是一个定义在一些向量空间和一些对偶空间的笛卡尔积上的多重线性映射,例如,标量可以看作0维张量,向量可以看作一维张量,矩阵可以看作二维张量。张量操作在并行处理器等处理器中广泛使用。
随着人工智能及机器学习的发展,对以并行处理器(例如,多核处理器、数字信号处理器等)为代表的众多并行处理器设备提出了新的要求。在通用计算中,并行处理器的计算单元需要大量的数据,而这些数据一般是存储并行处理器的存储部件中,例如存储部件可以是内存,通过数据加载指令可以将这些数据从存储部件提取至计算单元中进行计算。
发明内容
本公开至少一实施例提供一种数据处理方法,包括:一种数据存储方法,用于存储张量数据,其中,所述张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,所述数据存储方法包括:针对每批矩阵数据,将所述矩阵数据划分成至少一个数据块,其中,每个数据块包括m行n列元素,其中,m和n为正整数;以数据块为单位,将所述至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
例如,在本公开至少一实施例提供的数据处理方法中,将所述矩阵数据划分成至少一个数据块,包括:根据元素的数据位宽,将所述矩阵数据划分成至少一个数据块,其中,元素的数据位宽不同的矩阵数据划分得到的数据块的尺寸不同,数据总量相同。
例如,在本公开至少一实施例提供的数据处理方法中,根据元素的数据位宽,将所述矩阵数据划分成至少一个数据块,包括:根据所述数据位宽,确定所述数据位宽对应的数据块模板,其中,所述数据块模板指示了对所述数据位宽的矩阵数据划分得到的数据块的尺寸;按照所述数据块模板对所述矩阵数据进行划分,以得到所述至少一个数据块,其中,所述至少一个数据块的并集为所述矩阵数据,所述至少一个数据块在划分时互不重叠。
例如,在本公开至少一实施例提供的数据处理方法中,响应于所述数据位宽为8比特,所述数据块模板指示所述数据块的行数m为2×a,列数n为2×b,响应于所述数据位宽为16比特,所述数据块模板指示所述数据块的行数m为2×a,列数n为b,响应于所述数据位宽为32比特,所述数据块模板指示所述数据块的行数m为a,列数n为b,其中,a和b为正整数。
例如,在本公开至少一实施例提供的数据处理方法中,以数据块为单位,将所述至少一个数据块存入数据存储器中,包括:以数据块为单位,将所述至少一个数据块按行优先顺序或列优先顺序依次存入所述数据存储器中;以及针对每个数据块:确定所述数据块对应的存储地址;将所述数据块中的元素按预设存储顺序依次存入所述存储地址对应的存储空间中。
例如,在本公开至少一实施例提供的数据处理方法中,所述预设存储顺序由根据元素的数据位宽确定的数据块模板指示。
例如,在本公开至少一实施例提供的数据处理方法中,所述数据块模板指示所述数据块包括多个数据子块,所述多个数据子块通过对所述数据块进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素,所述预设存储顺序指示按照列方向将所述多个数据子块依次存入所述数据存储器,每个数据子块中的多个数据单元按照行方向依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器。
例如,在本公开至少一实施例提供的数据处理方法中,响应于所述数据位宽为16比特,所述数据块模板指示所述数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括n个数据单元,每个数据单元包括所述数据子块中位于同一列的2个元素,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:按照列方向将每个数据单元中的2个元素依次存入所述数据存储器,其中,a为正整数,m=2×a。
例如,在本公开至少一实施例提供的数据处理方法中,响应于所述数据位宽为8比特,所述数据块模板指示所述数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括b个数据单元,每个数据单元包括所述数据子块中相邻的两行两列元素,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:将每个数据单元中的4个元素按照行优先顺序或列优先顺序依次存入所述数据存储器,其中,a和b为正整数,m=2×a,n=2×b。
例如,在本公开至少一实施例提供的数据处理方法中,响应于所述数据位宽为32比特,所述数据块模板指示所述数据块包括m个数据子块,每个数据子块由1行n列元素组成,每个数据单元包括1个元素,每个数据子块中的多个数据单元按照行方向依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:按照行方向将每个数据子块中的n个元素依次存入所述数据存储器。
例如,在本公开至少一实施例提供的数据处理方法中,响应于按照行优先顺序将所述至少一个数据块依次存入所述数据存储器中,所述矩阵数据中在行方向上相邻的两个数据块在所述数据存储器中的存储地址连续。
例如,在本公开至少一实施例提供的数据处理方法中,按照行优先顺序将所述至少一个数据块依次存入所述数据存储器中包括将所述至少一个数据块先按行方向、再按列方向依次存入所述数据存储器,其中,所述至少一个数据块排列为G行Q列形式,所述G行中的第i行里最后一个存入所述数据存储器的数据块与第i+1行里第一个存入所述数据存储器的数据块的存储地址连续,其中,G、Q和i均为正整数,i小于等于G。
例如,在本公开至少一实施例提供的数据处理方法中,响应于按照列优先顺序将所述至少一个数据块依次存入所述数据存储器中,所述矩阵数据中在列方向上相邻的两个数据块在所述数据存储器中的存储地址连续。
例如,在本公开至少一实施例提供的数据处理方法中,按照列优先顺序将所述至少一个数据块依次存入所述数据存储器中包括将所述至少一个数据块先按列方向、再按行方向依次存入所述数据存储器,其中,所述至少一个数据块排列为G行Q列形式,所述Q列中的第j列里最后一个存入所述数据存储器的数据块与第j+1列里第一个存入所述数据存储器的数据块的存储地址连续,其中,P、Q和j均为正整数。
例如,在本公开至少一实施例提供的数据处理方法中,在将所述矩阵数据划分成至少一个数据块之前,所述数据存储方法还包括:响应于M与m不是整数倍关系:在所述矩阵数据的边界外围填充多个数值为第一值的元素,以将所述矩阵数据的行数增加至M’,其中,响应于N与n不是整数倍关系:在所述矩阵数据的边界外围填充多个数值为第一值的元素,以将所述矩阵数据的列数增加至N’,其中,/>其中,/>表示向上取整函数。
本公开至少一实施例提供一种数据处理方法,包括:接收数据加载指令,其中,所述数据加载指令包括待加载的张量数据的存储地址,所述张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,解析所述数据加载指令之后执行所述数据加载指令,其中,执行所述数据加载指令,包括:确定所述张量数据对应的各个数据块的存储地址,其中,每个数据块包括m行n列元素,所述各个数据块通过对所述张量数据进行划分得到,属于同一个数据块中的元素在数据存储器中对应同一个存储地址,m和n为正整数;以数据块为单位,利用各个数据块的存储地址从所述数据存储器中提取数据,以得到所述张量数据,其中,同一个数据块的元素在所述数据存储器中连续存储。
本公开至少一实施例提供一种数据存储器,用于存储张量数据,其中,所述张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,所述数据存储器配置为以数据块为单位存储所述张量数据,其中,每个数据块包括m行n列元素,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述存储器中对应同一个存储地址。
例如,在本公开至少一实施例提供的数据处理器中,每个数据块的数据总量相同,且由所述数据存储器中单个存储地址对应的存储单元的存储容量决定。
本公开至少一实施例提供一种数据处理器,包括如本公开任一实施例所述的数据存储器。
本公开至少一实施例提供一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现根据本公开任一实施例所述的数据存储方法或根据本公开任一实施例所述的数据处理方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为一种通用图形处理器(GPGPU)的一种结构示意图;
图2为一种进行矩阵计算的数据的示意图;
图3为本公开至少一实施例提供的数据存储方法的示意性流程图;
图4为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图;
图5A为本公开至少一实施例提供的矩阵数据与数据块的关系示意图;
图5B为本公开至少一实施例提供的行优先顺序的示意图;
图5C为本公开至少一实施例提供的列优先顺序示意图;
图6为本公开至少一实施例提供的数据块存储顺序示意图;
图7为本公开至少一实施例提供的数据处理方法的示意性流程图;
图8为本公开至少一实施例提供的数据处理方法的示意性流程图;
图9为本公开至少一实施例提供的数据处理器的示意性框图;
图10为本公开至少一实施例提供的一种非瞬时性计算机可读存储介质的示意图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
图1为一种通用图形处理器(GPGPU)的一种结构示意图。
在并行计算中,计算任务一般通过多个线程(thread)执行。如图1所示,这些线程在通用图形处理器(或称为并行计算处理器)中执行前,线程块调度模块中被划分成多个线程块(thread block),然后经由线程块分发模块,将多个线程块分发到各个计算单元(Compute Unit,简称CU)。一个线程块中的所有线程必须要分配到同一个计算单元上执行。同时,线程块会被拆分成最小执行线程束(或简称线程束,thread warp),每个线程束包含了固定数量(或小于这个固定数量)的线程,例如,32个线程。多个线程块可以在同一个计算单元中执行,或者在不同计算单元中执行。
在每个计算单元中,线程束调度/分发模块对线程束进行调度、分配,以便该计算单元的多个计算核心运行线程束。每个计算核心包括算数逻辑单元(ALU)、浮点计算单元等。根据计算单元中计算核心的个数,一个线程块中的多个线程束可以同时执行或分时执行。每个线程束中的多个线程会执行相同的指令。指令的读取、译码、发射都在线程束调度/分发模块中完成。内存执行指令会被发射到计算单元中的共享缓存(例如共享L1缓存)或进一步发射到统一缓存中以进行读写操作等。
通用计算操作,例如关于矩阵的计算操作通常需要大量的数据,这些数据通常存储在图1所示的存储器中,例如可以存储在HBM(High Bandwidth Memory,高带宽内存)中,在进行通用计算操作时需要从存储器中加载数据(Load操作)。数据在存储器中的存储方式会影响内存访问带宽,进而影响计算单元的硬件利用率。
对于需要进行矩阵计算的数据可以表示为[N,H,W],N表示batch size(批尺寸),即一次训练所抓取的数据样本数量,H表示矩阵的高度,W表示矩阵的宽度。例如,若进行矩阵计算的数据是一张图片,N=1,H表示图片的高度,W表示图片的宽度。
矩阵计算可以包括通用矩阵乘法(General Matrix Multiplication,简称GEMM)。例如,在人工智能等领域中经常使用的神经网络处理中(例如,卷积神经网络)经常需要执行矩阵乘累加(Matrix multiply and Accumulation,简称MACC)计算,矩阵乘累加计算包括将两个矩阵中对应位置元素相乘,再将相乘结果累加得到一个计算结果。
图2为一种进行矩阵计算的数据的示意图。如图2所示,需要进行矩阵计算的数据共有N个batch(批),如图2中多个大矩形框batch0、batch1、...batch(N-1)所示。一个batch包括H×W个元素,图2中位于一个batch中的1个小格子代表1个元素,例如1个元素可以为8比特、16比特等数据位宽。
例如,以HBM为例,在存储器中1个存储单元可以存储512B(Byte,字节)的数据,例如一个存储地址指示的存储单元中可以存储512B的数据。一笔数据加载指令(用于load操作)需要从存储器中加载512B的数据,例如该512B数据由图2中加粗矩形框所示的4行32列元素组成,每个元素的位宽为32比特。
目前,进行矩阵计算的数据通常采用NHW或NWH的方式存储在存储器中。对于NHW,元素以行优先顺序排列在存储器中,对于NWH,元素以列优先顺序排列在存储器中。
若图2所示的数据以NHW方式存储在存储器中,位于同一行的元素在存储器中具有同一个地址,例如第一行元素对应存储器中的地址0,第二行元素对应存储器中的地址1,第三行元素对应存储器中的地址2,第四行元素对应存储器中的地址3。提取图2所示的4行32列元素时需要将加载512B的数据Load指令分解成4个请求(request)才可将4行数据全部提取出来。具体地,提取数据时计算地址0、地址1、地址2和地址3,4个地址用4个请求发送至存储器,每个请求用于提取一行元素,返回的数据也会分成4笔,每笔数据包括一行元素共128B。
同理,若图2所示的数据以NWH方式存储在存储器中,位于同一列的元素在存储器中对应一个地址,则提取图2所示的4行32列元素时需要将加载512B的数据指令分解成32个请求,提取数据时计算32个地址(每一列元素对应一个地址),32个地址用32个请求发送至存储器,每个请求用于提取一列元素,返回的数据也会分成32笔,每笔数据包括一列元素。
由于矩阵计算本身的数据特性,其总是由多行多列元素组成,因此,目前的数据存储方式在进行矩阵计算时,加载数据总是需要计算、发送多个请求才可完成,且每个请求返回的数据量也较小,极大地降低了加载数据时的数据带宽,降低了硬件计算效率。
本公开至少一实施例提供一种数据存储方法、数据处理方法、数据存储器、数据处理器和非瞬时性计算机可读存储介质。
该数据存储方法包括:针对每批矩阵数据,将矩阵数据划分成至少一个数据块,其中,每个数据块包括m行n列元素,其中,m和n为正整数;以数据块为单位,将至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。
不同于传统的NHW或NWH存储方式,该数据存储方法提供了一种新的存储方式,该存储方式以数据块为单位实现对矩阵数据的存储,每个数据块对应一个存储地址,从而可以使用一个存储地址提取整个数据块的数据,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,进而提升了计算单元的利用率。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图3为本公开至少一实施例提供的数据存储方法的示意性流程图。
如图3所示,本公开至少一实施例提供的数据存储方法至少包括步骤S10-S20。
例如,本公开至少一实施例提供的数据存储方法用于存储张量数据。
例如,张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,这里,P、M和N为正整数。
例如,张量数据的维度为3,例如,张量数据可以表示为[P,M,N],如前,张量数据可以包括P个batch,每个batch包括M行N列元素。
例如,张量数据可以是权重(weight),例如张量数据包括卷积层的权重值,或者,张量数据也可以是输入数据(data),例如包括输入卷积层的输入数据。
在本公开至少一个实施例中,张量数据的形状尺寸可以依据需要设置,本公开对此不作具体限制。
如图3所示,在步骤S10,针对每批矩阵数据,将矩阵数据划分成至少一个数据块。
例如,每个数据块包括m行n列元素,其中,m和n为正整数。
在步骤S20,以数据块为单位,将至少一个数据块存入数据存储器中。
例如,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。
例如,数据存储器可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。
例如,数据存储器可以是高带宽内存。本公开对数据存储器的形式、结构、应用环境等不作具体限制,本领域技术人员可以依据需要选择。
对于矩阵数据,由于将矩阵数据划分成了一个个元素排列为m行n列阵列形式的数据块,以数据块为单位存入数据存储器,并且,属于同一个数据块的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。不同于目前以行优先或列优先顺序存储矩阵数据,本公开至少一实施例提供的数据存储方法在存储矩阵数据时颗粒度更大,且不需要每行都对应一个存储地址,使用一个存储地址即可提取整个数据块的数据,这种存储方式更适合张量数据的存储,极大地提升了数据加载时的带宽和效率,降低了地址计算的复杂度,进而提升了计算单元的利用率。
下面结合附图具体说明本公开至少一实施例提供的数据存储方法中步骤S10和步骤S20的过程。
例如,步骤S10可以包括:根据元素的数据位宽,将所述矩阵数据划分成至少一个数据块。
例如,元素的数据位宽不同的矩阵数据划分得到的数据块的数据总量相同,但数据块的尺寸不同。
例如,数据块的数据总量是由数据存储器中单个存储地址对应的存储单元的存储容量决定。以HBM为例,在HBM中单个存储地址对应的存储单元的存储容量为512B,因此,对于不同数据位宽的矩阵数据,都可以以512B为单位划分成多个数据块,每个数据块的数据总量都是512B。
由于元素的数据位宽不同,在数据块的数据总量相同情况下,不同数据位宽的矩阵数据划分得到的数据块的尺寸必然不同。
例如,元素的数据格式不同,但数据位宽相同,例如,INT16和FP16,数据格式不同但位宽都是16比特,则此时不同数据格式划分得到的数据块的尺寸是相同的。
例如,在至少一个实施例中,根据元素的数据位宽,将矩阵数据划分成至少一个数据块,可以包括:根据数据位宽,确定数据位宽对应的数据块模板,其中,数据块模板指示了对该数据位宽的矩阵数据划分得到的数据块的尺寸;按照数据块模板对矩阵数据进行划分,以得到至少一个数据块,其中,至少一个数据块的并集为矩阵数据,至少一个数据块在划分时互不重叠。
例如,可以预先设置针对不同数据位宽的数据块模板,数据块模板可以包括对数据位宽的矩阵数据划分得到的数据块的尺寸的规定,例如,数据块模块可以规定了针对某个数据位宽的矩阵数据,划分得到的数据块的行数m和列数n。
例如,数据块的尺寸可以根据数据位宽、数据存储器中单个存储地址对应的存储单元的存储容量决定。例如,可以根据单个存储单元的存储容量和数据位宽的商确定m和n的乘积,m和n的具体取值可以依据需要设定,只要其乘积为该计算出的商即可。
例如,按照数据块模板划分矩阵数据时,划分得到的所有数据块的并集为该矩阵数据,且这些数据块在划分时互不重叠。这里,数据块互不重叠的意思是,矩阵数据的每个元素仅被划分至一个数据块中,而所有数据块的并集为该矩阵数据,则表示矩阵数据中的每个元素都已划分至某个数据块,不存在未被划分的元素。
例如,在一个示例中,响应于元素的数据位宽为8比特,数据块模板指示数据块的行数m为2×a,列数n为2×b;响应于元素的数据位宽为16比特,数据块模板指示数据块的行数m为2×a,列数n为b;响应于元素的数据位宽为32比特,数据块模板指示数据块的行数m为a,列数n为b,这里,a和b为正整数。
例如,根据数据存储器中单个存储单元的存储容量不同,a和b的具体取值可以不同。下面以数据存储器中单个存储单元的存储容量为512B为例,具体说明在一个示例中数据块的形状和尺寸。
图4为本公开至少一实施例提供的不同数据位宽对应的数据块模板的示意图。
在图4中,数据块模板1为数据位宽为32比特对应的数据块模板,数据块模板2为数据位宽为16比特对应的数据块模板,数据块模板3为数据位宽为8比特对应的数据块模板。
图4中每个小格子代表一个元素,例如,数据块模板1中一个小格子表示一个数据位宽为32比特的元素,数据块模板2中一个小格子表示一个数据位宽为16比特的元素,数据块模板3中一个小格子表示一个数据位宽为8比特的元素。
例如,尽管三个数据块模板对应的数据位宽不同,但数据总量都相同。例如,在图4的示例中,每个数据块的数据总量都是512B。从图4可以看出,不同数据块模板中的数据块的尺寸不同。
如图4所示,对于数据块模板1,其对应数据位宽为32比特的元素,数据块模板1指示对元素的数据位宽为32比特的矩阵数据进行划分得到的单个数据块的行数m为4,列数n为32。
如图4所示,对于数据块模板2,其对应数据位宽为16比特的元素,数据块模板2指示对元素的数据位宽为16比特的矩阵数据进行划分得到的单个数据块的行数m为8,列数n为32。
如图4所示,对于数据块模板3,其对应数据位宽为8比特的元素,数据块模板3指示对元素的数据位宽为8比特的矩阵数据进行划分得到的单个数据块的行数m为8,列数n为64。
在该实施例中,不同数据位宽对应的数据块模板尽可能在某个维度上相似,且行数和列数的关系更加平均,划分更加合理。
当然,需要说明的是,图4所示为一种数据块模板的定义,本领域技术人员也可以设置数据块为其它形状尺寸,本公开对此不作具体限制。
例如,在获得数据块模板后,可以根据数据块模板对矩阵数据进行划分,例如将数据块模板指示的m行n列元素为一个数据块,将矩阵数据划分成多个数据块。
例如,在一个示例中,参考图4所示的数据块模板,若矩阵数据包括16行128列元素,元素的数据位宽为32比特,则可以划分成4个数据块,矩阵数据中的第1行至第8行以及第1列至第64列作为数据块1,矩阵数据中的第9行至第16行以及第1列至第64列作为数据块2,矩阵数据中的第1行至第8行以及第65列至第128列作为数据块3,矩阵数据中的第9行至第16行以及第65列至第128列作为数据块4。
例如,在一些实施例中,矩阵数据的尺寸可能与数据块模板并不恰好是整数倍关系,此时需要对矩阵数据进行边界填充,以将矩阵数据的尺寸扩展至数据块模板的尺寸的整数倍,从而保证划分得到的数据块的并集为矩阵数据,数据块在划分时互不重叠。
例如,在一些实施例中,在将矩阵数据划分成至少一个数据块之前,数据存储方法还包括:响应于M与m不是整数倍关系:在矩阵数据的边界外围填充多个数值为第一值的元素,以将矩阵数据的行数增加至M’,其中, 表示向上取整函数。
例如,在一些实施例中,在将矩阵数据划分成至少一个数据块之前,数据存储方法还包括:响应于N与n不是整数倍关系:在矩阵数据的边界外围填充多个数值为第一值的元素,以将矩阵数据的列数增加至N’,其中, 表示向上取整函数。
之后,再对边界填充后的矩阵数据进行划分,得到多个数据块。
例如,边界外围填充可以是在矩阵数据的左侧、右侧、上侧或下侧填充,填充方向不作具体限制。
例如,在一个示例中,矩阵数据的尺寸为M=120,N=60,数据块的尺寸为m=32,n=16,M与m不是整数倍关系,N与n不是整数倍关系,需要对矩阵数据进行边界填充。
例如,可以在矩阵数据每一列的上侧或下侧外围填充多个数值为第一值的元素,例如,第一值可以是0或其它预先规定好的数值,例如,可以在矩阵数据每一列的上侧边界外围填充8个0,以将矩阵数据的行数增加至
例如,可以在矩阵数据每一行的左侧或右侧填充多个数值为第一值的元素,例如,第一值可以是0或其它预先规定好的数值,例如,可以在矩阵数据每一行的右侧边界外围填充4个0,以将矩阵数据的列数增加至
由此,矩阵数据从120行、60列扩充至128行、64列,扩充后的矩阵数据的尺寸是数据块尺寸的整数倍,可以实现完整的划分。
例如,在本公开至少一个实施例中,步骤S20可以包括:以数据块为单位,将至少一个数据块按行优先顺序或列优先顺序依次存入数据存储器中;以及针对每个数据块:确定数据块对应的存储地址;将数据块中的元素按预设存储顺序依次存入存储地址对应的存储空间中。
在存储矩阵数据时,是以数据块为单位进行存储。
存储多个数据块时,多个数据块的存储顺序可以是行优先顺序(row-majororder)或者是列优先顺序(column-major order)。
例如,在本公开至少一实施例中,行方向指横向,列方向指竖向。此外,在本公开中以左上角为原点描述矩阵数据或数据块中的相关位置信息,例如第一行和第一列位置可以参考图6所示中的示例。
例如,在本公开至少一实施例中,按照行优先顺序将至少一个数据块依次存入数据存储器中时,矩阵数据中在行方向上相邻的两个数据块在数据存储器中的存储地址连续。
例如,在本公开至少一实施例中,行优先顺序指示将至少一个数据块先按行方向、再按列方向依次存入数据存储器。例如,至少一个数据块排列为G行Q列形式,G行中的第i行里最后一个存入数据存储器的数据块与第i+1行里第一个存入数据存储器的数据块的存储地址连续。这里,G、Q和i均为正整数,i小于等于G。
图5A为本公开至少一实施例提供的矩阵数据与数据块的关系示意图。
如图5A所示,矩阵数据通过步骤S10可以划分成多个数据块,分别是图5A中的数据块B00、数据块B01、...、数据块B0x、数据块B10、数据块B11、...数据块B1x、数据块B20、数据块B21、...数据块B2x、...、数据块By0、数据块By1、...数据块Byx。
具体划分过程可以参考前述实施例的相关描述,这里不再赘述。
例如,如图5A所示,多个数据块可以排列成G行Q列的形式,G=x+1,Q=y+1。
例如,矩阵数据中在行方向上相邻的两个数据块,例如数据块B00和数据块B01,在数据存储器中的存储地址连续。一行中的连续数据块在数据存储器中彼此相邻。
图5B为本公开至少一实施例提供的行优先顺序的示意图。
例如,按照行优先顺序可以将图5A所示的多个数据块排列成图5B所示的顺序。例如,图5A中的多个数据块先按行方向,再按列方向排列,得到图5B所示的排列顺序。之后,将多个数据块按照图5B所示的顺序依次存入数据存储器,并且,这些数据块的存储地址连续。例如,除位于同一行的连续数据块在数据存储器中的存储地址连续以外,G行中的每行里最后一个存入数据存储器的数据块(例如数据块B0x)的存储地址与下一行里第一个存入数据存储器的数据块(例如数据块B10)的存储地址也连续。
例如,在本公开至少一实施例中,按照列优先顺序将至少一个数据块依次存入数据存储器中时,矩阵数据中在列方向上相邻的两个数据块在数据存储器中的存储地址连续。
例如,在本公开至少一实施例中,列优先顺序指示将至少一个数据块先按列方向、再按行方向依次存入数据存储器。例如,至少一个数据块排列为G行Q列形式,Q列中的第j列里最后一个存入数据存储器的数据块与第j+1列里第一个存入数据存储器的数据块的存储地址连续,这里,P、Q和j均为正整数。
5C为本公开至少一实施例提供的列优先顺序示意图。
例如,矩阵数据中在列方向上相邻的两个数据块,例如数据块B00和数据块B10,在数据存储器中的存储地址连续。一列中的连续数据块在数据存储器中彼此相邻。
例如,按照列优先顺序可以将图5A中的多个数据块排列成图5C所示的顺序。例如,在图5C中,图5A中的多个数据块先按列方向,再按行方向排列。之后,将多个数据块按照图5C所示的顺序依次存入数据存储器,并且,这些数据块的存储地址连续。例如,除位于同一列的连续数据块在数据存储器中的存储地址连续以外,Q列中的每列里最后一个存入数据存储器的数据块(例如数据块By0)的存储地址与下一列里第一个存入数据存储器的数据块(例如数据块B01)的存储地址也连续。
在本公开至少一实施例中,存储地址连续表示两个存储地址之差为数据存储器中单个存储地址对应的存储单元的存储容量,两个数据块在数据存储器中彼此相邻。
在上述实施例中,设置存储地址连续,则数据加载指令只需要提供一个起始地址,例如数据块B00的存储地址即可,提取各个数据块的数据的请求可以直接依据数据块B00的存储地址计算得到,无需传输所有数据块的存储地址,减少需要传输的数据量,提高数据加载效率。而且,在数据块按照行优先顺序或列优先顺序存入数据存储器,且数据块的存储地址按照行优先顺序或列优先顺序连续的时候,返回的数据具有一定规律性,可以直接按照行优先顺序或列优先顺序指定的顺序将返回的数据拼接成矩阵数据,提高数据加载效率。进一步的,通常在数据加载时可以预取要加载的存储地址附近的一些存储地址的数据,如果存储地址连续,在数据加载时能够提高数据命中率,提高数据读取性能。
当然,数据块的存储顺序也可以依据设置为其它形式,数据块的存储地址也可以设置为不连续,或者,可以设置行方向上相邻的数据块的存储地址连续,某行里最后一个存入数据存储器的数据块与下一行里第一个存入数据存储器的数据块的存储地址不连续等,本公开对此不作具体限制。
针对单个数据块,本公开至少一实施例选择按预设存储顺序将数据块中的元素存入数据存储器,且数据块中相邻的元素在数据存储器中也相邻,单个数据块中的数据在数据存储器中是连续的。
例如,预设存储顺序可以根据需要设置。例如,在本公开至少一实施例中,预设存储顺序可以由根据元素的数据位宽确定的数据块模板指示。当然,本公开不限于此,还可以根据需要设置其他的预设存储顺序。
例如,数据块模板还可以规定了数据块的内部层次结构,以及数据块内部元素的预设存储顺序。
例如,数据块模板指示数据块包括多个数据子块,多个数据子块通过对数据块进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素。
例如,预设存储顺序指示按照列方向将多个数据子块依次存入数据存储器,每个数据子块中的多个数据单元按照行方向存入数据存储器,每个数据单元中的至少一个元素按照数据块模板指示的预设元素顺序依次存入数据存储器。
例如,响应于数据位宽为16比特,数据块模板指示数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括n个数据单元,每个数据单元包括数据子块中位于同一列的2个元素。
例如,此时预设存储顺序指示按照列方向将a个数据子块依次存入数据存储器,每个数据子块中的n个数据单元按照行方向依次存入数据存储器,每个数据单元中的2个元素按照列方向依次存入数据存储器。a为正整数,m=2×a。
例如,响应于数据位宽为8比特,数据块模板指示数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括b个数据单元,每个数据单元包括数据子块中相邻的两行两列元素。
例如,此时预设存储顺序指示按照列方向将a个数据子块依次存入数据存储器,每个数据子块中的b个数据单元按照行方向依次存入数据存储器,每个数据单元中的4个元素按照行优先顺序或列优先顺序依次存入数据存储器。a和b为正整数,m=2×a,n=2×b。
例如,4个元素按照行优先顺序依次存入数据存储器包括4个元素先按照行方向再按照列方向依次存入数据存储器。例如,4个元素按照列优先顺序依次存入数据存储器包括4个元素先按照列方向再按照行方向依次存入数据存储器。
例如,假设4个元素在行方向和列方向的坐标分别是:元素1(row=0,col=0),元素2(row=0,col=1),元素3(row=1,col=0),元素4(row=1,col=1)。此时,4个元素按照行优先顺序依次存入数据存储器时按照元素1->元素2->元素3->元素4的顺序依次存入数据存储器。4个元素按照列优先顺序依次存入数据存储器时按照元素1->元素3->元素2->元素4的顺序依次存入数据存储器。
响应于数据位宽为32比特,数据块模板指示所述数据块包括m个数据子块,每个数据子块由1行n列元素组成,每个数据子块包括n个数据单元,每个数据单元包括1个元素。
例如,此时预设存储顺序指示按照列方向将m个数据子块依次存入数据存储器,按照行方向将每个数据子块中的n个数据单元(也即n个元素)依次存入数据存储器。
图6为本公开至少一实施例提供的数据块存储顺序示意图。下面结合图6具体说明本公开至少一实施例提供的数据块中元素的预设存储顺序。
在图6中,数据块模板1为数据位宽为32比特对应的数据块模板,数据块模板2为数据位宽为16比特对应的数据块模板,数据块模板3为数据位宽为8比特对应的数据块模板。
图6中每个小格子代表一个元素,例如,数据块模板1中一个小格子表示一个数据位宽为32比特的元素,数据块模板2中一个小格子表示一个数据位宽为16比特的元素,数据块模板3中一个小格子表示一个数据位宽为8比特的元素。
例如,如图6所示,对于数据块模板1,其包括4个数据子块,例如如图6所示的数据子块1、数据子块2、数据子块3和数据子块4所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块由一行元素组成。例如,对于数据块模板1,一行32个元素作为一个数据子块,一个元素作为一个数据单元。
例如,如图6所示,对于数据块模板2,其包括4个数据子块,例如如图6所示的数据子块5、数据子块6、数据子块7和数据子块8所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块由相邻的两行元素组成。例如,对于数据块模板2,相邻的两行元素作为一个数据子块,例如数据子块5包括数据块中的第一行和第二行中所有元素,数据子块6包括数据块中的第三行和第四行中所有元素。例如,每个数据子块包括n个数据单元,每个数据单元包括数据子块中位于同一列的2个元素,例如,对于数据子块5,第一列中两个元素作为一个数据单元,第二列中两个元素作为一个数据单元,以此类推,数据子块5中共有32个数据单元。
例如,如图6所示,对于数据块模板3,其也包括4个数据子块,例如如图6所示的数据子块9、数据子块10、数据子块11和数据子块12所示。例如,可以将一个数据块平均分成4份得到4个数据子块,每个数据子块由相邻的两行元素组成。例如,对于数据块模板3,相邻的两行元素作为一个数据子块,例如数据子块9包括数据块中的第一行元素和第二行元素,数据子块10包括数据块中的第三行元素和第四行元素。例如,每个数据子块包括n/2个数据单元,每个数据单元包括数据子块中相邻的两行两列元素,例如,对于数据子块9,第一行第一列、第一行第二列、第二行第一列以及第二行第二列这4个元素作为一个数据单元,以此类推。
例如,如图6所示,数据块模板1指示数据块包括4个数据子块,每个数据子块由1行32列元素组成,每个数据单元包括1个元素,也即将1个元素看作一个数据单元。例如,可以将4个数据子块按照数据子块1、数据子块2、数据子块3、数据子块4的顺序依次存入数据存储器;对于一个数据子块,按行方向依次将32个元素存入数据存储器。
因此,对于数据位宽为32比特的数据块来说,预设存储顺序(如图6中的数据块模板1中箭头所示)可以是:row(0)col(0)->row(0)col(1)->...->row(0)col(31)->row(1)col(0)->...->row(1)col(31)->row(2)col(0)->...->row(2)col(31)->row(3)col(0)->...->row(3)col(31),这里,row(0)表示数据块中的第1行,row(1)表示数据块中的第2行,row(2)表示数据块中的第3行,row(3)表示数据块中的第4行,col(0)表示数据块中的第1列,col(1)表示数据块中的第2列,...,col(31)表示数据块中的第32列。
例如,如图6所示,对于图6中的数据块模板2,a=4,b=32,数据块模板2指示数据块包括4个数据子块,每个数据子块由2行32列元素组成,每个数据单元包括数据子块中位于同一列的2个元素。例如,可以将4个数据子块按照数据子块5、数据子块6、数据子块7、数据子块8的顺序依次存入数据存储器;对于一个数据子块,按行方向依次将32个数据单元存入数据存储器,对于单个数据单元,按列方向将两个元素依次存入数据存储器。
因此,对于数据位宽为16比特的数据块来说,预设存储顺序(如图6中的数据块模板2中箭头所示)可以是:row(0)col(0)->row(1)col(0)->row(0)col(1)->row(1)col(1)->...->row(0)col(31)->row(1)col(31)->row(2)col(0)->row(3)col(0)->row(2)col(1)->row(3)col(1)->...->ro w(2)col(31)->row(3)col(31)->row(4)col(0)->row(5)col(0)->row(4)col(1)->row(5)col(1)->...->row(4)col(31)->row(5)col(31)->row(6)col(0)->row(7)col(0)->row(6)col(1)->row(7)col(1)->...->row(6)col(31)->row(7)col(31)。
例如,如图6所示,对于图6中的数据块模板3,a=4,b=32,数据块模板3指示数据块包括4个数据子块,每个数据子块由2行64列元素组成,每个数据单元包括数据子块中相邻的两行两列的4个元素。例如,可以将4个数据子块按照数据子块9、数据子块10、数据子块11、数据子块12的顺序依次存入数据存储器;对于一个数据子块,按行方向依次将32个数据单元存入数据存储器,对于单个数据单元,按列优先顺序将4个元素存入数据存储器。
因此,对于数据位宽为8比特的数据块来说,预设存储顺序(如图6中的数据块模板3中箭头所示)可以是:row(0)col(0)->row(1)col(0)->row(0)col(1)->row(1)col(1)->...->row(0)col(63)->row(1)col(63)->row(2)col(0)->row(3)col(0)->row(2)col(1)->row(3)col(1)->...->ro w(2)col(63)->row(3)col(63)->row(4)col(0)->row(5)col(0)->row(4)col(1)->row(5)col(1)->...->row(4)col(63)->row(5)col(63)->row(6)col(0)->row(7)col(0)->row(6)col(1)->row(7)col(1)->...->row(6)col(63)->row(7)col(63)。
在图6所示的实施例中提供了一种具体的预设存储顺序,但本公开不限于此。数据子块的分割方式、数据子块内的预设存储顺序以及预设元素顺序的设置可以依据需要变化和调整,在此不再赘述。
例如,若P大于1,则对于每批矩阵数据,都可以使用上述步骤S10-S20将一批矩阵数据存入数据存储器。例如,对P批矩阵数据依次执行上述步骤S10和S20,直到将P批矩阵数据都存入数据存储器。
例如,不同批矩阵数据在数据存储器中可以连续存储,或者也可以不连续存储。例如,第p批矩阵数据的最后一个存入数据存储器的存储块的存储地址例如是addr0,第p+1批矩阵数据的第一个存入数据存储器的存储块的存储地址例如是addr1,p为正整数且小于P,addr0可以和addr1连续,例如addr1=addr0+数据块大小,或者,addr0也可以和addr1不连续,本公开对此不作具体限制。
本公开至少一实施例提供了一种数据存储方法,张量数据能够以数据块为单位存入数据存储器,且在数据存储器中,单个数据块中的元素连续排布,在数据加载时可一次性将整个数据块的数据读取出来,相比于传统的NWH或NHW的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
本公开至少一实施例还提供一种数据处理方法。图7为本公开至少一实施例提供的数据处理方法的示意性流程图。
例如,如图7所示,本公开实施例提供的数据处理方法包括步骤S30至S40。
在步骤S30,接收数据加载指令。
例如,数据加载指令包括待加载的张量数据的存储地址,张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数。
关于张量数据的相关描述可以参考前述数据存储方法中的相关内容,重复之处不再赘述。
在步骤S40,解析数据加载指令之后执行数据加载指令。
例如,本公开至少一实施例提供的数据处理方法可以应用于图9所示的数据处理器200。
例如,在本公开至少一实施例提供的数据处理方法中,提供数据加载指令,数据加载指令包括待加载的张量数据的存储地址。例如,数据处理器接收数据加载指令后,解析数据加载指令,例如对数据加载指令进行译码,产生微指令并将微指令发送给指令分配单元;指令分配单元根据微指令类别,将其发送给相应的调度队列;响应于微指令,待加载的张量数据的存储地址(全部或所需的部分)被准备好之后,执行数据加载指令操作。
图8为本公开至少一实施例提供的数据处理方法的示意性流程图。
例如,如图8所示,本公开实施例提供的数据处理方法中的步骤S40里的执行数据加载指令可以包括步骤S401至S402。
在步骤S401,确定张量数据对应的各个数据块的存储地址。
例如,每个数据块包括m行n列元素,m和n为正整数。
例如,张量数据对应的各个数据块包括对张量数据中每批矩阵数据划分得到的数据块,例如,每批矩阵数据在存入数据存储器时划分成至少一个数据块,具体划分过程可以参考前述数据存储方法中步骤S10的相关内容,这里不再赘述。
例如,张量数据对应的各个数据块的存储地址可以基于待加载的张量数据的存储地址确定。
例如,在一些实施例中,待加载的张量数据的存储地址包括了各个数据块的存储地址。
例如,在另一些实施例中,各个存储块的存储地址之间存在一些预定关系,例如,一个矩阵数据中的数据块的存储地址按行优先顺序或列优先顺序连续,由此,待加载的张量数据的存储地址提供了各个矩阵数据中第一个数据块的存储地址,其它数据块的存储地址可以依据该存储地址计算得到。
例如,在另一些实施例中,一个矩阵数据中的数据块的存储地址按行优先顺序或列优先顺序连续,不同批矩阵数据的存储地址之间也存在一些预定关系,例如当前矩阵数据中最后一个存入数据存储器的数据块的存储地址和下一个存入数据存储器的矩阵数据中第一个存入数据存储器的数据块的存储地址连续,由此,待加载的张量数据的存储地址提供了第一个存入数据存储器的矩阵数据中第一个数据块的存储地址,张量数据中所有其它数据块的存储地址可以依据该存储地址计算得到。
例如,在一些实施例中,数据加载指令还可以包括待加载的数据块的数量,或者,待加载的张量数据的尺寸,根据待加载的张量数据的尺寸和元素的数据位宽可以确定数据块的数量,由此可以确定需要加载多少个数据块以及计算多少个数据块的存储地址。
例如,属于同一个数据块中的元素在数据存储器中对应同一个存储地址。在存储张量数据时,以数据块为单位进行存储,因此一个数据块中的元素在数据存储器中对应同一个存储地址。
在步骤S402,以数据块为单位,利用各个数据块的存储地址从数据存储器中提取数据,以得到张量数据。
例如,同一个数据块的元素在数据存储器中连续存储。
例如,数据块按行优先顺序或列优先顺序依次存入数据存储器,在提取数据时,提取出的数据块也按照行优先顺序或列优先顺序组合成一个矩阵数据,多批矩阵数据进而组合成张量数据。
关于数据块按照行优先顺序和列优先顺序存储的相关内容可以参考前述数据存储方法中步骤S20的相关描述,这里不再赘述。
例如,针对单个数据块,结合数据块中的元素的预设存储顺序对提取出的数据进行重排列,复原至原始矩阵数据中单个数据块的状态。
例如,预设存储顺序由根据元素的数据位宽确定的数据块模板指示。
关于预设存储顺序可以参考前述数据存储方法中步骤S20的相关描述,这里不再赘述。
在本公开至少一实施例提供的数据处理方法中,数据加载时可以以数据块为单位一次性将整个数据块的数据读取出来,相比于传统的NWH或NHW的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
与上述数据存储方法相对应,本公开至少一实施例还提供一种数据存储器。
数据存储器用于存储张量数据。例如,张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数。
关于张量数据的相关描述可以参考前述数据存储方法中的相关内容,重复之处不再赘述。
数据存储器配置为以数据块为单位存储张量数据,其中,每个数据块包括m行n列元素,同一个数据块中的元素在数据存储器中连续存储,且属于同一个数据块的元素在数据存储器中对应同一个存储地址。
例如,数据块通过对各批矩阵数据进行划分得到。
例如,根据元素的数据位宽,将矩阵数据划分成至少一个数据块,数据位宽不同的矩阵数据划分得到的数据块的尺寸不同,但数据块的数据总量相同。
例如,在划分时,根据数据位宽,确定数据位宽对应的数据块模板,数据块模板指示了对该数据位宽的矩阵数据划分得到的数据块的尺寸;之后,按照数据块模板对矩阵数据进行划分,以得到至少一个数据块。例如,对一个矩阵数据进行划分得到的至少一个数据块的并集为该矩阵数据,该至少一个数据块在划分时互不重叠。
关于数据块划分的具体描述可以参考前述数据存储方法中的相关描述,重复之处不再赘述。
例如,数据存储器执行以数据块为单位存储矩阵数据时,包括执行以下操作:以数据块为单位,将至少一个数据块按行优先顺序或列优先顺序依次存入数据存储器中;以及针对每个数据块:确定数据块对应的存储地址;将数据块中的元素按预设存储顺序依次存入存储地址对应的存储空间中。
关于行优先顺序和列优先顺序的具体描述可以参考前述数据存储方法中的相关描述,重复之处不再赘述。
针对单个数据块,单个数据块中的元素在数据存储器中连续存储,存储时遵照的预设存储顺序由根据元素的数据位宽确定的数据块模板指示。
关于预设存储顺序的相关描述可以参考前述数据存储方法中的相关描述,重复之处不再赘述。
数据存储器可以包括内存、缓存等能够存储数据功能的任意结构的存储装置。本公开对数据存储器的硬件结构、性能、原理不作具体限制,只要能实现数据存储功能即可。
例如,在本公开至少一实施例提供的数据存储器中,张量数据能够以数据块为单位存入数据存储器,且在数据存储器中,单个数据块中的元素连续排布,从而在数据加载时可一次性将整个数据块的数据读取出来,相比于传统的NWH或NHW的存储方式,数据加载效率提升了数倍,提高了数据加载带宽,提高了数据存储器的读取性能,进而提升了计算单元的利用率;并且,数据块的存储地址连续,降低了地址计算的复杂度,提高了数据读取性能和加载效率。
图9为本公开至少一实施例提供的数据处理器的示意性框图。
如图9所示,该数据处理器200包括如本公开任一实施例所述的数据存储器100。关于数据存储器100的结构、功能、技术效果参考如前所述的数据处理器的实施例中相关描述,这里不再赘述。应当注意,图9所示的数据处理器200的组件只是示例性的,而非限制性的,根据实际应用需要,数据处理器200还可以具有其他组件。
例如,数据处理器可以配置为执行本公开至少一实施例提供的数据处理方法。关于数据处理方法的相关内容、技术效果可以参考如前所述的数据处理方法的实施例中相关描述,这里不再赘述。
例如,数据处理器200和数据存储器100之间可以直接或间接地互相通信。
例如,数据处理器200和数据存储器100可以通过网络进行通信。网络可以包括无线网络、有线网络、和/或无线网络和有线网络的任意组合。数据处理器200和数据存储器100之间也可以通过系统总线实现相互通信,本公开对此不作限制。
例如,数据处理器200根据实际需要,可以实现为GPU、CPU(中央处理器)、NPU(神经网络处理器)、DSP(数字信号处理器)等,本公开对此不作限制。
例如,在一种实施例中,数据处理器200可以为GPU,数据存储器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批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,
所述数据存储方法包括:
针对每批矩阵数据,将所述矩阵数据划分成至少一个数据块,其中,每个数据块包括m行n列元素,其中,m和n为正整数;
以数据块为单位,将所述至少一个数据块存入数据存储器中,其中,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述数据存储器中对应同一个存储地址。
2.根据权利要求1所述的数据存储方法,其中,将所述矩阵数据划分成至少一个数据块,包括:
根据元素的数据位宽,将所述矩阵数据划分成至少一个数据块,其中,元素的数据位宽不同的矩阵数据划分得到的数据块的尺寸不同但数据总量相同。
3.根据权利要求2所述的数据存储方法,其中,根据元素的数据位宽,将所述矩阵数据划分成至少一个数据块,包括:
根据所述数据位宽,确定所述数据位宽对应的数据块模板,其中,所述数据块模板指示了对所述数据位宽的矩阵数据划分得到的数据块的尺寸;
按照所述数据块模板对所述矩阵数据进行划分,以得到所述至少一个数据块,其中,所述至少一个数据块的并集为所述矩阵数据,所述至少一个数据块在划分时互不重叠。
4.根据权利要求3所述的数据存储方法,其中,响应于所述数据位宽为8比特,所述数据块模板指示所述数据块的行数m为2×a,列数n为2×b,
响应于所述数据位宽为16比特,所述数据块模板指示所述数据块的行数m为2×a,列数n为b,
响应于所述数据位宽为32比特,所述数据块模板指示所述数据块的行数m为a,列数n为b,
其中,a和b为正整数。
5.根据权利要求1所述的数据存储方法,其中,以数据块为单位,将所述至少一个数据块存入数据存储器中,包括:
以数据块为单位,将所述至少一个数据块按行优先顺序或列优先顺序依次存入所述数据存储器中;以及
针对每个数据块:
确定所述数据块对应的存储地址;
将所述数据块中的元素按预设存储顺序依次存入所述存储地址对应的存储空间中。
6.根据权利要求5所述的数据存储方法,其中,所述预设存储顺序由根据元素的数据位宽确定的数据块模板指示。
7.根据权利要求6所述的数据存储方法,其中,所述数据块模板指示每个数据块包括多个数据子块,所述多个数据子块通过对所述数据块进行平均切分得到,每个数据子块包括多个数据单元,每个数据单元包括至少一个元素,
所述预设存储顺序指示按照列方向将所述多个数据子块依次存入所述数据存储器,每个数据子块中的多个数据单元按照行方向依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器。
8.根据权利要求7所述的数据存储方法,其中,响应于所述数据位宽为16比特,所述数据块模板指示每个数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括n个数据单元,每个数据单元包括所述数据子块中位于同一列的2个元素,
每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
按照所述列方向将每个数据单元中的2个元素依次存入所述数据存储器,
其中,a为正整数,m=2×a。
9.根据权利要求7所述的数据存储方法,其中,响应于所述数据位宽为8比特,所述数据块模板指示每个数据块包括a个数据子块,每个数据子块由相邻的2行n列元素组成,每个数据子块包括b个数据单元,每个数据单元包括所述数据子块中相邻的两行两列元素,
每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
将每个数据单元中的4个元素按照行优先顺序或列优先顺序依次存入所述数据存储器,
其中,a和b为正整数,m=2×a,n=2×b。
10.根据权利要求7所述的数据存储方法,其中,响应于所述数据位宽为32比特,所述数据块模板指示每个数据块包括m个数据子块,每个数据子块由1行n列元素组成,每个数据子块包括n个数据单元,每个数据单元包括1个元素,
每个数据子块中的多个数据单元按照行方向依次存入所述数据存储器,每个数据单元中的至少一个元素按照所述数据块模板指示的预设元素顺序依次存入所述数据存储器,包括:
按照所述行方向将每个数据子块中的n个元素依次存入所述数据存储器。
11.根据权利要求5所述的数据存储方法,其中,响应于按照行优先顺序将所述至少一个数据块依次存入所述数据存储器中,所述矩阵数据中在行方向上相邻的两个数据块在所述数据存储器中的存储地址连续。
12.根据权利要求11所述的数据存储方法,其中,按照行优先顺序将所述至少一个数据块依次存入所述数据存储器中包括将所述至少一个数据块先按所述行方向、再按列方向依次存入所述数据存储器,
其中,所述至少一个数据块排列为G行Q列形式,所述G行中的第i行里最后一个存入所述数据存储器的数据块与第i+1行里第一个存入所述数据存储器的数据块的存储地址连续,其中,G、Q和i均为正整数,i小于等于G。
13.根据权利要求5所述的数据存储方法,其中,响应于按照列优先顺序将所述至少一个数据块依次存入所述数据存储器中,所述矩阵数据中在列方向上相邻的两个数据块在所述数据存储器中的存储地址连续。
14.根据权利要求13所述的数据存储方法,其中,按照列优先顺序将所述至少一个数据块依次存入所述数据存储器中包括将所述至少一个数据块先按所述列方向、再按行方向依次存入所述数据存储器,
其中,所述至少一个数据块排列为G行Q列形式,所述Q列中的第j列里最后一个存入所述数据存储器的数据块与第j+1列里第一个存入所述数据存储器的数据块的存储地址连续,其中,G、Q和j均为正整数。
15.根据权利要求1-14任一项所述的数据存储方法,在将所述矩阵数据划分成至少一个数据块之前,所述数据存储方法还包括:
响应于M与m不是整数倍关系:
在所述矩阵数据的边界外围填充多个数值为所述第一值的元素,以将所述矩阵数据的行数增加至M’,其中,
响应于N与n不是整数倍关系:
在所述矩阵数据的边界外围填充多个数值为所述第一值的元素,以将所述矩阵数据的列数增加至N’,其中,
其中,表示向上取整函数,M’和N’为正整数。
16.一种数据处理方法,包括:
接收数据加载指令,其中,所述数据加载指令包括待加载的张量数据的存储地址,所述张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,
解析所述数据加载指令之后执行所述数据加载指令,
其中,执行所述数据加载指令,包括:
确定所述张量数据对应的各个数据块的存储地址,其中,每个数据块包括m行n列元素,所述各个数据块通过对所述P批矩阵数据进行划分得到,属于同一个数据块中的元素在数据存储器中对应同一个存储地址,m和n为正整数;
以数据块为单位,利用各个数据块的存储地址从所述数据存储器中提取数据,以得到所述张量数据,其中,同一个数据块的元素在所述数据存储器中连续存储。
17.一种数据存储器,用于存储张量数据,其中,所述张量数据包括P批矩阵数据,每批矩阵数据包括M行N列元素,P、M和N为正整数,
所述数据存储器配置为以数据块为单位存储所述张量数据,其中,每个数据块包括m行n列元素,m和n为正整数,各个数据块通过对所述P批矩阵数据进行划分得到,同一个数据块中的元素在所述数据存储器中连续存储,且属于同一个数据块的元素在所述存储器中对应同一个存储地址。
18.根据权利要求16所述的数据存储器,其中,每个数据块的数据总量相同,且由所述数据存储器中单个存储地址对应的存储单元的存储容量决定。
19.一种数据处理器,包括如权利要求17或18所述的数据存储器。
20.一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,
所述计算机可执行指令被处理器执行时实现根据权利要求1-15任一项所述的数据存储方法或权利要求16所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410256838.0A CN118132456A (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410256838.0A CN118132456A (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118132456A true CN118132456A (zh) | 2024-06-04 |
Family
ID=91232102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410256838.0A Pending CN118132456A (zh) | 2024-03-06 | 2024-03-06 | 数据存储方法、数据处理方法、数据存储器、数据处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118132456A (zh) |
-
2024
- 2024-03-06 CN CN202410256838.0A patent/CN118132456A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11580377B2 (en) | Method and device for optimizing neural network | |
US11449576B2 (en) | Convolution operation processing method and related product | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
CN109213962B (zh) | 运算加速器 | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
US9235769B2 (en) | Parallel object detection method for heterogeneous multithreaded microarchitectures | |
US8751556B2 (en) | Processor for large graph algorithm computations and matrix operations | |
US20210182025A1 (en) | Accelerating 2d convolutional layer mapping on a dot product architecture | |
US20120221788A1 (en) | Multi-dimensional array manipulation | |
US20230026006A1 (en) | Convolution computation engine, artificial intelligence chip, and data processing method | |
CN112506567B (zh) | 数据读取方法和数据读取电路 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
CN110727911B (zh) | 一种矩阵的运算方法及装置、存储介质、终端 | |
US11550586B2 (en) | Method and tensor traversal engine for strided memory access during execution of neural networks | |
CN111158874A (zh) | 数据处理方法和装置、电子设备及存储介质 | |
CN114491402A (zh) | 一种稀疏矩阵向量乘访存优化的计算方法 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
CN115758054B (zh) | 一种卷积计算方法、数据处理方法、芯片及电子设备 | |
US20240004702A1 (en) | Thread construction method and device | |
CN111767243A (zh) | 数据处理方法、相关设备及计算机可读介质 | |
CN118132456A (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 | |
CN117851742B (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 | |
US20220188380A1 (en) | Data processing method and apparatus applied to graphics processing unit, and electronic device | |
CN115480919A (zh) | 卷积优化运算方法、装置、计算机设备及存储介质 | |
US20220100814A1 (en) | Graphics processor and acceleration method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |