发明内容
(一)要解决的技术问题
本发明所要解决的技术问题是现有的数据缓冲装置不适于并行滤波运算,导致运算效率不足的问题。
(二)技术方案
本发明提出一种用于并行滤波运算的数据缓存装置,包括缓冲区实体,该缓冲区实体用于缓冲来自一个多粒度存储器的数据,所述数据缓存装置还包括读缓冲逻辑、初始化缓冲逻辑和更新缓冲逻辑,其中,所述数据缓存装置的输入信号包括读缓冲区使能信号、读缓冲区列号、读缓冲区列内偏移、初始化开始信号和列移信号;所述数据缓存装置的输出信号包括作用于所述多粒度存储器的由读请求、读粒度和读地址组成的信号组;所述读缓冲逻辑用于接收所述读缓冲区使能信号、读缓冲区列号、读缓冲区列内偏移,并且根据这些信号读取所述缓冲区实体某一列的数据;所述初始化缓冲逻辑用于在初始化开始信号有效时对所述缓冲区实体进行初始化;所述更新缓冲逻辑用于在所述列移信号有效时,按列整体移动缓冲区实体,同时输出所述作用于所述多粒度存储器的信号组。
根据本发明的一种具体实施方式,所述述缓冲区实体包括三个部分:上区、主区和下区。
根据本发明的一种具体实施方式,所述上区和下区的大小相等,尺寸由滤波计算的滤波系数决定;所述主区的大小与所述二维滤波运算的向量乘累加器的运算尺寸有关。
根据本发明的一种具体实施方式,当向量乘累加器运算尺寸为BS,最大支持滤波系数为K×K时,所述上区和下区均为(K-1)/2×K的二维阵列,所述主区为BS×K的二维阵列,其中K为支持的最大滤波模板尺寸。
根据本发明的一种具体实施方式,当初始化该数据缓存装置时,所述初始化逻辑使所述从多粒度存储器取得的数据对应待滤波数据矩阵的第1~K-(k-1)/2列,并将所述数据放入所述主区的第(k-1)/2+1~K列。
根据本发明的一种具体实施方式,当初始化该数据缓存装置时,当加载到主区的数据不含待滤波数据矩阵的最后一行数据时,对于所述主区第1~BS行与第(k-1)/2+1~K列交叉的部分,需要加载多粒度存储器里面的相应待滤波数据;若加载的数据含待滤波数据矩阵的最后一行数据,且当前加载的行数为N且N<BS时,主区第1~N行与第(k-1)/2+1~K列交叉的部分,需要加载多粒度存储器里面的相应待滤波数据,而主区(102)的第N+1~BS行与第(k-1)/2+1~K列交叉的部分,根据填充模式选择信号来决定是填零还是填充第N行的对应元素;主区第1~(k-1)/2列则根据填充模式选择信号来决定是填零还是填充主区的第(k-1)/2+1列的元素。
根据本发明的一种具体实施方式,当初始化该数据缓存装置时,若加载到所述主区的数据包含了待滤波数据矩阵的第一行,则所述上区的第(k-1)/2+1~K列的填充是根据填充模式选择信号来决定是填充零还是填充主区的对应边界数据;若加载到所述主区的数据不包含待滤波数据矩阵的第一行,则需要从多粒度存储器里面取特定位置的值来填充;所述上区的第1~(k-1)/2列则根据填充模式选择信号来决定是填零还是填充上区的第(k-1)/2+1列数据得到。
根据本发明的一种具体实施方式,当初始化该数据缓存装置时,若加载到所述主区的数据包含了待滤波数据矩阵的最后一行,则所述下区的第(k-1)/2+1~K列的填充是根据填充模式选择信号来决定是填充零还是填充主区的对应边界数据;若加载的数据不包含待滤波数据矩阵的最后一行,则需要从多粒度存储器里面取特定位置的值来填充;所述下区的第1~(k-1)/2列则根据填充模式选择信号来决定是填零还是填充下区的第(k-1)/2+1列数据。
根据本发明的一种具体实施方式,当读取该数据缓存装置时,所述读缓冲逻辑通过读缓冲区列号、读缓冲区列内偏移读出所述数据缓冲区实体中某一列的BS个元素。
根据本发明的一种具体实施方式,当所述列移信号有效时,所述缓冲区实体按列整体移动,最左边的一列移出舍弃,最右边一列从所述多粒度存储器里面取数。
(三)有益效果
本发明提出的应用于并行滤波运算的数据缓存装置,可以在滤波前对数据进行处理,在滤波时提供并行运算所需的数据,充分利用数据局部性原理,减少访存次数,达到数据的最大利用率。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
本发明需要利用支持多粒度并行读写的存储器(或称多粒度存储器),该多粒度存储器的描述参见申请号为201110460585.1、名称为“多粒度并行存储系统与存储器”的中国专利公开说明书。
图1显示了本发明的用于并行滤波运算的数据缓存装置在二维滤波装置中的位置。如图1所示,该图为并行滤波运算对应的装置结构图。该装置中主要包括以下几个部分:多粒度存储器10、数据缓存装置200、系数缓冲区30、向量运算部件40和命令队列50。其中数据缓存装置200包括数据缓存体2001和数据缓冲控制单元2002,用来缓存待滤波数据的部分元素,并进行数据的读取与更新;系数广播装置30包括系数缓存体301和系数缓冲区控制单元302、303、304,用来缓存滤波系数,并对所读取缓冲体301的数据进行广播;存储器10用来存储并行运算的数据、系数以及滤波完毕后的结果数据,该存储器一般包括三个存储块,如存储块101存放待滤波数据,102存放滤波系数,103存放滤波结果;命令队列50用来存放并行运算的操作队列;运算部件40用来做各种运算,该部件可以同时进行一个或多个运算,并将滤波结果写入多粒度存储器103中。
图2为本发明的用于并行滤波运算的数据缓存装置的结构图。如图2所示,该数据缓存装置包括缓冲区实体10、读缓冲逻辑20、初始化缓冲逻辑30和更新缓冲逻辑40。该数据缓存装置的输入信号包括读缓冲区使能信号102、读缓冲区列号103、读缓冲区列内偏移104、初始化开始信号105、填充模式选择信号110、初始化逻辑30或更新缓冲逻辑40从多粒度存储器取得的数据108、滤波系数模板宽度106和列移信号109。数据108是初始化逻辑30或更新逻辑40从多粒度存储器取得的数据。该数据缓存装置的输出信号包括读取的缓冲区数据1001和初始化逻辑30或更新逻辑40对多粒度存储器的由读请求、读粒度和读地址组成的信号组107。
下面来描述本发明的数据缓存装置的各组成部分的作用。
缓冲区实体10的作用是缓冲来自多粒度存储器的数据,为本发明的存储实体部分;读缓冲逻辑20接收外部的读缓冲区使能信号102、读缓冲区列号103、读缓冲区列内偏移104,并且根据这些信号读取缓冲区实体10某一列的BS个数据;初始化缓冲逻辑30在外部输入的初始化开始信号105有效时对缓冲区实体10进行初始化;更新缓冲逻辑40在列移信号109有效时,按列整体移动缓冲区实体10,同时作用于多粒度存储器的读请求、读粒度和读地址信号组107。
根据本发明,上述缓冲区实体10包括三部分:上区101、主区102和下区103,三个区域以二维网格的形式组成了整个数据缓冲区的实体部分。其中上区101和下区103大小相等,其尺寸与二维滤波系数尺寸有关,主区102大小与二维滤波装置的向量乘累加器运算尺寸有关。现假定每个区域的最小组成单元为8bit大小,二维滤波实现结构的向量乘累加器运算尺寸为BS,最大支持滤波系数为K×K,则如图3所示,三个区域分别大小为:上区101和下区103均为一个(K-1)/2×K的二维阵列,主区102为一个BS×K的二维阵列,其中K为支持的最大滤波模板尺寸,BS为运算尺寸,各个区域二维阵列中的每个元素大小为8bit。
下面来具体说明本发明的数据缓存装置的工作过程。
当初始化开始信号105有效时,开始了缓冲区的初始化工作,即初始化逻辑30通过对多粒度存储器的读请求、读粒度和读地址信号组107作用,使得多粒度存储器取得的数据108对应待滤波数据矩阵的第1~K-(k-1)/2列,并将数据108放入缓冲区实体10的主区102的第(k-1)/2+1~K列,其中K是指本发明所能支持的最大模板,k是指当前滤波系数模板大小;之后再根据填充模式选择信号110,将主区102的第1~(k-1)/2列、上区101和下区103初始化。填充模式选择信号110在处理待滤波数据矩阵的第一列时决定了主区102的第1~(k-1)/2列的填充内容,在处理待滤波数据矩阵的最开始BS行时决定了上区101的填充内容,在处理待滤波数据矩阵的最后BS行时,决定了下区103的填充内容,其内容来源可以填充零,也可以填充临近主区的内容。
上述初始化完毕后,外部功能部件或者类似于二维滤波实现结构中的向量乘累加器即可以对本发明的数据缓存装置进行读操作了,在缓冲区内部是通过读缓冲逻辑20实现的,读缓冲逻辑20在读缓冲区使能信号102有效时,通过读缓冲区列号103、读缓冲区列内偏移104,读出需要的数据缓冲区实体10中某一列的BS个元素。
当列移信号109有效时,整个缓冲区实体10按列整体移动,最左边的一列移出舍弃,最右边一列从多粒度存储器里面取数,若待滤波数据矩阵的最后一列已经取到数据缓冲区实体中,则在列移时,根据填充模式选择信号110来决定是复制边界元素,还是直接在最右列填零。通过重复上述的初始化数据缓冲区、列移缓冲区过程,可以将一个大的待滤波数据矩阵加载到数据缓冲区中。
图4是本发明的一个实施例中一个大滤波数据矩阵与数据缓冲区实体10的存放对应关系图。如图4所示,其中section(i)部分为即将进行滤波运算的数据,其行数为BS,列数没有限定。section(i-1)为待滤波数据矩阵中处于section(i)上方且与其相邻的(k-1)/2行(如果存在),section(i+1)为待滤波数据矩阵中处于section(i)下方且与其相邻的(k-1)/2行(如果存在)。
在数据缓冲区的初始化阶段,对于上区101、主区102和下区103的填充遵从以下一般规则:
[规则1]主区102的填充
当加载到主区102的数据不含待滤波数据矩阵的最后一行数据时,对于缓冲区主区102第1~BS行与第(k-1)/2+1~K列交叉的部分,需要加载多粒度存储器里面的相应待滤波数据;若加载的数据含待滤波数据矩阵的最后一行数据,且当前加载的行数为N,N<BS时,主区102第1~N行与第(k-1)/2+1~K列交叉的部分,需要加载多粒度存储器里面的相应待滤波数据,而主区102的第N+1~BS行与第(k-1)/2+1~K列交叉的部分,根据填充模式选择信号110来决定是填零还是填充第N行的对应元素。
主区102第1~(k-1)/2列则根据填充模式选择信号110来决定是填零还是填充主区102的第(k-1)/2+1列的元素。
[规则2]上区101的填充
若加载到主区102的数据包含了待滤波数据矩阵的第一行,则上区101的第(k-1)/2+1~K列的填充是根据填充模式选择信号110来决定是填充零还是填充主区102的对应边界数据;若加载到主区102的数据不包含待滤波数据矩阵的第一行,则需要从多粒度存储器里面取特定位置的值来填充。上区101的第1~(k-1)/2列则根据填充模式选择信号110来决定是填零还是填充上区101的第(k-1)/2+1列数据得到。
[规则3]下区103的填充
若加载到主区102的数据包含了待滤波数据矩阵的最后一行,下区的第(k-1)/2+1~K列的填充是根据填充模式选择信号110来决定是填充零还是填充主区102的对应边界数据;若加载的数据不包含待滤波数据矩阵的最后一行,则需要从多粒度存储器里面取特定位置的值来填充。下区103的第1~(k-1)/2列则根据填充模式选择信号110来决定是填零还是填充下区103的第(k-1)/2+1列数据。
上述规则的执行在下面将详细说明。
在数据缓冲区的列移阶段,当加载到待滤波矩阵的最后一列元素时,对于上区101、主区102和下区103的填充遵从以下一般规则:
[规则4]:缓冲区实体10列移时的填充
此时每发生一次列移,缓冲区实体10的上区101、主区102和下区103所需新移入的数据,根据填充模式选择信号110来决定是填充零还是复制当前各个区域最右侧一列的数据。
本实施例中,假定如图1所示的二维滤波装置中的多粒度存储器的读写位宽或向量乘累加器的运算尺寸BS=4,最大可支持滤波系数模板K×K=5×5,待滤波数据D为17×9的矩阵,实际滤波模板T为3×3的矩阵,即k=3,则由上面的描述可以知道数据缓冲区实体10的各个区域大小如图6所示,即上区101和下区103的尺寸为2×5的二维网格,主区103的尺寸为4×5的二维网格,且各个区域二维阵列中的每个元素大小为8bit。同时假定填充模式选择信号110指定填充边界元素。待滤波数据矩阵D和滤波模板T如下所示:
下面说明如何将上述待滤波数据矩阵加载到数据缓冲区实体中。
图5为上述待滤波数据矩阵D在多粒度存储器的分布情况。如图可以看出,待滤波数据矩阵的每四行数据依次被放入多粒度存储器的各个bank中,这样可以做到将每个BS=4行数据,逐列取出。
图6所示缓冲区实体10适应于本施例时的大小,同时上面标注的数字为初始化完毕后,所加载的部分待滤波数据矩阵元素。由前面叙述的[规则1]、[规则2]和[规则3]可知,待滤波数据矩阵的第1~4行和第1~4列交叉位置的数据被放入了缓冲区实体10的主区102的第2~5列中,主区102的最左边(K-1)/2=1列按填充模式选择信号110,填充了边界元素;对于上区101的第2~5列,由于加载的数据包含待滤波数据矩阵的第1行,所以根据填充模式选择信号110,填充了边界元素。对于上区101的第1列,同样根据填充模式选择信号110,填充了上区102的第2列;对于下区103的第2~5列,由于加载的数据不包含待滤波数据矩阵的最后一行,故此时应加载多粒度存储器的特定值,即待滤波系数矩阵的第5行的特定元素。对于下区103的第1列,同样根据填充模式选择信号110,填充了上区103的第2列。另外由于本施例中实际滤波模板k<最大支持滤波模板K,存在在滤波算法过程中不使用的区域,即图中标注x的区域。
对缓冲区实体10读操作,读缓冲逻辑20在读缓冲区使能信号102有效时,通过读缓冲区列号103、读缓冲区列内偏移104,读出需要的数据缓冲区实体10中某一列的BS=4个元素。如在本施例中,读缓冲区使能信号102有效时,读缓冲区列号103为1,读缓冲区列内偏移104分别为1、2、3时,分别返回如下三组数据:d1={1、1、10、19};d2={1、10、19、28};d3={10、19、28、28}。这些数据恰好是基于本发明的二维滤波结构前三次运算所需要的数据。
图7为列移信号109有效时,数据缓冲区实体10内容变化图。由图中可以看出,此时缓冲区实体10的整个最左边一列被移除,而最右边一列则加载了待滤波数据矩阵第5列的前BS个元素。
通过不断的列移,待滤波数据矩阵的第9列的前BS个数据也加载到了缓冲区实体102中,即待滤波数据矩阵D的前BS=4行数据均已经加载到过数据缓冲区实体10的主区102中了。
图8为加载待滤波数据矩阵的第5~8行的初始化后数据分布图。此时和加载前BS=4行数据初始化所不同的是边界数据填充的区别,根据前述[规则1]、[规则2]和[规则3]可以知道,对于主区102的第2~5列,填充多粒度存储器中的值,即待滤波数据矩阵的第5~8行与其第1~4列交叉的数据元素。对于主区102的边界第(k-1)/2=1列,填充主区102的第二列;对于上区101的第2~5列,加载待滤波数据矩阵的第4行和第1~4列交叉部分的数据。对于上区101的第1列,填充上区101的第2列;对于下区103的第2~5列,加载对应待滤波矩阵数据的第9行数据的前4列元素。对于下区103的第1列,填充下区103的第2列。
图9为列移信号109有效时,数据缓冲区实体10内容变化图。由图中可以看出,此时缓冲区实体10的整个最左边一列被移除,而最右边一列则加载了待滤波数据矩阵第5列的前BS个元素。
此时通过重复上述的初始化数据缓冲区、列移缓冲区过程,可以将待滤波数据矩阵D的第5~8行加载到缓冲区实体主区102中去。
类似的,可以将待滤波数据矩阵的第9~12和第13~16行数据加载到缓冲区实体102中去。
图10为加载待滤波数据矩阵的第17行的初始化后数据分布图,也就是加载待滤波数据矩阵的最后一行的情况。此时和加载前面各行数据初始化所不同的是边界数据填充的区别,根据前述[规则1]、[规则2]和[规则3]可以知道,对于主区102的第1行和第2~5列交叉的地方,填充多粒度存储器中的值,即待滤波数据矩阵的第17行的前BS=4个数据元素,对于主区102的第2~4行和第2~5列交叉的地方,填充主区102第一行的对应元素。对于主区102的边界第(k-1)/2=1列,填充主区102的第二列;对于上区101的第2~5列,加载待滤波数据矩阵的第16行前BS=4个数据元素。对于上区101的第1列,填充上区101的第2列;对于下区103的第2~5列,填充待滤波数据矩阵的第17行在上区101中的数据元素。对于下区103的第1列,填充下区103的第2列。
图11为列移信号109有效时,数据缓冲区实体10内容变化图。由图中可以看出,此时缓冲区实体10的整个最左边一列被移除,而最右边一列则加载了第17行待滤波数据矩阵的一个数据。
此时通过重复上述的初始化数据缓冲区、列移缓冲区过程,可以将待滤波数据矩阵D的第17行加载到缓冲区实体102中去,并且相应的位置做了正确的填充。
到此处,已经将整个待滤波数据矩阵D顺序的加载到了数据缓冲区中。
采用本发明完成二维滤波实现结构中的待滤波数据缓冲功能,具有以下有益效果:
1.滤波速度快。在运算操作数供应充分的前提下,二维滤波实现结构比传统标量实现快BS倍,而本发明则使得该前提得以满足。
2.减少访存次数,提高数据使用效率。通过本发明可以解决传统处理器对数据的重复加载问题,充分利用数据局部性,提高数据使用效率,减少访存次数。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。