一种多维数据扩充传输的方法、装置以及系统与流程

文档序号:12785987阅读:169来源:国知局
一种多维数据扩充传输的方法、装置以及系统与流程
本发明涉及数据扩充领域,具体而言,涉及一种多维数据扩充传输的方法、装置以及系统。
背景技术
:目前,深度学习、人工智能以及大数据应用等领域中,处理多维矩阵或图像的应用越来越多。在处理过程中,可能需要对数据集进行一些扩充处理,例如以下两种情况:(1)输入数据集不规则,需要补全的情况。例如,在调用openBLAS库的GEMM时,该函数是将矩阵切割成固定大小的块后进行加速,如果输入矩阵的行和列无法对应地整除加速块的行和列,即无法全部切分成需要的固定大小的块,这时就需要对矩阵进行填充。(2)在输入集的边界处理时,需要在超出输入集边界的地方取0或MAX,或者某个特定数的情况。例如,sift的卷积过程中,为了防止图片卷积后出现黑边,需要在边界处理时改变卷积核的大小,或者是不改变卷积核而是将图片的边界扩大,即超出部分采用输入集的边界值。面对上述两种情况时,目前比较常用处理方式有两种,其中一种是在程序中写分支语句,当超出输入数据集的大小时,采取对应的方式进行解决;另一种是将数据集进行读取,改变其结构后,再存入memory中。但在目前很多片上结构、加速器中,上述方法不能很好的解决问题。在很多的加速器上,每个PE较为简单,可能只由几个计算部件组成,无法支持分支指令;而片上存储是有限的,如果在片上展开矩阵,那么片上存储的利用率会降低,而且增加了很多读写操作,加速器的效率也会降低。而在主机端对数据展开的话,加速器需要等待主机将数据集展开,传输到片上后再进行处理,这样会增加等待时间,并且增加了传输的数据集的量,传输速度会进一步受到memory的带宽影响。综上可知,从主机向片上存储比较小的片上系统或加速器传输一些不规则的数据集或者是需要对边界进行处理的数据集时,片上的计算单元无法使用分支指令,且在片上进行数据扩充会占用比较大的片上存储,而在主机端进行数据扩充会增加传输的数据量和传输时间。技术实现要素:本发明提供一种多维数据扩充传输的方法、装置以及系统,用以通过硬件的方式于主机端向片上传输数据的同时将数据集进行扩充。为达到上述目的,本发明提供了一种多维数据扩充传输的方法,该方法用于将一数据集从一主机传输至一片上系统或加速器中,并于传输的同时对该数据集进行扩充,当该多维数据为二维数据时,其包括以下步骤:S1:确定需要传输的数据集A的行数row0、列数col0和首地址a0,其中,数据集A位于一主机的存储区;S2:确定对数据集A的每一维度的扩充区域的位置、扩充区域的大小和扩充区域填充的数值,其中,二维扩充区域为2Dformer和2Dlatter,一维扩充区域为1Dformer和1Dlatter,2Dformer和2Dlatter之间为数据集A的二维区域2Dmiddle,1Dformer和1Dlatter为数据集A的一维区域1Dmiddle;S3:根据S2的结果确定扩充后的数据集B的行数row1、列数col1以及接收数据的首地址a1,其中,数据集B位于一片上系统或加速器的存储区,接收数据的首地址a1即为数据集B的首地址,并且数据集B的2Dformer、2Dlatter、1Dformer、1Dlatter、2Dmiddle和1Dmiddle所在的区域与数据集A中的相应区域对应;S4:根据S2的结果,分别构建一2D控制模块与一1D控制模块,其中,2D控制模块包括2Dformer模块、2Dmiddle模块和2Dlatter模块,1D控制模块包括1Dformer、1Dmiddle模块和1Dlatter模块,并且分别为2Dformer模块、2Dlatter模块、1Dformer模块和1Dlatter模块构建多个控制寄存器,多个控制寄存器的名称及其功能定义如下表:S5:启动数据传输过程,以将数据集A及其扩充区域传输至以首地址a1为起始地址的存储区,2D控制模块首先向其中的2Dformer模块发送开始传输命令;S6:2Dformer模块接收到开始传输命令后查看自身Pad_valid中写入的数值,若为0则不填充数据,若为1则进一步查看Pad_type中写入的值;S7:若pad_type中写入的值为0则执行步骤S8-S11,通过步骤S8-S11向数据集B的2Dformer区域写入一个固定的数,若pad_type中写入的值为1则执行步骤S12-S16,通过步骤S12-S16将数据集B的2Dformer区域降维为多个1D区域并对多个1D区域完成数据写入,每个1D区域中的1Dmiddle所在区域写入的均是数据集A的上边界;S8:进一步查看Pad_num_type中写入的值,若Pad_num_type中写入的值为0,2Dformer模块则从Pad_num中读取数据,若为1则从Pad_num索引的地址中读取数据;S9:2Dformer模块将读取到的数据与Pad_length中写入的数值发送至一2Dpadding模块,2Dpadding模块读取col1的值并向一store模块发送Pad_length*col1次写请求,写请求中包括步骤S8中读取到的数据以及每写入一次数据后,下次写入数据的首地址;S10:store模块根据上一步骤接收到的消息从接收数据的首地址a1开始进行数据写入,store模块每完成一次写入后自动记录下次写入数据的首地址,直至Pad_length*col1次写请求全部完成;S11:2Dpadding模块向2Dformer模块发送写入完成消息;S12:2Dformer模块向1D控制模块发送写入开始消息,消息包括数据集A的首地址a0、row0、col0;S13:1D控制模块向1Dformer模块发送开始消息,1Dformer模块查看自身Pad_valid、Pad_length、Pad_type、Pad_num_type和Pad_num中写入的数值并向store模块发送Pad_length次写请求,store模块进行数据写入,直至Pad_length次写请求全部完成,此处的Pad_length为1Dformer模块对应的名称为Pad_length的控制寄存器中写入的数值;S14:1Dformer模块向1Dmiddle模块发送消息,1Dmiddle模块读取步骤S12中接收到的首地址a0和col0并从首地址a0开始读取col0个数据并向store模块发送col0次写请求,store模块进行数据写入直至col0次写请求全部完成;S15:1Dmiddle模块向1Dlatter模块发送消息,1Dlatter模块根据上述步骤S13中1Dformer模块控制的写入方式进行数据写入;S16:1Dlatter模块完成写入后,1D控制模块向2Dformer模块发送一写入完成消息;S17:2Dformer模块接收到1Dlatter模块发送的写入完成消息后,发送写入下一行数据的消息至1D控制模块,1D控制模块控制写入数据集B中的下一行数据,直至Pad_length个消息全部完成,此处的Pad_length为2Dformer模块对应的控制寄存器中定义的数值,其中,向数据集B写入每一行数据均通过步骤S13~S16进行;S18:2Dformer模块向2Dmiddle模块发送开始传输命令;S19:2Dmiddle模块读取row0的数值并向1D控制模块发送消息,消息中包括首地址a0、row0、col0以及根据row0、col0推算出的数据集A每行的首地址;S20:1D控制模块按照S13到S15的步骤向数据集B写入数据;S21:1D控制模块完成写入后向2Dmiddle模块发送一写入完成消息;S22:2Dmiddle模块接收到1Dlatter模块发送的写入完成消息后,发送写入下一行数据的消息至1D控制模块,1D控制模块控制写入数据集B中的下一行数据,直至row0个消息全部完成,其中,向数据集B写入每一行数据均通过步骤S20~S21进行;S23:2Dmiddle模块向2Dlatter模块发送写入完成消息,2Dlatter模块按照步骤S6~S17中2Dformer模块的数据写入方式进行数据写入;S24:2Dformer模块向2D控制模块发送写入完成消息,数据扩充传输过程结束。在本发明的一实施例中,对于2Dformer模块、2Dlatter模块、1Dformer模块和1Dlatter模块中的任一模块而言,当Pad_num_type中写入的值为1时,2Dformer模块、2Dlatter模块、1Dformer模块或1Dlatter模块将Pad_num内的内存地址读取出并发送至一load模块,并由load模块将该内存地址中存储的数据读取出并返回给2Dformer模块、2Dlatter模块、1Dformer模块或1Dlatter模块。在本发明的一实施例中,步骤S13中,当1Dformer模块的Pad_valid=1以及Pad_type=1时,1Dformer模块将数据集A的首地址a0处的数据读取Pad_length次并向store模块发送Pad_length次写请求,store模块从数据集B的首地址开始进行数据写入。在本发明的一实施例中,步骤S15中,当1Dlatter模块的Pad_valid=1以及Pad_type=1时,1Dlatter模块将步骤S14步骤中地址指针最后一次指向的数据读取Pad_length次并向store模块发送Pad_length次写请求,store模块从步骤S14最后写入地址的下一个地址开始进行数据写入,此处的Pad_length为1Dlatter模块对应的名称为Pad_length的控制寄存器中写入的数值。本发明还提供了一种多维数据扩充传输的装置,该装置用于实施上述多维数据扩充传输的方法。本发明还提供了一种多维数据扩充传输的系统,该系统用于实施上述多维数据扩充传输的方法。本发明提供的多维数据扩充传输的方法、装置以及系统在从主机的存储区向片上存储传输数据时,可以同时将数据集扩充为程序员设定的格式,无需在片上或者在主机端对数据进行拷贝,既能够节约memory的空间,也可以减少传输的时间。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1a为一维数组的填充区域示意图;图1b为二维数组填充区域示意图;图1c为三维数组的填充区域示意图;图2为2D数据的传输模式示意图;图3为3D模块的传输模式示意图;图4为本发明提供的多维数据扩充传输的装置/系统与其他模块的位置关系示意图;图5为扩充后的得到数据集B的一示意图;图6为扩充后的得到数据集B的另一示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明对于不同的数据维度,填充区域也相应不同,如图1a、图1b和图1c所示,其中,图1a为一维数组的填充区域示意图,图1b为二维数组填充区域示意图,图1c为三维数组的填充区域示意图,对于图1a中的一维数组,需要填充的区域为101和102,对于图1b中的二维数组,需要填充的区域为103-106,对于图1c中的三维数组,需要填充的区域为107-112。也即,n维数据的填充区域为2n个。其中,对于每一个填充区域,可以根据实际需要配置是否填充区域(填充区域可以为空,即不进行任何填充),也可以根据需要配置填充的具体数据。另外,由于n维数据的填充区域为2n个,因此,数据维度增加的同时,相应的用于进行数据扩充的硬件规模也要增加。本发明以二维数据为例进行了研究,其中,将每一维度的数据分为三个部分,分别为原区域和两个填充区域,原区域称之为middle,两个填充区域分别位于原区域之前和之后,分别称之为former和latter。在本发明中,每个维度都会按照former、middle、latter的顺序进行数据扩充和传输。对于middle而言,高维数据是先分解成多个低维数据,直到分解成一维数据,然后再进行传输。例如,3D的数据H*W*L传输会分解成H次2D数据传输,每次2D数据传输会分解为W次1D数据传输。而分解后的低维数据也是由former、middle、latter的结构构成。本发明对填充区域(former、latter)有两种填充模式,当填充数据为一个固定的数时,可以通过多维填充模块(即后面的padding模块)直接向目的地址发送写请求,将多维的区域用固定的数字填充。当填充的数据需要是原数据块的边界时,就会同数据传输一样进行高维向低维的分解,并且是将低维的数据边界传输Pad_length次,这样就会填满整个填充区域。这个数据边界是指与填充区域相接的数据,如2Dformer对应的数据边界就是2维数据的第一行,3Dlatter的数据边界是3维数据的最后一个面。本发明的结构图可以参考图2和图3,因为每个维度都会分成former、middle、latter三部分填充,所以每个维度都需要分别构建三个对应模块,每个维度的三个模块组成该维度的控制模块。former、middle、latter模块都包含各自的控制寄存器。高维分解为低维的过程是通过高维向低维发送消息实现的。比如要2Dformer要进行n行数据的填充,那么它就要向1Dcontrol发送n次消息。Padding模块除一维外不同维度各有一个,可以直接向store模块发送消息填充数据。最右边有load和store模块,它们控制和内存、片上存储通信的消息格式,同时store模块会记录片上存储上的下一个数存放的地址偏移。可以看到,随着装置可以支持的维度的增加,硬件逻辑的复杂度也会增加,装置的面积也会因此增加。所以,在实际硬件实现时,要按照整个硬件系统需要支持的数据集的最高维度来实现,这样才能充分支持该硬件系统所面向的应用。本发明公开了一种多维数据扩充传输的方法,该方法用于将一数据集从一主机传输至一片上系统或加速器中,并于传输的同时对该数据集进行扩充,当该多维数据为二维数据时,其包括以下步骤:S1:确定需要传输的数据集A的行数row0、列数col0和首地址a0,其中,数据集A位于一主机的存储区;S2:确定对数据集A的每一维度的扩充区域的位置、扩充区域的大小和扩充区域填充的数值,其中,二维扩充区域为2Dformer和2Dlatter,一维扩充区域为1Dformer和1Dlatter,2Dformer和2Dlatter之间为数据集A的二维区域2Dmiddle,1Dformer和1Dlatter为数据集A的一维区域1Dmiddle;S3:根据S2的结果确定扩充后的数据集B的行数row1、列数col1以及接收数据的首地址a1,其中,数据集B位于一片上系统或加速器的存储区,接收数据的首地址a1即为数据集B的首地址,并且数据集B的2Dformer、2Dlatter、1Dformer、1Dlatter、2Dmiddle和1Dmiddle所在的区域与数据集A中的相应区域对应;S4:根据S2的结果,分别构建一2D控制模块与一1D控制模块,其中,2D控制模块包括2Dformer模块、2Dmiddle模块和2Dlatter模块,1D控制模块包括1Dformer、1Dmiddle模块和1Dlatter模块,并且分别为2Dformer模块、2Dlatter模块、1Dformer模块和1Dlatter模块构建多个控制寄存器,多个控制寄存器的名称及其功能定义如下表:对于对2D的former、latter来讲,Pad_length就是它们的行数,对3D的former、latter来说,Pad_length则是它们的平面个数;填充数据的类型(Pad_type),即填充一个固定的数或原数据块的边界;配置在pad_num中的是存放的内容格式,如果是0,则在pad_num中存放数值,如果是1则pad_num存放的是索引填充数值的内存地址。S5:启动数据传输过程,以将数据集A及其扩充区域传输至以首地址a1为起始地址的存储区,2D控制模块首先向其中的2Dformer模块发送开始传输命令;S6:2Dformer模块接收到开始传输命令后查看自身Pad_valid中写入的数值,若为0则不填充数据,若为1则进一步查看Pad_type中写入的值;S7:若pad_type中写入的值为0则执行步骤S8-S11,通过步骤S8-S11向数据集B的2Dformer区域写入一个固定的数,若pad_type中写入的值为1则执行步骤S12-S16,通过步骤S12-S16将数据集B的2Dformer区域降维为多个1D区域并对多个1D区域完成数据写入,每个1D区域中的1Dmiddle所在区域写入的均是数据集A的上边界;S8:进一步查看Pad_num_type中写入的值,若Pad_num_type中写入的值为0,2Dformer模块则从Pad_num中读取数据,若为1则从Pad_num索引的地址中读取数据;S9:2Dformer模块将读取到的数据与Pad_length中写入的数值发送至一2Dpadding模块,2Dpadding模块读取col1的值并向一store模块发送Pad_length*col1次写请求,写请求中包括步骤S8中读取到的数据以及每写入一次数据后,下次写入数据的首地址;S10:store模块根据上一步骤接收到的消息从接收数据的首地址a1开始进行数据写入,store模块每完成一次写入后自动记录下次写入数据的首地址,直至Pad_length*col1次写请求全部完成;S11:2Dpadding模块向2Dformer模块发送写入完成消息;S12:2Dformer模块向1D控制模块发送写入开始消息,消息包括数据集A的首地址a0、row0、col0;S13:1D控制模块向1Dformer模块发送开始消息,1Dformer模块查看自身Pad_valid、Pad_length、Pad_type、Pad_num_type和Pad_num中写入的数值并向store模块发送Pad_length次写请求,store模块进行数据写入,直至Pad_length次写请求全部完成,此处的Pad_length为1Dformer模块对应的名称为Pad_length的控制寄存器中写入的数值;S14:1Dformer模块向1Dmiddle模块发送消息,1Dmiddle模块读取步骤S12中接收到的首地址a0和col0并从首地址a0开始读取col0个数据并向store模块发送col0次写请求,store模块进行数据写入直至col0次写请求全部完成;S15:1Dmiddle模块向1Dlatter模块发送消息,1Dlatter模块根据上述步骤S13中1Dformer模块控制的写入方式进行数据写入;S16:1Dlatter模块完成写入后,1D控制模块向2Dformer模块发送一写入完成消息;S17:2Dformer模块接收到1Dlatter模块发送的写入完成消息后,发送写入下一行数据的消息至1D控制模块,1D控制模块控制写入数据集B中的下一行数据,直至Pad_length个消息全部完成,此处的Pad_length为2Dformer模块对应的控制寄存器中定义的数值,其中,向数据集B写入每一行数据均通过步骤S13~S16进行;S18:2Dformer模块向2Dmiddle模块发送开始传输命令;S19:2Dmiddle模块读取row0的数值并向1D控制模块发送消息,消息中包括首地址a0、row0、col0以及根据row0、col0推算出的数据集A每行的首地址;S20:1D控制模块按照S13到S15的步骤向数据集B写入数据;S21:1D控制模块完成写入后向2Dmiddle模块发送一写入完成消息;S22:2Dmiddle模块接收到1Dlatter模块发送的写入完成消息后,发送写入下一行数据的消息至1D控制模块,1D控制模块控制写入数据集B中的下一行数据,直至row0个消息全部完成,其中,向数据集B写入每一行数据均通过步骤S20~S21进行;S23:2Dmiddle模块向2Dlatter模块发送写入完成消息,2Dlatter模块按照步骤S6~S17中2Dformer模块的数据写入方式进行数据写入;S24:2Dformer模块向2D控制模块发送写入完成消息,数据扩充传输过程结束。在本发明的一实施例中,对于2Dformer模块、2Dlatter模块、1Dformer模块和1Dlatter模块中的任一模块而言,当Pad_num_type中写入的值为1时,2Dformer模块、2Dlatter模块、1Dformer模块或1Dlatter模块将Pad_num内的内存地址读取出并发送至一load模块,并由load模块将该内存地址中存储的数据读取出并返回给2Dformer模块、2Dlatter模块、1Dformer模块或1Dlatter模块。在本发明的一实施例中,步骤S13中,当1Dformer模块的Pad_valid=1以及Pad_type=1时,1Dformer模块将数据集A的首地址a0处的数据读取Pad_length次并向store模块发送Pad_length次写请求,store模块从数据集B的首地址开始进行数据写入。在本发明的一实施例中,步骤S15中,当1Dlatter模块的Pad_valid=1以及Pad_type=1时,1Dlatter模块将步骤S14步骤中地址指针最后一次指向的数据读取Pad_length次并向store模块发送Pad_length次写请求,store模块从步骤S14最后写入地址的下一个地址开始进行数据写入,此处的Pad_length为1Dlatter模块对应的名称为Pad_length的控制寄存器中写入的数值。以下以两个具体实例说明控制寄存器与扩充后的得到数据集B的关系:(一)当各控制寄存器的配置如下时:填充区域Pad_validPad_lengthPad_typePad_num_typePad_num2Dformer131--2Dlatter121--1Dformer121--1Dlatter1300Y配置后的数据集B如图5所示,其中,白色处填充数据A-O处对应数据集A,2Dformer、2Dlatter、1Dformer和1Dlatter所在区域如图5所示。由图5可以看出,当2Dformer的Pad_type为1时,2Dformer的middle区域的每一行填充的数据均为数据集A的第一行的数据。(二)当各控制寄存器的配置如下时:配置后的数据集B如图6所示,其中,白色处填充数据A-O处对应数据集A,2Dformer、2Dlatter和1Dlatter所在区域如图5所示,需要注意的是,由于1Dformer对应的Pad_valid为0,也既对该区域不填充任何数据,因此,图6中不存在1Dformer区域。本发明还提供了一种多维数据扩充传输的装置,该装置用于实施上述多维数据扩充传输的方法。本发明还提供了一种多维数据扩充传输的系统,该系统用于实施上述多维数据扩充传输的方法。如图4所示为本发明提供的多维数据扩充传输的装置/系统与其他模块的位置关系示意图,可见,本发明提供的多维数据扩充传输的装置/系统可以单独形成一个模块,也可以做为DMA的一部分。本发明在传输数据时,可以同时将数据集扩充为程序员所配置的格式。这样可以减少对内存的读写次数,减少传输时间和内存占用。以2维数据为例,假设读写内存和片上存储的延迟相同(实际上片上存储的延迟要更小),用m表示,需要传输的原数据的大小为H*W,要添加的行和列为pad_h、pad_w。那么把该数据在内存上展开再传输需要(H*W*m+(H+pad_h)(W+pad_w)*3m)次读写,即从内存中读出H*W大小的数据,改变成大小为(H+pad_h)(W+pad_w)的矩阵再存入内存中,然后通过DMA或者其他数据传输方式将(H+pad_h)(W+pad_w)的矩阵读出再写入片上存储。而使用了本发明后,最多只需要(H+pad_h)(W+pad_w)*2m次读写。可以看出,本发明能够减少大量的读写操作和传输时间,同时节约(H+pad_h)(W+pad_w)的内存空间。本发明提供的多维数据扩充传输的方法、装置以及系统在从主机的存储区向片上存储传输数据时,可以同时将数据集扩充为程序员设定的格式,无需在片上或者在主机端对数据进行拷贝,既能够节约memory的空间,也可以减少传输的时间。本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1