数据并行写入、读取方法、装置及系统与流程

文档序号:16246063发布日期:2018-12-11 23:35阅读:227来源:国知局
数据并行写入、读取方法、装置及系统与流程

本发明属于数据存取技术领域,更具体地,涉及数据并行写入、读取方法、装置及系统。

背景技术

近年来,人工智能在各个领域得到广泛的应用。人工智能算法通常都是数据量很大的算法,因此为了加快人工智能算法的执行速度,不仅需要优化运算系统,还需要优化存储系统。

gpu是被大量使用的人工智能算法的硬件平台,gpu的存储有着特定的针对矩阵计算的多级缓存结构来优化存储系统。在嵌入式应用领域,由于功耗等的约束,通常使用定制化的可编程芯片而不是gpu来实现人工智能算法。在这些嵌入式芯片中有一类是向量计算机芯片,也很适合进行人工智能算法加速,这类计算机芯片通常使用向量存储器作为存储系统。

但是,对于gpu来说,尺寸、功耗都很大。因此,在嵌入式应用领域的使用受到很大的限制。人工智能算法需要进行大量矩阵运算,因此处理的数据常常是多维的数据块,包括一维和多维。不同的算法需要从一个或多个维度对数据进行并行连续读写。而向量存储器每次只能固定地存取一个特定长度的向量数据,数据存取的灵活度不足,无法满足复杂多变的人工智能算法对数据存取的需求。



技术实现要素:

为克服上述现有的数据存取系统尺寸和功耗大,且数据存取不灵活的问题或者至少部分地解决上述问题,本发明提供一种数据并行写入、读取方法、装置及系统。

根据本发明的第一方面,提供一种数据并行写入方法,包括:

将待写入数据向量的写入数据索引变换为一维写入地址;其中,所述待写入数据向量为待写入的多维数据矩阵中的一个一维或多维向量,所述写入数据索引为所述待写入数据向量的所有元素中第一个待写入元素在所述待写入的多维数据矩阵中的索引待写入的多维数据矩阵中的索引;

根据所述一维写入地址和预设写入数据个数,获取所述待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量;其中,所述写入数据使能向量中的每个元素用于表示所述待写入数据向量中相应位置的元素是否写入;所述第一存储索引向量为所述待写入数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;所述第一存储地址向量为所述待写入数据向量中各元素对应的各存储子单元中的地址所构成的向量;

根据所述第一存储索引向量,对所述写入数据使能向量、所述第一存储地址向量和所述待写入数据向量进行重排序,根据重排序后的所述写入数据使能向量和所述第一存储地址向量将重排序后的所述待写入数据向量存入所述并行存储器。

根据本发明第二方面提供一种数据并行读取方法,包括:

将待读取数据向量的读取数据索引变换为一维读取地址;其中,所述待读取数据向量为待读取的多维数据矩阵中的一个一维或多维向量;所述读取数据索引为所述待读取数据向量的所有元素中第一个待读取元素在所述待读取的多维数据矩阵中的索引;

根据所述一维读取地址和预设读取数据个数,获取所述待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量;其中,所述读取数据使能向量中的每个元素用于表示所述待读取数据向量中相应位置的元素是否读取;所述第二存储索引向量为所述待读取数据向量中各元素在并行存储器中各存储子单元的索引所构成的向量;所述第二存储地址向量为所述待读取数据向量中各元素在各所述存储子单元中的地址所构成的向量;

根据所述第二存储索引向量,对所述读取数据使能向量和所述第二存储地址向量进行重排序,根据重排序后的所述读取数据使能向量和所述第二存储地址向量从所述并行存储器中读取存储数据向量,根据所述第二存储索引向量对所述存储数据向量进行重排序,获取所述待读取数据向量。

根据本发明第三方面提供一种数据并行写入装置,包括:

第一变换模块,用于将待写入数据向量的写入数据索引变换为一维写入地址;其中,所述待写入数据向量为待写入的多维数据矩阵中的一个一维或多维向量,所述写入数据索引为所述待写入数据向量的所有元素中第一个待写入元素在所述待写入的多维数据矩阵中的索引待写入的多维数据矩阵中的索引;

第一获取模块,用于根据所述一维写入地址和预设写入数据个数,获取所述待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量;其中,所述写入数据使能向量中的每个元素用于表示所述待写入数据向量中相应位置的元素是否写入;所述第一存储索引向量为所述待写入数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;所述第一存储地址向量为所述待写入数据向量中各元素对应的各存储子单元中的地址所构成的向量;

存入模块,用于根据所述第一存储索引向量,对所述写入数据使能向量、所述第一存储地址向量和所述待写入数据向量进行重排序,根据重排序后的所述写入数据使能向量和所述第一存储地址向量将重排序后的所述待写入数据向量存入所述并行存储器。

根据本发明第四方面提供一种数据并行读取装置,包括:

第二变换模块,用于将待读取数据向量的读取数据索引变换为一维读取地址;其中,所述待读取数据向量为待读取的多维数据矩阵中的一个一维或多维向量,所述读取数据索引为所述待读取数据向量的所有元素中第一个待读取元素在所述待读取的多维数据矩阵中的索引;

第二获取模块,用于根据所述一维读取地址和预设读取数据个数,获取所述待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量;其中,所述读取数据使能向量中的每个元素用于表示所述待读取数据向量中相应位置的元素是否读取;所述第二存储索引向量为所述待读取数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;所述第二存储地址向量为所述待读取数据向量中各元素对应的各存储子单元中的地址所构成的向量;

读取模块,用于根据所述第二存储索引向量,对所述读取数据使能向量和所述第二存储地址向量进行重排序,根据重排序后的所述读取数据使能向量和所述第二存储地址向量从所述并行存储器读取存储数据向量,根据所述第二存储索引向量对所述存储数据向量进行重排序,获取所述待读取数据向量。

根据本发明第五方面提供一种数据并行读写系统,包括:

并行存储器,以及上述数据并行写入装置和上述数据并行读取装置。

本发明提供一种数据并行写入、读取方法、装置及系统,该方法通过将待写入数据向量的写入数据索引变换为一维写入地址,根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量,根据所述第一存储索引向量,对所述写入数据使能向量、所述第一存储地址向量和所述待写入数据向量进行重排序,根据重排序后的所述写入数据使能向量和所述第一存储地址向量将重排序后的所述待写入数据向量存入所述并行存储器,从而支持数据从一个或多个维度进行并行写入,提高了数据写入的灵活性和写入效率。

附图说明

图1为本发明实施例提供的数据并行写入方法整体流程示意图;

图2为本发明实施例提供的数据并行写入方法中对四维待写入数据向量在两个维度进行并行写入的示意图;

图3为本发明实施例提供的数据并行写入方法中对四维待写入数据向量在一个维度进行并行写入的示意图;

图4为本发明实施例提供的数据并行写入方法中将写入数据索引变换为一维写入地址的示意图;

图5为本发明实施例提供的数据并行写入方法中将写入重排序网络结构示意图;

图6为本发明实施例提供的数据并行读取方法整体流程示意图;

图7为本发明实施例提供的数据并行写入装置整体结构示意图;

图8为本发明实施例提供的数据并行读取装置整体结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

在本发明的一个实施例中提供一种数据并行写入方法,图1为本发明实施例提供的数据并行写入方法整体流程示意图,该方法包括:s101,将待写入数据向量的写入数据索引变换为一维写入地址;其中,所述待写入数据向量为待写入的多维数据矩阵中的一个一维或多维向量,写入数据索引为待写入数据向量的所有元素中第一个待写入元素在待写入的多维数据矩阵中的索引待写入的多维数据矩阵中的索引;

其中,待写入数据向量为需要进行并行写入的数据向量。写入数据索引为待写入数据向量中第一个待写入元素在待写入的多维数据矩阵中的索引。其中待写入元素为需要进行写入的元素。在控制信号w_ctrl0的控制下与w_ctrl1的控制下对写入数据索引进行变换,生成一个一维写入地址。例如,待写入数据向量为四维向量[dim3,dim2,dim1,dim0],其中,dim3、dim2、dim1和dim0表示不同维度。待写入数据向量在各维度上的尺寸分别为dim3、dim2、dim1和dim0。最大并行写入数据个数为s,待写入数据向量w_data为一个长度为n的向量。从dim1和dim0两个维度进行连续写入,如图2所示。从两个维度进行并行连续写入时,需要定义两个参数,即dim1维度最大并行读写个数k和dim0维度最大并行读写个数l,k*l=s。从dim0一个维度并行连续写入的形式如图3所示,这种情况下l=s,k=0。

s102,根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量;其中,写入数据使能向量中的每个元素用于表示待写入数据向量中相应位置的元素是否写入;第一存储索引向量为待写入数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;第一存储地址向量为待写入数据向量中各元素对应的各存储子单元中的地址所构成的向量;

其中,预设写入数据个数w_m为待写入数据向量中需要写入的元素的个数。根据一维写入地址w_base和预设写入数据个数w_m进行计算,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量。其中,写入数据使能向量、第一存储索引向量和第一存储地址向量分别为长度等于n的向量。写入数据使能向量w_be中每个元素为0或1,用于表示待写入数据向量w_data中相应位置的元素是否写入,其中1表示写入,0表示不写入。第一存储索引向量w_bi为待写入数据向量w_data中每个元素对应的要存入到的并行存储器中存储子单元的索引所构成的向量。第一存储地址向量w_ba为待写入数据向量w_data将要存入到的各个存储子单元中的地址所构成的向量。

s103,根据第一存储索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序,根据重排序后的写入数据使能向量和第一存储地址向量将重排序后的待写入数据向量存入并行存储器。

具体地,将写入数据使能向量、第一存储地址向量和待写入数据向量输入写入重排序网络,根据第一存储索引向量,对写入数据使能向量w_be、第一存储地址向量w_ba和待写入数据向量w_data进行重排序,获取重排序后的写入数据使能向量w_be_r、第一存储地址向量w_ba_r和待写入数据向量w_data_r。其中w_ba_r为各存储子单元对应的要存入待写入数据向量中各元素的地址,w_be_r为各个存储子单元是否使能的使能向量,w_data_r为各存储子单元对应的要存入的待写入数据向量中的元素。

本实施例通过将待写入数据向量的写入数据索引变换为一维写入地址,根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量,根据第一存储索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序,根据重排序后的写入数据使能向量和第一存储地址向量将重排序后的待写入数据向量存入并行存储器,从而支持数据从一个或多个维度进行并行写入,提高了数据写入的灵活性和写入效率。

在上述实施例的基础上,本实施例中步骤s101具体包括:对写入数据索引进行重排序,将重排序的写入数据索引中进行并行写入的各预设维度对应的索引值分别拆分为多个索引值;

例如,如图4所示,在w_ctrl0的控制下将写入数据索引[dim0、dim1、dim2、dim3]进行重排序,得到重排序后的写入数据索引[dimnp1,dimnp0,dimp1,dimp0]。其中,dimp1和dimp0为并行写入的两个维度,dimnp1和dimnp0为不需要进行并行写入的两个维度,待写入数据向量dimnp1、dimnp0、dimp1和dimp0四个维度上的尺寸分别为dimnp1、dimnp0、dimp1和dimp0。

定义dimp1和dimp0两个并行写入维度的最大并行写入个数分别为k和l。k和l可以依据并行存储器的性能进行设置。根据k将dimp1拆分为两维度,即dim1_p和dim1_b。其中,dim1_p=dimp1%k,dim1_b=dimp1//k。待写入数据向量在维度dim1_p上的尺寸为dim1_p=k,在维度dim1_b上的尺寸为dim1_b=dimp1//k。根据l将dimp0拆分为两维度,即dim0_p和dim0_b。其中,dim0_p=dimp0%l,dim0_b=dimp0//l。待写入数据向量在维度dim0_p上的尺寸为dim0_p=l,在维度dim0_b上的尺寸为dim0_b=dimp1//l。此时,待写入数据向量由四维被拆分为六维,拆分后的写入数据索引为[dimnp1,dimnp0,dimp1_b,dimp1_p,dimp0_b,dimp0_p]。待写入数据向量在每个维度上的尺寸分别为dimnp1、dimnp0、dimp1_b、dimp1_p、dimp0_b和dimp0_p。

在w_ctrl1的控制下对拆分后的写入数据索引再次进行重排序,根据再次重排序的写入数据索引进行计算,获取一维写入地址。

例如,将拆分后的写入数据索引[dimnp1,dimnp0,dimp1_b,dimp1_p,dimp0_b,dimp0_p]进行再次重排序,得到再次重排序的写入数据索引[dnp3,dnp2,dnp1,dnp0,dp1,dp0]。其中,dp1=dimp1_p,dp0=dimp0_p。dnp3,dnp2,dnp1,dnp0则是dimnp1,dimnp0,dimp1_b,dimp0_b再次重排序得到的。待写入数据向量在再次重排序后的在对应维度上的尺寸分别为dnp3、dnp2、dnp1、dnp0、dp1和dp0,其是通过对dimnp1、dimnp0、dimp1_b、dimp1_p、dimp0_b和dimp0_p进行同样的再次重排序而获取。根据再次重排序的写入数据索引进行计算,获取一维写入地址w_base的公式为:

w_base=dp0+dp1*dp0+dnp0*dp0*dp1+dnp1*dp0*dp1*dnp0+dnp2*dp0*dp1*dnp0*dnp1+dnp3*dp0*dp1*dnp0*dnp1*dnp1。本实施例不限于待写入数据向量的维数、进行数据拆分的维度和拆分成的维数,也不限于进行再次排序时不进行再次重排序的维度。

在上述实施例的基础上,本实施例中根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量的步骤具体包括:根据预设写入数据个数,确定写入数据使能向量中值为1的元素的个数,根据待写入数据向量的长度与预设写入数据个数之间的差值,确定写入数据使能向量中值为0的元素的个数;根据待写入数据向量中各元素在待写入数据向量中的索引、一维写入地址和待写入数据向量的长度,获取第一存储索引向量和第一存储地址向量。

具体地,根据w_m可以得到写入数据使能向量w_be的数学表示:w_be=[w_m{1},(n-w_m){0}]。即待写入数据向量w_data中前w_m个元素写入,w_data中的其他元素不写入。第一存储索引向量w_bi的计算公式为:w_bi=(w_base+[0,1,2,…,n-1])%n。第一存储地址向量w_ba计算公式为:w_ba=(w_base+[0,1,2,…,n-1])//n。

在上述各实施例的基础上,本实施例中根据第一存储索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序的步骤具体包括:根据第一存储索引向量,获取各存储子单元的索引对应的元素在待写入数据向量中的索引所构成的写入数据索引向量;根据写入数据索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序。

具体地,写入数据索引向量w_bi_r为与w_bi相对应的向量,表示并行存储器中各个存储子单元将要写入的元素在待写入数据向量w_data中的索引构成的索引向量,该向量可以通过w_bi计算得到,公式为:w_bi_r=(n-w_bi[0]+[0,1,2,…,n-1])%n。根据写入数据索引向量w_bi_r对写入数据使能向量w_be、第一存储地址向量w_ba和待写入数据向量w_data进行重排序。在写入重排序网络中,根据w_bi_r对w_be、w_ba和w_data分别独立进行相同的重排序,写入重排序网络的结构示意图如图5所示。

例如,需要将待写入数据向量为[dim3,dim2,dim1,dim0]写入由4个存储子单元构成的并行存储器,即n=4。待写入数据向量在各维度的尺寸对应为dim3=12,dim2=10,dim1=8,dim0=6。写入数据索引在4个维度上的索引值在w_ctrl0的控制下进行交织,输出与输入的关系为:dimnp1=dim1,dimnp0=dim0,dimp1=dim3,dimp0=dim2。待写入数据向量在各维度的尺寸为dimnp1=dim1=8,dimnp0=dim0=6,dimp1=dim3=12,dimp0=dim2=10。在dimp1和dimp0这两个维度分别最大并行读写个数为k=2,l=2。依据k和l分别将dimp1和dimp0拆分成两个维度,得到:dimp1_b=dimp1//k,dimp1_p=dimp1%k,dimp0_b=dimp0//l,dimp0_p=dimp0%l。待写入数据向量在拆分后得到的维度上的尺寸相应为dimp1_b=dimp1//k=6,dimp1_p=k=2,dimp0_b=dimp0//l=5,dimp0_p=l=2。将拆分后得到的六个维度数据dimnp1、dimnp0、dimp1_b、dimp1_p、dimp0_b、dimp0_p中的dimp1_p和dimp0_p直接作为最终的六个维度中的dp1和dp0;dimnp1、dimnp0、dimp1_b、dimp0_b要在w_ctrl1的控制下进行交织,输出与输入的关系为:dnp3=dimp1_b,dnp2=dimp0_b,dnp1=dimnp1,dnp0=dimnp0。待写入数据向量在各维度的尺寸为dnp3=dimp1_b=6,dnp2=dimp0_b=5,dnp1=dimnp1=8,dnp0=dimnp0=6,dp1=dimp1_p=2,dp0=dimp0_p=2。

当写入数据索引w_index=[0,2,0,0],预设数据写入个数w_m=4,待写入数据向量w_data=[6,7,8,9]时,数据并行写入过程如下:

根据写入数据索引w_index计算出w_base,即:

w_base=dp0_p+dp1*dp0+dnp0*dp0*dp1+dnp1*dp0*dp1*dnp0+dnp2*dp0*dp1*dnp0*dnp1+dnp3*dp0*dp1*dnp0*dnp1*dnp1=2。

根据w_base和w_m,计算出w_be、w_ba和w_bi_r,即:

w_be=[w_m{1},(n-w_m){0}]=[1,1,1,1];

w_bi=(w_base+[0,1,2,…,n-1])%n=[2,3,0,1];

w_bi_r=(n-w_bi[0]+[0,1,2,…,n-1])%n=[2,3,0,1];

w_ba=(w_base+[0,1,2,…,n-1])//n=[0,0,1,1];

w_be、w_ba和w_data输入写入重排序网络,在w_bi_r的控制下,输出为:

w_be_r=[1,1,1,1];

w_ba_r=[1,1,0,0];

w_data_r=[8,9,6,7]。

根据w_be_r、w_ba_r和w_ba_r对待写入数据向量进行并行写入。由于w_be_r向量中各元素均为1,因此所有存储子单元均使能,w_ba_r给出了每个存储子单元的地址,w_data_r给出每个存储子单元要存储的数据。

在本发明的另一个实施例中提供一种数据并行读取方法,图6为本发明实施例提供的数据并行读取方法整体流程示意图,该方法包括:s601,将待读取数据向量的读取数据索引变换为一维读取地址;其中,所述待读取数据向量为待读取的多维数据矩阵中的一个一维或多维向量,读取数据索引为待读取数据向量的所有元素中第一个待读取元素在待读取的多维数据矩阵中的索引;

其中,待读取数据向量为需要进行并行读取的数据向量。读取数据索引为待读取数据向量中第一个待读取元素在待读取的多维数据矩阵中的索引。其中待读取元素为需要进行读取的元素。在控制信号r_ctrl0与r_ctrl1的控制下对读取数据索引进行变换,生成一个一维读取地址。一维读取地址生成方法与一维写入地址生成方法相同。

s602,根据一维读取地址和预设读取数据个数,获取待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量;其中,读取数据使能向量中的每个元素用于表示待读取数据向量中相应位置的元素是否读取;第二存储索引向量为待读取数据向量中各元素在并行存储器中各存储子单元的索引所构成的向量;第二存储地址向量为待读取数据向量中各元素在各存储子单元中的地址所构成的向量;

其中,预设读取数据个数为待读取数据向量中需要读取的元素的个数。根据一维读取地址r_base和预设读取数据个数r_m进行计算,获取待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量。其中,读取数据使能向量、第二存储索引向量和第二存储地址向量分别为长度等于n的向量。读取数据使能向量r_be中每个元素为0或1,用于表示待读取数据向量r_data中相应位置的元素是否读取,其中1表示读取,0表示不读取。第二存储索引向量r_bi为待读取数据向量r_data中每个元素在并行存储器中存储子单元的索引所构成的向量。第二存储地址向量r_ba为读取待读取数据向量r_data中每个元素在各存储子单元中的地址所构成的向量。

s603,根据第二存储索引向量,对读取数据使能向量和第二存储地址向量进行重排序,根据重排序后的读取数据使能向量和第二存储地址向量从并行存储器读取存储数据向量,根据第二存储索引向量对存储数据向量进行重排序,获取待读取数据向量。

具体地,将读取数据使能向量、第二存储地址向量和待读取数据向量输入读取重排序网络,根据第二存储索引向量r_bi对读取数据使能向量r_be和第二存储地址向量r_ba进行重排序,获取重排序后的读取数据使能向量r_be_r和第二存储地址向量r_ba_r。其中r_ba_r为各存储子单元中预先存储的要读取的待读取数据向量中各元素的地址,r_be_r为各个存储子单元中预先存储的待读取数据向量中各元素是否读取的使能向量。根据r_be_r和r_ba_r从并行存储器读取存储数据向量r_data_r。r_data_r中各元素的顺序是按照存储子单元的顺序进行排列的,与待读取数据向量r_data中元素的值相同但顺序不同。根据第二存储索引向量r_bi对r_data_r进行重排序,获取r_data。

本实施例通过将待读取数据向量的读取数据索引变换为一维读取地址,根据一维读取地址和预设读取数据个数,获取待读取数据向量的写入数据使能向量、第二存储索引向量和第二存储地址向量,根据第二存储索引向量,对写入数据使能向量和第一存储地址向量进行重排序,根据重排序后的读取数据使能向量和第二存储地址向量从并行存储器中读取存储数据向量,根据第二存储索引向量对存储数据向量进行重排序,获取待读取数据向量,从而支持数据从一个或多个维度进行并行读取,提高了数据读取的灵活性和写入效率。

在上述实施例的基础上,本实施例中步骤s601具体包括:将待读取数据向量的读取数据索引变换为一维读取地址的步骤具体包括:对读取数据索引进行重排序,将重排序的读取数据索引中进行并行读取的各预设维度对应的索引值分别拆分为多个索引值;对拆分后的读取数据索引再次进行重排序,根据再次重排序的读取数据索引进行计算,获取一维读取地址。

例如,将读取数据索引[dim0、dim1、dim2、dim3]在r_ctrl0的控制下进行重排序,得到重排序后的读取数据索引[dimnp1,dimnp0,dimp1,dimp0]。其中,dimp1和dimp0为并行读取的两个维度,dimnp1和dimnp0为不需要进行并行读取的两个维度,待读取数据向量dimnp1、dimnp0、dimp1和dimp0四个维度上的尺寸分别为dimnp1、dimnp0、dimp1和dimp0。

定义dimp1和dimp0两个并行读取维度的最大并行读取个数分别为k和l。k和l可以依据并行存储器的性能进行设置。根据k将dimp1拆分为两维度,即dim1_p和dim1_b。其中,dim1_p=dimp1%k,dim1_b=dimp1//k。待读取数据向量在维度dim1_p上的尺寸为dim1_p=k,在维度dim1_b上的尺寸为dim1_b=dimp1//k。根据l将dimp0拆分为两维度,即dim0_p和dim0_b。其中,dim0_p=dimp0%l,dim0_b=dimp0//l。待读取数据向量在维度dim0_p上的尺寸为dim0_p=l,在维度dim0_b上的尺寸为dim0_b=dimp1//l。此时,待读取数据向量由四维被拆分为六维,拆分后的读取数据索引为[dimnp1,dimnp0,dimp1_b,dimp1_p,dimp0_b,dimp0_p]。待读取数据向量在每个维度上的尺寸分别为dimnp1、dimnp0、dimp1_b、dimp1_p、dimp0_b和dimp0_p。

对拆分后的读取数据索引再次进行重排序,根据再次重排序的读取数据索引进行计算,获取一维读取地址。

例如,将拆分后的读取数据索引[dimnp1,dimnp0,dimp1_b,dimp1_p,dimp0_b,dimp0_p]在r_ctrl1的控制下进行再次重排序,得到再次重排序的读取数据索引[dnp3,dnp2,dnp1,dnp0,dp1,dp0]。其中,dp1=dimp1_p,dp0=dimp0_p。dnp3,dnp2,dnp1,dnp0则是dimnp1,dimnp0,dimp1_b,dimp0_b再次重排序得到的。待读取数据向量在再次重排序后的在对应维度上的尺寸分别为dnp3、dnp2、dnp1、dnp0、dp1和dp0,其是通过对dimnp1、dimnp0、dimp1_b、dimp1_p、dimp0_b和dimp0_p进行同样的再次重排序而获取。根据再次重排序的读取数据索引进行计算,获取一维读取地址w_base的公式为:

w_base=dp0+dp1*dp0+dnp0*dp0*dp1+dnp1*dp0*dp1*dnp0+dnp2*dp0*dp1*dnp0*dnp1+dnp3*dp0*dp1*dnp0*dnp1*dnp1。本实施例不限于待读取数据向量的维数、进行数据拆分的维度和拆分成的维数,也不限于进行再次排序时不进行再次重排序的维度。

在上述实施例的基础上,本实施例中根据一维读取地址和预设读取数据个数,获取待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量的步骤具体包括:

根据预设读取数据个数,确定读取数据使能向量中值为1的元素的个数,根据待读取数据向量的长度与预设读取数据个数之间的差值,确定读取数据使能向量中值为0的元素的个数;根据待读取数据向量中各元素在待读取数据向量中的索引、一维读取地址和待读取数据向量的长度,获取第二存储索引向量和第二存储地址向量。

具体地,根据r_m可以得到读取数据使能向量r_be的数学表示:r_be=[r_m{1},(n-r_m){0}]。即待读取数据向量r_data中前r_m个元素写入,r_data中的其他元素不读取。第二存储索引向量r_bi的计算公式为:r_bi=(r_base+[0,1,2,…,n-1])%n。第二存储地址向量r_ba计算公式为:r_ba=(r_base+[0,1,2,…,n-1])//n。

在上述各实施例的基础上,本实施例中根据第二存储索引向量,对读取数据使能向量和第二存储地址向量进行重排序的步骤具体包括:根据第二存储索引向量,获取各存储子单元的索引对应的元素在待读取数据向量中的索引所构成的读取数据索引向量;根据读取数据索引向量,对读取数据使能向量和第二存储地址向量进行重排序。

具体地,读取数据索引向量r_bi_r为与r_bi相对应的向量,表示并行存储器中各个存储子单元将要读取的元素在待读取数据向量r_data中的索引构成的索引向量,该向量可以通过r_bi计算得到,公式为:r_bi_r=(n-r_bi[0]+[0,1,2,…,n-1])%n。根据读取数据索引向量r_bi_r对写入数据使能向量r_be和第二存储地址向量r_ba进行重排序。在读取重排序网络中,根据r_bi_r对r_be和r_ba分别独立进行相同的重排序,读取重排序网络的结构和写入中排序网络的结构相同。根据r_be_r和r_ba_r从并行存储器读取存储数据向量r_data_r。r_data_r中各元素的顺序是按照存储子单元的顺序进行排列的,与待读取数据向量r_data中元素的值相同但顺序不同。根据r_bi对r_data_r进行重排序,获取r_data。

例如,将上述实施例中所列举的写入到并行存储器中的待写入数据向量w_data=[6,7,8,9]进行读取。即待读取数据向量r_data=[6,7,8,9]时,读取数据索引r_dex=[0,2,0,0],预设读取数据个数r_m=4,数据并行读取过程如下:

根据读取数据索引r_index计算出r_base,即:

r_base=dp0_p+dp1*dp0+dnp0*dp0*dp1+dnp1*dp0*dp1*dnp0+dnp2*dp0*dp1*dnp0*dnp1+dnp3*dp0*dp1*dnp0*dnp1*dnp1=2。

根据r_base和r_m,计算出r_be、r_ba和r_bi_r,即:

r_be=[r_m{1},(n-r_m){0}]=[1,1,1,1];

r_bi=(r_base+[0,1,2,…,n-1])%n=[2,3,0,1];

r_bi_r=(n-r_bi[0]+[0,1,2,…,n-1])%n=[2,3,0,1];

r_ba=(r_base+[0,1,2,…,n-1])//n=[0,0,1,1];

r_be和r_ba输入读取重排序网络,在r_bi_r的控制下,输出为:

r_be_r=[1,1,1,1];

r_ba_r=[1,1,0,0];

根据r_be_r和r_ba_r和w_ba_r从并行存储器中读取存储数据向量r_data_r。由于r_be_r向量中各元素均为1,因此所有存储子单元均使能,r_ba_r给出了每个存储子单元的地址,读取的数据为r_data_r=[8,9,6,7]。r_data_r与r_data中元素的值相同,但顺序不同,需要进行重排序。在r_bi的控制下对r_data_r进行重排序,获取r_data。

在本发明的另一个实施例中提供一种数据并行写入装置,参考图7。该装置用于实现上述各数据并行写入方法实施例。因此,在前述各实施例中的数据并行写入方法中的描述和定义,可以用于本发明实施例中各个执行模块的理解。

数据并行写入装置包括:第一变换模块701用于将待写入数据向量的写入数据索引变换为一维写入地址;其中,所述待写入数据向量为待写入的多维数据矩阵中的一个一维或多维向量,写入数据索引为待写入数据向量的所有元素中第一个待写入元素在待写入的多维数据矩阵中的索引;第一获取模块702用于根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量;其中,写入数据使能向量中的每个元素用于表示待写入数据向量中相应位置的元素是否写入;第一存储索引向量为待写入数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;第一存储地址向量为待写入数据向量中各元素对应的各存储子单元中的地址所构成的向量;存入模块703用于根据第一存储索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序,根据重排序后的写入数据使能向量和第一存储地址向量将重排序后的待写入数据向量存入并行存储器。

在上述实施例的基础上,本实施例中第一变换模块具体用于:对写入数据索引进行重排序,将重排序的写入数据索引中进行并行写入的各预设维度对应的索引值分别拆分为多个索引值;对拆分后的写入数据索引再次进行重排序,根据再次重排序的写入数据索引进行计算,获取一维写入地址。

在上述实施例的基础上,本实施例中第一获取模块具体用于:根据预设写入数据个数,确定写入数据使能向量中值为1的元素的个数,根据待写入数据向量的长度与预设写入数据个数之间的差值,确定写入数据使能向量中值为0的元素的个数;根据待写入数据向量中各元素在待写入数据向量中的索引、一维写入地址和待写入数据向量的长度,获取第一存储索引向量和第一存储地址向量。

在上述各实施例的基础上,本实施例中写入模块具体用于:根据第一存储索引向量,获取各存储子单元的索引对应的元素在待写入数据向量中的索引所构成的写入数据索引向量;根据写入数据索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序。

通过将待写入数据向量的写入数据索引变换为一维写入地址,根据一维写入地址和预设写入数据个数,获取待写入数据向量的写入数据使能向量、第一存储索引向量和第一存储地址向量,根据第一存储索引向量,对写入数据使能向量、第一存储地址向量和待写入数据向量进行重排序,根据重排序后的写入数据使能向量和第一存储地址向量将重排序后的待写入数据向量存入并行存储器,从而支持数据从一个或多个维度进行并行写入,提高了数据写入的灵活性和写入效率。

在本发明的另一个实施例中提供一种数据并行读取装置,参考图8。该装置用于实现上述各数据并行读取方法实施例。因此,在前述各实施例中的数据并行读取方法中的描述和定义,可以用于本发明实施例中各个执行模块的理解。

数据并行写入装置包括:第二变换模块801用于将待读取数据向量的读取数据索引变换为一维读取地址;其中,所述待读取数据向量为待读取的多维数据矩阵中的一个一维或多维向量,读取数据索引为待读取数据向量的所有元素中第一个待读取元素在待读取的多维数据矩阵中的索引;第二获取模块802用于根据一维读取地址和预设读取数据个数,获取待读取数据向量的读取数据使能向量、第二存储索引向量和第二存储地址向量;其中,读取数据使能向量中的每个元素用于表示待读取数据向量中相应位置的元素是否读取;第二存储索引向量为待读取数据向量中各元素对应的并行存储器中各存储子单元的索引所构成的向量;第二存储地址向量为待读取数据向量中各元素对应的各存储子单元中的地址所构成的向量;读取模块803用于根据第二存储索引向量,对读取数据使能向量和第二存储地址向量进行重排序,根据重排序后的读取数据使能向量和第二存储地址向量从并行存储器读取存储数据向量,根据第二存储索引向量对存储数据向量进行重排序,获取待读取数据向量。

在上述实施例的基础上,本实施例中第二变换模块具体用于:对读取数据索引进行重排序,将重排序的读取数据索引中进行并行读取的各预设维度对应的索引值分别拆分为多个索引值;对拆分后的读取数据索引再次进行重排序,根据再次重排序的读取数据索引进行计算,获取一维读取地址。

在上述实施例的基础上,本实施例中第二获取模块具体用于:根据预设读取数据个数,确定读取数据使能向量中值为1的元素的个数,根据待读取数据向量的长度与预设读取数据个数之间的差值,确定读取数据使能向量中值为0的元素的个数;根据待读取数据向量中各元素在待读取数据向量中的索引、一维读取地址和待读取数据向量的长度,获取第二存储索引向量和第二存储地址向量。

在上述各实施例的基础上,本实施例中读取模块具体用于:根据第二存储索引向量,获取各存储子单元的索引对应的元素在待读取数据向量中的索引所构成的读取数据索引向量;根据读取数据索引向量,对读取数据使能向量和第二存储地址向量进行重排序。

本实施例通过将待读取数据向量的读取数据索引变换为一维读取地址,根据一维读取地址和预设读取数据个数,获取待读取数据向量的写入数据使能向量、第二存储索引向量和第二存储地址向量,根据第二存储索引向量,对写入数据使能向量和第一存储地址向量进行重排序,根据重排序后的读取数据使能向量和第二存储地址向量从并行存储器中读取存储数据向量,根据第二存储索引向量对存储数据向量进行重排序,获取待读取数据向量,从而支持数据从一个或多个维度进行并行读取,提高了数据读取的灵活性和写入效率。

在本发明的另一个实施例中提供一种数据并行读写系统,该数据并行读写系统包括并行存储器、上述各数据并行写入装置实施例中的任一数据并行写入装置和上述各数据并行读取装置实施例中的任一数据并行读取装置。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1