基于片上缓存的数据保存方法及装置、存储介质与流程

文档序号:23469572发布日期:2020-12-29 13:09阅读:179来源:国知局
基于片上缓存的数据保存方法及装置、存储介质与流程

本发明涉及图像处理技术领域,具体而言,涉及一种基于片上缓存的数据保存方法及装置、存储介质。



背景技术:

图像滤波器作为计算机视觉中最基本的算子类型,由于可以对任一像素将其一定大小的邻域点作为输入,并产生一个输出,因此,这类算子的范围非常广泛,凡是具有局部特性的算子都可以包括在内。从使用方式上看,滤波算法通常是作为更复杂的特征分析提取等算法的预处理算法存在,且通常需要使用多个滤波器级联使用,所以其设计和性能优化通常是算法设计中的重要一环,关系到整个系统的有效性和实时性。

现有技术中,对于滤波器的优化大多集中在对具体滤波算法的逻辑和在具体平台计算的优化上,对于算子本身的计算研究相对比较全面。在内存架构方面,通常的优化集中在如何提高算法的内存访问友好性,以及如何利用算法和平台的特性预先完成数据从动态随机存取存储器(dynamicrandomaccessmemory,简称dram)到片上缓存的预加载,从而避免未命中代价,例如,相关技术中,将dram的数据读取存储与计算单元的运算同时进行的处理模式,其目的是尽量消除数据读写带来的延时。

多级滤波器问题可以描述为一幅输入图像(任意描述方式)依次经过任意多个滤波器产生一副图像输出(任意描述方式),输入图像和输出图像位于动态随机存储器dram中。除最终输出之外的多个滤波器中间的输出结果,则不要求采用特定方式输出,可根据平台优化需要进行处理。这些中间滤波环节如果不特殊设计,采用单个滤波器组合的方式处理,则都会将其输出写入到dram,而下一级滤波器则重新从dram中加载作为输入,每一级产生dram写入读出操作对内存系统会产生较大压力,在整个系统内存读写带宽受限的情况下,这些读写会成为拖累运行的瓶颈,造成所有存在dram读写行为的程序性能下降。

针对相关技术中,多级滤波器的所有输出均保存至dram中,导致频繁的对dram进行读写操作,对dram造成了较大压力,降低运行速率等问题,尚未提出有效的技术方案。



技术实现要素:

本发明实施例提供了一种基于片上缓存的数据保存方法及装置、存储介质,以至少解决相关技术中多级滤波器的所有输出均保存至dram中,导致频繁的对dram进行读写操作,对dram造成了较大压力,降低运行速率等问题。

本发明实施例提供了一种基于片上缓存的数据保存方法,包括:获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

在一个可选实施例中,在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存,包括:确定所述行算子所对应的目标滤波器;获取所述目标滤波器的下一级滤波器的p个输入,以及所述p个输入所对应的片上缓存的地址范围,其中,p为正整数;根据所述地址范围在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存。

在一个可选实施例中,所述片上缓存为环形缓存,将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存,包括:在所述行算子对应的是第n行输出结果的情况下,将所述中间结果保存在所述环形缓存的第n%l中,其中,n和l均为正整数,l为所述片上缓存的大小,n%l用于表示n对l取余。

在一个可选实施例中,在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存之后,所述方法还包括:向所述目标设备申请所述行算子对应大小的片上缓存,以使所述片上缓存保存所述行算子的中间结果。

在一个可选实施例中,按照预设时序调用所述多级滤波器的行算子,得到执行结果,包括:对于所述多级滤波器中的每一级滤波器,建立所述每一级滤波器的p个输入与所述每一级滤波器对应的片上缓存的映射表,其中,p为整数;按照预设时序依次遍历多级滤波器,在当前滤波器的p个输入所对应的数据已经由前级滤波器生成的情况下,则运行所述当前滤波器的行算子,并递增所述当前滤波器的行计数;在所述多级滤波器全部遍历完,且最后一级滤波器的行计数未达到所述多级滤波器的总行数的情况下,重新遍历所述多级滤波器;在所述多级滤波器全部遍历完,且已达到所述多级滤波器的总行数的情况下,确定所述多级滤波器的调度执行完毕。

在一个可选实施例中,所述方法还包括:以所述p个输入对应的行号作为索引在所述映射表中查找所述当前滤波器的行算子输入的片上缓存地址数组;将所述当前滤波器的输出行号作为索引在所述映射表中查找所述当前滤波器的行算子输出的片上缓存地址数组;将所述中间结果保存在根据所述行算子输出的片上缓存地址数组确定的片上缓存上。

根据本发明的另一个实施例,还提供了一种基于片上缓存的数据保存装置,包括:获取模块,用于获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;设置模块,用于在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;处理模块,用于按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

在一个可选实施例中,上述设置模块,还用于确定所述行算子所对应的目标滤波器;获取所述目标滤波器的下一级滤波器的p个输入,以及所述p个输入所对应的片上缓存的地址范围,其中,p为正整数;将所述地址范围作为所述行算子设置的目标设备的片上缓存的大小。

在一个可选实施例中,所述处理模块,还用于在所述行算子对应的是第n行输出结果的情况下,将所述中间结果保存在所述环形缓存的第n%l中,其中,n和l均为正整数,l为所述片上缓存的大小,n%l用于表示n对l取余。

在一个可选实施例中,所述处理模块,还用于向所述目标设备申请所述行算子对应大小的片上缓存,以使所述片上缓存保存所述行算子的中间结果。

在一个可选实施例中,所述处理模块,还用于对于所述多级滤波器中的每一级滤波器,建立所述每一级滤波器的p个输入与所述每一级滤波器对应的片上缓存的映射表,其中,p为整数;按照预设时序依次遍历多级滤波器,在当前滤波器的p个输入所对应的数据已经由前级滤波器生成的情况下,则运行所述当前滤波器的行算子,并递增所述当前滤波器的行计数;在所述多级滤波器全部遍历完,且最后一级滤波器的行计数未达到所述多级滤波器的总行数的情况下,重新遍历所述多级滤波器;在所述多级滤波器全部遍历完,且已达到所述多级滤波器的总行数的情况下,确定所述多级滤波器的调度执行完毕。

在一个可选实施例中,所述处理模块,还用于以所述p个输入对应的行号作为索引在所述映射表中查找所述当前滤波器的行算子输入的片上缓存地址数组;将所述当前滤波器的输出行号作为索引在所述映射表中查找所述当前滤波器的行算子输出的片上缓存地址数组;将所述中间结果保存在根据所述行算子输出的片上缓存地址数组确定的片上缓存上。

根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本发明,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存,即对于多级滤波器的中间结果,可以保存在预先为多级滤波器分配的片上缓存,无需保存在dram中,采用上述技术方案,解决了相关技术中,多级滤波器的所有输出均保存至dram中,导致频繁的对dram进行读写操作,对dram造成了较大压力,降低运行速率等问题,从整体上消除了中间结果的临时dram读写损耗,从系统的角度提升了运行速度并降低了内存系统负载,克服了单个算法无法综合优化的固有缺陷,提高了运算速度。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种基于片上缓存的数据保存方法的计算机终端的硬件结构框图;

图2是根据本发明实施例的基于片上缓存的数据保存方法的流程图;

图3是根据本发明可选实施例的多级滤波器的算子构造和调度方式的流程示意图;

图4是根据本发明实施例的基于片上缓存的数据保存装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请实施例所提供的方法可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种基于片上缓存的数据保存方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,可选地,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示等同功能或比图1所示功能更多的不同的配置。存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的基于片上缓存的数据保存方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。

根据本发明的一个实施例,提供了一种基于片上缓存的数据保存方法,可以应用于上述计算机终端中,图2为根据本发明实施例的基于片上缓存的数据保存方法的流程图,如图2所示,包括:

步骤s202,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;

步骤s204,所述行算子在目标设备上分配的与所述行算子对应大小的片上缓存;

步骤s206,按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

通过上述步骤,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存,即对于多级滤波器的中间结果,可以保存在预先为多级滤波器分配的片上缓存,无需保存在dram中,采用上述技术方案,解决了相关技术中,多级滤波器的所有输出均保存至dram中,导致频繁的对dram进行读写操作,对dram造成了较大压力,降低运行速率等问题,从整体上消除了中间结果的临时dram读写损耗,从系统的角度提升了运行速度并降低了内存系统负载,克服了单个算法无法综合优化的固有缺陷,提高了运算速度。

上述步骤s204设置目标设备的片上缓存的大小方式有多种,在一个可选实施例中,可以通过以下方案实现:确定所述行算子所对应的目标滤波器;获取所述目标滤波器的下一级滤波器的p个输入,以及所述p个输入所对应的片上缓存的地址范围,其中,p为正整数;将所述地址范围作为所述行算子设置的目标设备的片上缓存的大小。

也就是说,在确定行算子所对应的目标滤波器后,通过获取目标滤波器的下一级滤波器的p个输入以及p个输入所对应的片上缓存的地址范围,进而根据地址范围在目标设备上为行算子设置片上缓存的大小。

可选地,所述片上缓存为环形缓存,将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存,包括:在所述行算子对应的是第n行输出结果的情况下,将所述中间结果保存在所述环形缓存的第n%l中,其中,n和l均为正整数,l为所述片上缓存的大小,n%l用于表示n对l取余。

为了便于各级输出,片上缓存采用环形缓存的结构,当确认行算子对应的是第n行输出结果的情况时,将其他中间结果保存在环形缓存的第n%l中,例如,假设片上缓存的大小为l个缓存行,对于任一滤波算子,当调度其计算第n行输出时,其输出结果实际被写入环形缓存的第n%l行中,相当于将中间结果输出均被折叠到总数为l的缓存行中,并且各缓存行的宽度与原输出相同,从而确定出各级缓存行数量l的大小。

可选地,在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存之后,所述方法还包括:向所述目标设备申请所述行算子对应大小的片上缓存,以使所述片上缓存保存所述行算子的中间结果。

在目标设备的片上缓存上完成对行算子缓存大小的设置之后,还需要向目标设备申请设置好大小的片上缓存需要的内存使用空间,便于在片上缓存保存行算子的中间结果,减少中间结果的临时dram读写损耗。

可选地,按照预设时序调用所述多级滤波器的行算子,得到执行结果,包括:对于所述多级滤波器中的每一级滤波器,建立所述每一级滤波器的p个输入与所述每一级滤波器对应的片上缓存的映射表,其中,p为整数;按照预设时序依次遍历多级滤波器,在当前滤波器的p个输入所对应的数据已经由前级滤波器生成的情况下,则运行所述当前滤波器的行算子,并递增所述当前滤波器的行计数;在所述多级滤波器全部遍历完,且最后一级滤波器的行计数未达到所述多级滤波器的总行数的情况下,重新遍历所述多级滤波器;在所述多级滤波器全部遍历完,且已达到所述多级滤波器的总行数的情况下,确定所述多级滤波器的调度执行完毕。

也就是说,在按照预设时序调用多级滤波器的行算子时,为了提高调用效率,需要为多级滤波器中的每一级滤波器均建立每一级滤波器的多个输入与每一级滤波器对应的片上缓存的映射表,进而在进行多级滤波器的遍历时,当发现当前滤波器的多个输入所对应的数据已经由前级滤波器生成时,直接运行当前滤波器的行算子并递增行计数,在完全遍历多级滤波器后,发现最后一级滤波器的行计数未达到多级滤波器的总行数时,需要重新遍历多级滤波器,直到最后一级滤波器的行计数达到多级滤波器的总行数要求时,才确定多级滤波器的调度过程执行完毕。

举例说明,可将所有滤波器的当前行先设置为0,从第一级滤波器开始,依次扫描各级滤波器,判断每一级算子欲计算当前行所依赖的前级输出行是否已经被生成,如果已经生成则运行算子一次并增加当前行号,如果尚未生成则停止当前多级滤波器扫描,重新从第一级滤波器开始新一轮扫描。重复这一流程,直到最后一级输出的所有行都被生成,整个计算流程结束。

可选地,上述方法还包括:以所述p个输入对应的行号作为索引在所述映射表中查找所述当前滤波器的行算子输入的片上缓存地址数组;将所述当前滤波器的输出行号作为索引在所述映射表中查找所述当前滤波器的行算子输出的片上缓存地址数组;将所述中间结果保存在根据所述行算子输出的片上缓存地址数组确定的片上缓存上。

由于对多级滤波器中的每一级滤波器均建立了每一级滤波器的多个输入与每一级滤波器对应的片上缓存的映射表,进而通过输入对应的行号便可在映射表中查找当前滤波器的行算子输入的片上缓存地址数组,进一步的,在得到输出行号后,可以将输出行号作为索引来查找当前滤波器的行算子输出的片上缓存地址数组,从而将行算子的中间结果保存到根据输出行号查询到的片上缓存地址数组确定的输出片上缓存上。

为了更好的理解上述基于片上缓存的数据保存方法,以下结合本发明可选实施例提供的一种多级滤波器的设计、缓存分配以及执行调度方法,包括:为多级滤波器的每一级定义行算子,其中,所述行算子为每次处理图像的一行数据并将其输出的函数;根据行算子的输入特性计算这一级输入的最小缓存行数量,并为其分配相应大小的片上缓存;执行调度器以正确的时序循环调用各级行算子,每次设置各行算子输出到片上缓存的正确地址,末级行算子将计算结果输出到dram的正确地址。

可选的,所述定义行算子,包括:为每级滤波器,根据其功能设计计算函数作为行算子,设计中假设其只需负责计算输出一行图像数据,其依赖的输入数据地址和输出数据地址均由执行调度器提供并保证正确性;各个行算子计算所需的输入数据邻域大小,输入与输出数据的单个元素大小等行算子内存访问特性信息也需同时提供,为缓存分配和执行调度提供参考。

可选地,为各级滤波器进行最小片上缓存计算及分配,包括:对于每一级滤波器,进一步假设其行算子具有p个输入,也即其前一级滤波器具有p个输出,p为正整数;根据所述行算子内存访问特性信息确定此行算子的在单次执行中p个输入分别依赖的相对行号范围,根据以上p个相对行号范围及其关系,计算这p个输入分别对应的最小缓存行数l;根据所述行算子内存访问特性信息计算得到p个输入分别对应的单行大小,再结合其对应的所述最小缓存行数l,计算得到p个输入分别对应的片上缓存大小并分别为其分配片上缓存;为各级滤波器进行以上计算和分配,得到全部所需缓存。

可选地,执行调度器以正确的时序循环调用各级行算子,得到多级滤波器最终计算结果,包括:对每级滤波器,根据缓存分配中计算得到的缓存信息,建立其p个输入(即其前级滤波器的p个输出)的各行(总行数为待处理图像的高度h)到片上缓存地址的映射表;将各级滤波器行计数c清零,依次遍历各级滤波器,若当前滤波器的p个输入依赖行范围的数据都已经由前级滤波器生成(第一级滤波器输入为待处理图像,默认所有行号数据都已生成),则调度当前滤波器的行算子并递增当前滤波器行计数c,否则重新开始遍历各级滤波器,若各级滤波器全部遍历完毕且最后一级滤波器行计数c未达到总行数h,则重新开始遍历各级滤波器,若最后一级滤波器行计数c已达到总行数h,则全部计算已完成,执行调度器停止运行。

调度滤波器的行算子的流程为:以当前滤波器的p个输入在行计数c时(若已达到总行数h,则跳过此流程)的所有依赖行号作为索引查找映射表,得到的片上缓存地址数组作为行算子的输入,将当前滤波器的输出行号作为索引查找映射表,得到片上缓存地址数组作为算子的输出,调用行算子函数,计算结果即可将被保存到需要的缓存地址,作为下一级行算子的输入。

计算片上缓存地址映射表的流程为:对每级滤波器,根据在缓存计算步骤中计算得到的p个输入各自的最小缓存行数l及其环形缓存(ringbuffer)的使用模式,将各输入的第n行(0<n<总行数h)分别映射到其片上缓存的第(n%l)行中,将此行的首地址保存在映射表中;对于第一级滤波器的输入以及最后一级滤波器的输出,地址皆为dram中的实际地址而无需映射。

以下结合几个可选实施例对上述基于片上缓存的数据保存方法的流程进行解释说明,但不用于限定本发明实施例的技术方案。

本发明可选实施例提供了一种多级滤波器的算子构造和调度方式,对计算机视觉系统中作为预处理存在的滤波器进行优化,由于滤波器的输入输出数据特性会将输入图像一定大小的邻域像素作为输入并产生一个输出像素,对整个图像遍历,从而产生所有像素,因此,滤波器的数据访问具有局部性的特点,本发明可选实施例通过利用利用滤波器的数据访问具有局部性的这一的特征,将中间结果全部保持在片上缓存中(例如,中间结果可以保存在cache存储器或staticrandomaccessmemory,静态存储器,简称sram),从而消除内存读写的代价。

图3是根据本发明可选实施例的多级滤波器的算子构造和调度方式的流程示意图,如图3所示,具体分为以下步骤:

步骤1:用户(相当于本发明实施例中的目标对象)指定多级滤波器的行算子和输入输出数据特征;

由于本发明可选实施例是对计算机视觉系统中作为预处理存在的多级滤波器进行优化,该多级滤波器用于对目标图像进行处理,因此,多级滤波器问题可以描述为一幅输入图像(任意描述方式)依次经过任意多个滤波器产生一副图像输出(任意描述方式),输入图像和输出图像位于动态随机存储器dram中,除最终输出之外的多个滤波器中间的输出结果,则不要求采用特定方式输出,可根据平台优化需要进行处理。

在本发明可选实施例中,在滤波算子的构造上使用行算子,即单次算子的运行输出一行数据,以此作为滤波器运算的最小单元,调度逻辑则是对各级滤波器的行算子进行调度,产生多级滤波器的总输出。选择这样的算子粒度的主要原因是,其以行作为数据处理的单元,一次算子处理的数据量通常符合现行设备的片上缓存的数量级,对于cpu系统足以容纳在属性为高速缓冲存储器的cache存储器中,且通常与l1cache的尺寸相仿;对于数字信号处理(digitalsignalprocessing,简称dsp)系统以行为单位进行直接存储器访问(directmemoryaccess,简称dma)控制设置通常对于控制资源的使用和sram的尺寸都相对友好。另一原因是对于cpu或dsp等运算设备通常支持单指令多数据流(signalinstructionmultipledata,简称simd)操作,在针对一行的运算中可以有效利用其同时对多个像素实现并行化加速;且在运算中存在数据加载/存储指令,以行为单位的数据处理可以将即将处理的数据加载指令提前穿插在当前运算指令中将其加载延时予以消除。

可选的,由于多级滤波器的中间输出可以无需对用户可见也可以不必输出到dram,所以多级滤波器的中间输出是一种非必要的输出,在计算机视觉系统中多级滤波器的中间输出逻辑上可以等效为中间虚拟图像(任意描述方式),因此,用户可以通过指定多级滤波器的行算子和输入输出数据特征,进而通过良好的各级滤波器逻辑处理消除dram的读写。

步骤2:根据用户指定多级滤波器的行算子和输入输出数据特征,计算各级最小中间缓存大小和形式,在合适位置分配中间环形缓存;

本发明可选实施例使用片上缓存存放中间结果的数据(相当于本发明实施例中的中间结果),目标即是对任意一级中间输出设计最小缓存,恰好使其能够建立各级滤波器行算子的运算流水线。

可选的,各级输出在片上缓存存放时,可采用环形缓存(ringbuffer)的结构,具体的,假设片上缓存的大小为l个缓存行,对于任一滤波算子,当调度其计算第n行输出时,其输出结果实际被写入环形缓存的第(n%l)行中,相当于将各级原高度为图像高度的中间结果输出均被折叠到总数为l的缓存行中,各缓存行的宽度与原输出相同(包括必要的对齐等提高各平台运算效率的扩展),现目标即是要确定各级缓存行数量l的大小。

可选的,对于某一级中间缓存,可以假设前一级滤波器a有p个输出,后一级滤波器b有p个输入,同时滤波器b对于各个输入的访问邻域是已知的,即滤波器b行算子对于每次执行所依赖的各个输入的行号的范围是已知的。据此可以计算得到在单次行算子运行中,滤波器b所依赖的所有p个输入的行号范围,范围的大小即是各个中间缓存行的数量。当下次运行行算子b时,由于依赖的邻域按顺序往下平移一行,所以前一次的第一行不再被需要,在算子a的输出中可以用最新一行数据覆盖。对每个中间数据,都运用以上流程分析各个输入输出中缓存行的数量,同时根据算子逻辑确定缓存行的宽度,并对这部分空间进行预分配。

步骤3:运行行算子调度流程,按照预设时序调用行算子,计算最终图像输出;

在整个多级滤波器的运算中,按照以下方式调度各算子:先设置所有滤波器的当前行为0,从第一级滤波器开始,依次扫描各级滤波器,判断每一级算子欲计算当前行所依赖的前级输出行是否已经被生成,如果已经生成则运行算子一次并增加当前行号,如果尚未生成则停止当前多级滤波器扫描,重新从第一级滤波器开始新一轮扫描。重复这一流程,直到最后一级输出的所有行都被生成,整个计算流程结束。需要说明的是,在计算流程必须考虑边界问题以及simd计算所需的各种对齐问题。

本发明可选实施例所提到的多级滤波器的算子构造和调度方式的方案适用于任意带有片上缓存的运算设备。对于cpu的情形,片上缓存为其各级cache存储器,使用时只需申请前面计算的各中间缓存大小的内存,在运算流程中当各中间环形缓存都被填充一次之后,因为中间缓存较小通常可以保持在cache存储器中,往后的运算就自然不会有dram的访问,所有的读写都只进入cache存储器,从而避免大量的内存访问代价。对于数字信号处理系统,通常中间环形缓存位于片上的高速缓存中,除第一级与最后一级滤波器需要额外的dma搬移操作之外,其余中间缓存都始终位于片上缓存中,不会引入额外的dram读写开销,进而从整体上消除了中间结果的临时dram读写损耗,从系统的角度提升了运行速度并降低了内存系统负载,克服了单个算法无法综合优化的固有缺陷,提高了运算速度。

综上,本发明可选实施例提供了一种解决多级滤波器综合优化的方案,相对现有针对单个滤波器算法的优化,从整体上消除了中间临时结果的dram读写开销,从系统的角度提升了运行速度并降低了内存系统负载,克服了单个算法无法综合优化的固有缺陷,同时这一可选实施例可以被运用到任意带有片上缓存的运算设备,相对现有技术中针对某个平台的特殊优化,大大提升了其普适性,可以应用的场合更为广泛。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

在本实施例中还提供了一种基于片上缓存的数据保存装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本发明实施例的基于片上缓存的数据保存装置的结构框图,如图4所示,该装置包括:

获取模块40,用于获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;

设置模块42,用于在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;

处理模块44,用于按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

通过本发明,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述执行结果中所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存,即对于多级滤波器的中间结果,可以保存在预先为多级滤波器分配的片上缓存,无需保存在dram中,采用上述技术方案,解决了相关技术中,多级滤波器的所有输出均保存至dram中,导致频繁的对dram进行读写操作,对dram造成了较大压力,降低运行速率等问题,从整体上消除了中间结果的临时dram读写损耗,从系统的角度提升了运行速度并降低了内存系统负载,克服了单个算法无法综合优化的固有缺陷,提高了运算速度。

可选地,上述设置模块,还用于确定所述行算子所对应的目标滤波器;获取所述目标滤波器的下一级滤波器的p个输入,以及所述p个输入所对应的片上缓存的地址范围,其中,p为正整数;将所述地址范围作为所述行算子设置的目标设备的片上缓存的大小。

也就是说,在确定行算子所对应的目标滤波器后,通过获取目标滤波器的下一级滤波器的p个输入以及p个输入所对应的片上缓存的地址范围,进而根据地址范围在目标设备上为行算子设置片上缓存的大小。

可选地,上述处理模块,还用于在所述行算子对应的是第n行输出结果的情况下,将所述中间结果保存在所述环形缓存的第n%l中,其中,n和l均为正整数,l为所述片上缓存的大小,n%l用于表示n对l取余。

为了便于各级输出,片上缓存采用环形缓存的结构,当确认行算子对应的是第n行输出结果的情况时,将其他中间结果保存在环形缓存的第n%l中,例如,假设片上缓存的大小为l个缓存行,对于任一滤波算子,当调度其计算第n行输出时,其输出结果实际被写入环形缓存的第n%l行中,相当于将中间结果输出均被折叠到总数为l的缓存行中,并且各缓存行的宽度与原输出相同,从而确定出各级缓存行数量l的大小。

可选地,所述处理模块,还用于向所述目标设备申请所述行算子对应大小的片上缓存,以使所述片上缓存保存所述行算子的中间结果。

在目标设备的片上缓存上完成对行算子缓存大小的设置之后,还需要向目标设备申请设置好大小的片上缓存需要的内存使用空间,便于在片上缓存保存行算子的中间结果,减少中间结果的临时dram读写损耗。

可选地,所述处理模块,还用于对于所述多级滤波器中的每一级滤波器,建立所述每一级滤波器的p个输入与所述每一级滤波器对应的片上缓存的映射表,其中,p为整数;按照预设时序依次遍历多级滤波器,在当前滤波器的p个输入所对应的数据已经由前级滤波器生成的情况下,则运行所述当前滤波器的行算子,并递增所述当前滤波器的行计数;在所述多级滤波器全部遍历完,且最后一级滤波器的行计数未达到所述多级滤波器的总行数的情况下,重新遍历所述多级滤波器;在所述多级滤波器全部遍历完,且已达到所述多级滤波器的总行数的情况下,确定所述多级滤波器的调度执行完毕。

也就是说,在按照预设时序调用多级滤波器的行算子时,为了提高调用效率,需要为多级滤波器中的每一级滤波器均建立每一级滤波器的多个输入与每一级滤波器对应的片上缓存的映射表,进而在进行多级滤波器的遍历时,当发现当前滤波器的多个输入所对应的数据已经由前级滤波器生成时,直接运行当前滤波器的行算子并递增行计数,在完全遍历多级滤波器后,发现最后一级滤波器的行计数未达到多级滤波器的总行数时,需要重新遍历多级滤波器,直到最后一级滤波器的行计数达到多级滤波器的总行数要求时,才确定多级滤波器的调度过程执行完毕。

举例说明,可将所有滤波器的当前行先设置为0,从第一级滤波器开始,依次扫描各级滤波器,判断每一级算子欲计算当前行所依赖的前级输出行是否已经被生成,如果已经生成则运行算子一次并增加当前行号,如果尚未生成则停止当前多级滤波器扫描,重新从第一级滤波器开始新一轮扫描。重复这一流程,直到最后一级输出的所有行都被生成,整个计算流程结束。

可选的,所述处理模块,还用于以所述p个输入对应的行号作为索引在所述映射表中查找所述当前滤波器的行算子输入的片上缓存地址数组;将所述当前滤波器的输出行号作为索引在所述映射表中查找所述当前滤波器的行算子输出的片上缓存地址数组;将所述中间结果保存在根据所述行算子输出的片上缓存地址数组确定的片上缓存上。

由于对多级滤波器中的每一级滤波器均建立了每一级滤波器的多个输入与每一级滤波器对应的片上缓存的映射表,进而通过输入对应的行号便可在映射表中查找当前滤波器的行算子输入的片上缓存地址数组,进一步的,在得到输出行号后,可以将输出行号作为索引来查找当前滤波器的行算子输出的片上缓存地址数组,从而将行算子的中间结果保存到根据输出行号查询到的片上缓存地址数组确定的输出片上缓存上。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;

s2,在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;

s3,按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,获取目标对象为多级滤波器中的每一级滤波器设置的行算子,其中,所述行算子用于对目标图像的一行数据进行处理,所述多级滤波器用于对目标图像进行处理;

s2,在目标设备上为所述行算子分配与所述行算子大小匹配的片上缓存;

s3,按照预设时序调用所述多级滤波器的行算子,得到执行结果,并将所述多级滤波器的中间滤波器对应的中间结果保存至所述片上缓存。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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