一种用于存算处理单元的寻址方法
技术领域
本发明涉及一种寻址方法,具体涉及一种用于存算处理单元的寻址方法,属于计算机处理器技术领域。
背景技术
传统的顺序寻址是在bank上连续递增地址,直到跨越bank边界滑动到下一个bank区域,能轻松应对一般数据计算场景,然而,在神经网络中,卷积计算占据较高比重,数据是三维立方体结构,神经网络的卷积计算的特点之一在于重复使用滑动窗口下的部分数据,包括宽度方向x及高度方向y。x方向数据量较小,使用时间连续,可以使用寄存器缓存复用,y方向数据量则太多,如果卷积算子先沿x方向处理,则使用的数据不连续,不适合缓存,一般直接从sram中搬运,在搬运过程中,数据的放置严重影响数据搬运的效率继而影响整个卷积算子的性能。传统的顺序寻址方式存在以下问题:
(1)卷积计算bank访问易冲突。以kernel=3的卷积为例,传统方式寻址,整个feature 的cube数据只能放置在一个bank上 ,而卷积计算每次需要访问3个数据,同一个bank一次只能读出一个数据,使用多个dma搬运数据即存在bank访问冲突的问题,造成数据访问延迟及吞吐量小的问题。
(2)并行操作资源使用分配复杂不均衡。顺序寻址造成低地址空间的bank被反复占用,高地址空间的bank则很少被使用,在使用多个dma在多个bank上并行读写数据容易造成bank之间的碎片,难以使用与回收。在reram介质的卷积计算中尤为突出。
(3)三维的数据在sram上放置复杂,使用传统线性访问存放,在读取时跳转复杂,编程复杂。
本申请人发现现有技术至少存在以下技术问题:
1、现有技术中,卷积计算bank访问易冲突,使用多个dma搬运数据即存在bank访问冲突的问题,造成数据访问延迟及吞吐量小的问题;
2、现有技术中,并行操作资源使用分配复杂不均衡,顺序寻址造成低地址空间的bank被反复占用,高地址空间的bank则很少被使用,在使用多个dma在多个bank上并行读写数据容易造成bank之间的碎片,难以使用与回收,在reram介质的卷积计算中尤为突出;
3、现有技术中,三维的数据在sram上放置复杂,使用传统线性访问存放,在读取时跳转复杂,编程复杂。
发明内容
本发明的目的在于提供一种用于存算处理单元的寻址方法,以解决现有技术中,卷积计算bank访问易冲突,使用多个dma搬运数据即存在bank访问冲突的问题,造成数据访问延迟及吞吐量小的问题;并行操作资源使用分配复杂不均衡,顺序寻址造成低地址空间的bank被反复占用,高地址空间的bank则很少被使用,在使用多个dma在多个bank上并行读写数据容易造成bank之间的碎片,难以使用与回收;三维的数据在sram上放置复杂,使用传统线性访问存放,在读取时跳转复杂,编程复杂的技术问题。
为实现上述目的,本发明提供了以下技术方案:
本发明提供了一种用于存算处理单元的寻址方法,步骤包括:
S1,将存储空间编码为连续地址;
S2,将所述存储空间划分为n个子存储空间;
S3,将三维数据组织为单元-条带-平面-立方体结构;
S4,将所述三维数据以S3步骤中所述的平面为单位,按顺序依次放置于S2步骤所述的n个子存储空间;
S5,对所述三维数据进行并行寻址。
进一步地,所述存储空间包括全局缓存空间,所述子存储空间包括逻辑bank。
进一步地,S2步骤中将所述存储空间等分为n个子存储空间,n至少为2。
进一步地,S3步骤中,所述单元为每次dma搬运的多字节组成的单体,所述条带是为宽度方向的所述单元组成的条带,所述平面为深度方向的多个所述条带组成的平面,所述立方体为高度方向所述平面组成的立方体。
进一步地,S4步骤中,将所述三维数据以S3步骤中所述的平面为单位,每个所述平面放置于不同的S2步骤中划分的子存储空间,将所述三维数据的平面按顺序依次放置于所述n个子存储空间,n至少为2。
进一步地,所述n个子存储空间中n至少为2时,S4步骤中,对所述三维数据的平面和所述子存储空间按顺序排序,将所述三维数据以S3步骤中所述的平面为单位,所述三维数据的第一个平面放置于第一个所述子存储空间,所述三维数据的第二个平面放置于第二个所述子存储空间,以此类推将所述三维数据的每个平面按顺序放置于所述n个子存储空间;若所述三维数据的平面的个数大于所述子存储空间的个数,则所述子存储空间完成一轮所述三维数据的平面的放置后,自第一个子存储空间继续放置所述三维数据的平面,以此类推,直到所有的所述三维数据的平面均放置于所述子存储空间。
进一步地,若所述三维数据的单元-条带-平面只能放置于一个子存储空间的连续地址段,当所述三维数据的平面需跨越放置于最后子存储空间与第一个子存储空间时,所述第一个子存储空间的地址增加一个所述三维数据的平面的大小并放置所述三维数据的平面。
进一步地,步骤S5中对所述三维数据进行并行寻址时,dma配置所述三维数据的单元-条带-平面-立方体的参数,所述dma读取完一个子存储空间存储的一个所述三维数据的平面后,所述dma自动读取下一个子存储空间存储的一个所述三维数据的平面,当所述dma需跨越最后子存储空间与第一个子存储空间完成读取时,所述dma自动跳转到所述第一个子存储空间进行读取。
进一步地,所述dma读取完一个子存储空间存储的一个所述三维数据的单元区块后,所述dma的访问地址自动增加一个所述子存储空间的地址使所述dma自动读取下一个子存储空间存储的一个所述三维数据的单元区块。
进一步地,所述单元区块包括组成所述三维数据的单元、条带、平面、立方体。
进一步地,当所述dma需跨越最后子存储空间与第一个子存储空间完成读取时,所述dma自动跳转到所述第一个子存储空间进行读取,同时所述三维数据的平面的访问地址增加一个所述三维数据的平面的大小。
进一步地,所述三维数据包括神经网络的feature数组。
基于上述技术方案,本发明实施例至少可以产生如下技术效果:
(1)本发明提供的一种用于存算处理单元的寻址方法,针对reram的卷积计算,降低三维数据存取复杂度,提高了数据访问的并行度,能同时并行读取数据,极大提高数据带宽。
(2)本发明提供的一种用于存算处理单元的寻址方法,由于数据使用单元-条带-平面-立方体的组织结构,数据放置于多bank上,均衡与动态使用多个bank,减少bank冲突,简化数据sram的调度管理。
(3)本发明提供的一种用于存算处理单元的寻址方法,数据成横向条带,更方便软件回收使用过的空间,bank间碎片空间由于bank间横向跳转,bank之间空间自动合并为更大更方便分配的空间。
附图说明
图1是本发明实施例的方法流程示意图;
图2是本发明实施例的三维数据组织结构图;
图3是本发明实施例的寻址方法的工作原理图。
具体实施方式
本发明提供了一种用于存算处理单元的寻址方法,现结合附图对本发明优选实施例进行详细说明。
本发明提供的一种用于存算处理单元的寻址方法,步骤包括:
S1,将存储空间编码为连续地址;
S2,将所述存储空间划分为n个子存储空间;
S3,将三维数据组织为单元-条带-平面-立方体结构;
S4,将所述三维数据以S3步骤中所述的平面为单位,按顺序依次放置于S2步骤所述的n个子存储空间;
S5,对所述三维数据进行并行寻址。
在本发明优选实施例中,所述存储空间包括全局缓存空间,所述子存储空间包括逻辑bank。
在本发明优选实施例中,S2步骤中将所述存储空间等分为n个子存储空间,n至少为2。
在本发明优选实施例中,S3步骤中,所述单元为每次dma搬运的多字节组成的单体,所述条带是为宽度方向的所述单元组成的条带,所述平面为深度方向的多个所述条带组成的平面,所述立方体为高度方向所述平面组成的立方体。
在本发明优选实施例中,S4步骤中,将所述三维数据以S3步骤中所述的平面为单位,每个所述平面放置于不同的S2步骤中划分的子存储空间,将所述三维数据的平面按顺序依次放置于所述n个子存储空间,n至少为2。
在本发明优选实施例中,所述n个子存储空间中n至少为2时,S4步骤中,对所述三维数据的平面和所述子存储空间按顺序排序,将所述三维数据以S3步骤中所述的平面为单位,所述三维数据的第一个平面放置于第一个所述子存储空间,所述三维数据的第二个平面放置于第二个所述子存储空间,以此类推将所述三维数据的每个平面按顺序放置于所述n个子存储空间;若所述三维数据的平面的个数大于所述子存储空间的个数,则所述子存储空间完成一轮所述三维数据的平面的放置后,自第一个子存储空间继续放置所述三维数据的平面,以此类推,直到所有的所述三维数据的平面均放置于所述子存储空间。
在本发明优选实施例中,若所述三维数据的单元-条带-平面只能放置于一个子存储空间的连续地址段,当所述三维数据的平面需跨越放置于最后子存储空间与第一个子存储空间时,所述第一个子存储空间的地址增加一个所述三维数据的平面的大小并放置所述三维数据的平面。
在本发明优选实施例中,步骤S5中对所述三维数据进行并行寻址时,dma配置所述三维数据的单元-条带-平面-立方体的参数,所述dma读取完一个子存储空间存储的一个所述三维数据的平面后,所述dma自动读取下一个子存储空间存储的一个所述三维数据的平面,当所述dma需跨越最后子存储空间与第一个子存储空间完成读取时,所述dma自动跳转到所述第一个子存储空间进行读取。
在本发明优选实施例中,所述dma读取完一个子存储空间存储的一个所述三维数据的平面后,所述dma的访问地址自动增加一个所述子存储空间的地址使所述dma自动读取下一个子存储空间存储的一个所述三维数据的平面。
在本发明优选实施例中,当所述dma需跨越最后子存储空间与第一个子存储空间完成读取时,所述dma自动跳转到所述第一个子存储空间进行读取,同时所述三维数据的平面的访问地址增加一个所述三维数据的平面的大小。
在本发明优选实施例中,多个dma可并行搬运数据。
在本发明优选实施例中,所述三维数据包括神经网络的feature数组。
优选的,步骤S1中,将全局缓存空间的所有空间编码为连续地址,支持一般的顺序寻址模式。
优选的,步骤S2中,将整片全局缓存空间空间划分成多个等分逻辑bank空间,bank之间地址连续。
优选的,将神经网络的feature数组组织成单元-条带-平面-立方体的组织结构。
以长×宽×通道=H×W×C=56×56×192的神经网络的feature数组为例,每个通道占1B空间,rdma一次搬运64B数据,即搬运64个通道的数据,搬运次序依次为C → W →H。按照单元-条带-平面-立方体存在如下关系:
unitNum(单元个数)=W = 56;
sliceNum(条带数)=C / unitTransferNum(单次搬运数据量) = 192/64 = 3 ;
planeNum(平面数)=H = 56;
cubeNum (立方体数)=1;
sliceSize(条带大小)= unitTransferNum × unitNum = 64 × 56 = 3584;
planeSize(平面的大小)= sliceSize × sliceNum = 64×56×3 = 10752;
cubeSize(立方体大小)= planeSize × planeNum = 602112;
wrapSkip(地址偏移)= planeSize = 10752。
在本发明优选实施例中,通过interleave模式放置数据。
在本发明的一个优选实施例中,全局缓存空间空间等分为8个bank空间,interleave模式下三维数据放置到8个bank上,以平面为边界,即平面0放置于bank0, 平面1放置于bank1…平面7放置于bank7,平面8放置于bank0(注意地址偏移wrapSize=planeSize)…以此类推将所有平面放置到8个bank上。
interleave模式下放置神经网络的feature数组到bank上。其中可将平面绑定到bank上,即单元-条带-平面只能放在一个bank的连续地址段,连续的平面放置于连续的bank上,提供平面间的并行访问能力。当平面跨越最后bank与第一个bank时,第一个bank的地址增加一个平面的大小(planeSize)开始放置新的平面,如此循环将所有的平面均匀放置到bank上。
interleave模式访问神经网络的feature数组。dma配置单元-条带-平面-立方体参数,打开interleave模式,能在平面读取结束时滑动地址到下一个bank(地址自动增加一个bank的地址),直到最后一个bank,跨越最后一个bank与第一个bank时与放置类似,地址bank编码切换到第一个bank,并且平面访问的地址需要增加一个平面的大小(planeSize)。
整个访问过程以横向平移,纵向增加planeSize,如此往复,直到所有立方体访问结束。
以上过程是平面的interleave模式访问,其他维度的interleave模式访问与此类似,数据摆放维持一个平面放置于一个bank上,主要区别在访问模式上。 如果是条带的维度以interleave模式访问,则是条带读取结束则跳转到下一个bank(累加n*512K),单元、立方体维度类似。
以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。