CN116977151A - 一种图像填充方法、装置、电子设备和存储介质 - Google Patents
一种图像填充方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN116977151A CN116977151A CN202310247553.6A CN202310247553A CN116977151A CN 116977151 A CN116977151 A CN 116977151A CN 202310247553 A CN202310247553 A CN 202310247553A CN 116977151 A CN116977151 A CN 116977151A
- Authority
- CN
- China
- Prior art keywords
- filling
- data
- task
- module
- control signal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 93
- 238000003860 storage Methods 0.000 title claims abstract description 27
- 238000012545 processing Methods 0.000 claims abstract description 152
- 230000035515 penetration Effects 0.000 claims abstract description 13
- 238000003780 insertion Methods 0.000 claims description 55
- 230000037431 insertion Effects 0.000 claims description 55
- 230000015654 memory Effects 0.000 claims description 55
- 238000004590 computer program Methods 0.000 claims description 27
- 230000000149 penetrating effect Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 34
- 230000008569 process Effects 0.000 description 26
- 239000011159 matrix material Substances 0.000 description 23
- 230000007704 transition Effects 0.000 description 16
- 230000006870 function Effects 0.000 description 8
- 238000004886 process control Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005429 filling process Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011143 downstream manufacturing Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Processing (AREA)
Abstract
本申请涉及图像处理技术领域,尤其涉及一种图像填充方法、装置、电子设备和存储介质,用以提高图像填充效率。其中,方法包括:从读接口获取DMA任务对应的原始数据,以及接收控制单元发送的处理控制信号;原始数据是读接口在接收到控制单元发送的读取控制信号后,从数据提供方读取到的;读取控制信号和处理控制信号是控制单元对DMA任务进行解析后生成并发送的;基于处理控制信号确定DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,拆分操作包括:对原始数据进行拆分,填充操作包括:生成原始数据对应的填充数据;将拆分后的原始数据和填充数据合并为目标数据,并将目标数据输出至数据处理方,提高图像填充效率。
Description
技术领域
本申请涉及图像处理技术领域,尤其涉及一种图像填充方法、装置、电子设备和存储介质。
背景技术
在人工智能(Artificial Intelligence,AI)处理领域、图像处理领域等,通常需要对图像进行填充(padding)操作,padding操作是指在输入图像的周围填充常量数据,一般是需要在图像对应的二维矩阵中,原始数据所对应的上下左右和每行原始数据间填充常量数据,如填充0。
在相关技术中,常见的padding方案主要有如下两种:
第一种是通过矢量处理指令进行padding操作,该方式下,在利用直接存储器访问(Direct Memory Access,DMA)技术将原始数据搬移进处理器的过程中不进行padding,而是在搬移至处理器内部的片上缓存后,额外调用VECTOR MOVE指令进行padding操作,这种方式需要消耗大量的运行时间,效率不高。
第二种是将padding操作融合入DMA的读数据端,而padding的过程需要在每行原始数据间填充padding数据,原始数据会被拆分成若干行,这样每行数据的读取是分离的,对总线的利用率不高,如果每行数据量较少,读总线的利用率会进一步降低,同样存在效率不高的问题。
综上,如何有效提高图像填充效率是亟待解决的。
发明内容
本申请实施例提供一种图像填充方法、装置、电子设备和存储介质,用以提高图像填充效率。
本申请实施例中的一种图像填充方法,应用于DMA控制系统中的填充引擎,所述DMA控制系统还包括读接口和控制单元,包括:
从所述读接口获取DMA任务对应的原始数据,以及接收所述控制单元发送的处理控制信号;所述原始数据是所述读接口在接收到所述控制单元发送的读取控制信号后,从数据提供方读取到的;所述读取控制信号和所述处理控制信号是所述控制单元对所述DMA任务进行解析后生成并发送的;
基于所述处理控制信号确定所述DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;
将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
本申请实施例中的一种用于图像填充的DMA控制系统,包括:控制单元,读接口和填充引擎;
所述控制单元,用于对DMA任务进行解析,生成相应的读取控制信号和处理控制信号,并将所述读取控制信号输入所述读接口,以及将所述处理控制信号输入所述填充引擎;
所述读接口,用于基于接收到的读取控制信号,从数据提供方读取所述DMA任务对应的原始数据,并将所述原始数据输入所述填充引擎;
所述填充引擎,用于基于所述处理控制信号确定所述DMA任务是图像填充任务时,采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
本申请实施例中的一种图像填充装置,应用于DMA控制系统中的填充引擎,所述DMA控制系统还包括读接口和控制单元,所述填充引擎用于执行以下操作:
从所述读接口获取DMA任务对应的原始数据,以及接收所述控制单元发送的处理控制信号;所述原始数据是所述读接口在接收到所述控制单元发送的读取控制信号后,从数据提供方读取到的;所述读取控制信号和所述处理控制信号是所述控制单元对所述DMA任务进行解析后生成并发送的;
基于所述处理控制信号确定所述DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;
将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
可选的,所述填充引擎还用于执行以下操作:
基于所述处理控制信号确定所述DMA任务是非图像填充任务,则跳过所述拆分操作和所述填充操作,将所述原始数据输出至所述数据处理方。
可选的,所述填充引擎具体用于执行以下操作:
生成所述原始数据对应的前导填充数据;所述前导填充数据是需填充于第一个原始数据之前的数据;
将所述原始数据按行拆分为多个子序列,并在每拆分得到的一个子序列后,生成所述子序列对应的中间填充数据,同时继续拆分得到下一个子序列,直至生成所有的中间填充数据;每个子序列对应的中间填充数据是需填充于所述子序列及下一子序列之间的数据;
生成所述原始数据对应的末尾填充数据;所述末尾填充数据是需填充于最后一个原始数据之后的数据。
可选的,所述DMA任务有多个;所述填充引擎包括有限状态机控制模块和多个数据处理模块;
所述填充引擎还用于在采用穿插方式执行拆分操作和填充操作之前,执行以下操作:
将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于所述任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块;
所述填充引擎具体用于执行以下操作:
对于当前图像填充任务,基于所述有限状态机控制模块确定所述图像填充任务的当前执行状态后,控制相应的数据处理模块采用穿插方式执行拆分操作和填充操作。
可选的,所述任务队列中的每个图像填充任务对应有目标域段,所述目标域段用于表示相应图像填充任务之前所存在的非图像填充任务的数量;所述填充引擎还包括旁路控制模块和多路选择器;
所述旁路控制模块具体用于:对于当前图像填充任务,若确定所述当前图像填充任务的目标域段表示所述图像填充任务之前不存在非图像填充任务,则向所述多路选择器输出第一选择信号;
所述多路选择器具体用于:在接收到所述第一选择信号后,输出所述目标数据至所述数据处理方。
可选的,所述旁路控制模块包括寄存器,所述寄存器用于存储当前图像填充任务对应的目标域段;
所述旁路控制模块还用于:若确定所述图像填充任务的目标域段表示所述图像填充任务之前存在非图像填充任务,则每当一个非图像填充任务经过所述填充引擎时,向所述多路选择器输出一个第二选择信号;以及
每当一个非图像填充任务经过所述填充引擎时,基于预设步长对所述寄存器执行一次减操作,直至所述寄存器中的目标域段更新为目标数值,则向所述多路选择器输出第一选择信号;
所述多路选择器还用于:在接收到所述第二选择信号后,输出所述非图像填充任务对应的原始数据至所述数据处理方。
可选的,所述数据处理模块包括:数据拆分模块、填充插入模块和数据合并模块;所述当前执行状态包括:空闲状态、数据状态和填充状态;
所述有限状态机控制模块具体用于:在数据状态,向所述数据拆分模块发送拆分控制信号;在填充状态,向所述填充插入模块发送填充控制信号;
所述数据拆分模块具体用于:在接收所述拆分控制信号后,根据所述拆分控制信号包含的行数据量信息,执行所述拆分操作;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,执行所述填充操作;
所述有限状态机控制模块还用于:在生成所有填充数据后,由填充状态转移至空闲状态;在所述空闲状态,向所述数据合并模块发送合并控制信号;
所述数据合并模块具体用于:在接收到所述合并控制信号后,将拆分后的原始数据和所述填充数据合并为目标数据。
可选的,所述填充状态包括前导填充状态;
所述有限状态机控制模块具体用于:接收到对于当前图像填充任务的任务开始指令后,由空闲状态转移至前导填充状态;在所述前导填充状态,向所述填充插入模块输出填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据;所述前导填充数据是需填充于第一个原始数据之前的数据。
可选的,所述有限状态机控制模块还用于:
在前导填充数据产生完成后,由前导填充状态转移至数据状态;在所述数据状态,向所述数据拆分模块发送拆分控制信号;
所述数据拆分模块具体用于:在接收到所述拆分控制信号后,根据所述拆分控制信号包含的行数据量信息,按行拆分所述原始数据,获得多个子序列。
可选的,所述填充状态包括中间填充状态;
所述有限状态机控制模块还用于:每获得一个子序列,触发一次中间填充状态;在所述中间填充状态,向所述填充插入模块发送填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据;每个子序列对应的中间填充数据是需填充于所述子序列及下一子序列之间的数据。
可选的,所述填充状态包括末尾填充状态;
所述有限状态机控制模块还用于:在所述原始数据拆分完成后,由数据状态转移至末尾填充状态;在所述末尾填充状态,向所述填充插入模块输出填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据;所述末尾填充数据是需填充于最后一个原始数据之后的数据。
可选的,所述填充引擎还用于执行以下操作:
对于当前图像填充任务,若任意一种填充状态不存在,则跳过相应的填充操作。
本申请实施例中的一种电子设备,包括处理器和存储器,其中,所述存储器存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行上述任意一种图像填充方法的步骤。
本申请实施例提供一种计算机可读存储介质,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行上述任意一种图像填充方法的步骤。
本申请实施例提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;当电子设备的处理器从计算机可读存储介质读取所述计算机程序时,所述处理器执行所述计算机程序,使得所述电子设备执行上述任意一种图像填充方法的步骤。
本申请有益效果如下:
本申请实施例提供了一种图像填充方法、装置、电子设备和存储介质。由于本申请将填充引擎内嵌到了DMA控制系统中,并且,在DMA控制系统中的控制单元对DMA任务进行解析后,会生成指示读接口从数据提供方读取数据的读取控制信号,和指示填充引擎对于图像填充任务进行相关处理的处理控制信号,也即,本申请将填充操作与DMA的读操作进行了解耦,而整块原始数据一般在数据提供方侧是按照线性的方式存储的,在读操作与填充操作解耦的情况下,读操作可以进行连续的线性访问,使得读总线的利用率更高;并且,该方式下对于图像填充任务而言,填充引擎可以采用穿插方式执行拆分操作和填充操作,使得基于DMA搬运数据的同时在线进行填充操作,在提高效率的同时,无需额外的矢量处理指令,性能更高。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为相关技术中的一种图像填充的示意图;
图2为本申请实施例中的一种应用场景示意图;
图3为本申请实施例中的一种DMA控制系统内部结构示意图;
图4为本申请实施例中的一种填充过程的示意图;
图5为本申请实施例中的一种图像填充方法的实施流程图;
图6为本申请实施例中的第一种填充数据的示意图;
图7为本申请实施例中的第二种填充数据的示意图;
图8为本申请实施例中的第三种填充数据的示意图;
图9为本申请实施例中的第四种填充数据的示意图;
图10为本申请实施例中的一种填充引擎的架构图;
图11为本申请实施例中的一种有限状态机的状态转移图;
图12为本申请实施例中的一种旁路控制模块的处理逻辑示意图;
图13为本申请实施例中的一种DMA控制系统内部的控制单元、读接口和填充引擎之间的交互时序图;
图14为本申请实施例中的一种图像填充装置的组成结构示意图;
图15为本申请实施例中的一种电子设备的组成结构示意图;
图16为本申请实施例的一种计算装置的组成结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请技术方案保护的范围。
下面对本申请实施例中涉及的部分概念进行介绍。
DMA:是一种完全由硬件进行数据传输的控制方式,该方式允许不同速度的硬件装置来沟通,而不经过中央处理器(Central Processing Unit,CPU),因而不依赖于CPU的大量中断负载。具体的,直接存储器访问用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。它是一种外部设备/存储器直接对计算机存储器进行读写操作的I/O方式,DMA存储器直接访问这种方式下数据的读写无需CPU执行指令,也不经过CPU内部寄存器,而是利用系统的数据总线,由外设直接对存储器写入或读出,从而达到极高的传输速率。
DMA任务:指需要经过DMA进行数据搬运的任务,按照是否需要进行图像填充,可将DMA任务分成两类:图像填充任务和非图像填充任务。其中,图像填充任务即在经过DMA进行数据搬运的过程中,需要进行图像填充的任务,非图像填充任务即只是简单的数据搬运,该过程中不需要进行图像填充的任务。
填充引擎:是本申请中提出的一种内嵌于DMA控制系统中的,用于对图像进行padding的工具。具体的,该填充引擎可包括:用于控制图像填充任务当前执行状态的有限状态机控制模块,用于将原始数据进行拆分的数据拆分模块,用于生成填充数据的填充插入模块,用于将拆分后的原始数据和生成的填充数据进行合并的数据合并模块,用于判断当前任务是否需要跳过填充引擎,以输出相应选择信号给多路选择器的旁路控制模块,和用于输出下游所需数据的多路选择器。
原始数据:在本申请中,指由数据提供方所提供的图像数据,在此原始数据的基础上,可进一步进行填充后输出给下游模块,或是从数据提供方读取后直接输出给下游模块。
穿插方式:指在执行A操作的过程中可以执行B操作,在执行B操作的过程中,可以执行A操作,或者,两种操作还可以轮流执行,如,还可以指执行A操作后,再执行B操作,执行B操作后,再执行A操作等。
减(Subtract,SUB)操作指令:一种数据处理指令,该指令表示:从寄存器中减去表示的数值,并将结果保存到目标寄存器中。
有限状态机(Finite-state machine,FSM):又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。本申请实施例中的有效状态机至少包括数据状态(读取数据并拆分),填充状态(生成填充数据)和空闲状态。其中,填充状态包括但不限于:前导填充状态、中间填充状态和末尾填充状态。
下面对本申请实施例中的设计思想进行简要说明。
padding操作的应用场景十分广泛,如在AI处理领域,通常需要对输入的图像或特征图(feature map)进行padding操作。
不仅仅是AI处理领域需要padding操作,在图像处理领域通常也需要大量的padding操作,如,通常图像处理过程中需要将大图(比如4K/2K)划分为小图,在小图周围进行padding操作。
在相关技术中,常见的padding方案主要有如下两种:
第一种是将原始数据从DMA搬移进处理器内部的片上缓存后,额外调用矢量处理指令进行padding操作,这种方式需要消耗大量的运行时间,效率不高。
第二种是将padding操作融合入DMA的读数据端,如图1所示,其为相关技术中的一种图像填充的示意图,该方案是将padding操作拆分成两种类型的操作,一是对原始数据的读操作,另外一种是padding data产生操作,两者产生的数据通过一个多路选择器(mux,multiplexer)进行选择,输出数据给下游。由于padding的过程需要在每行原始数据间填充padding数据,原始数据的读操作会被拆分成若干行,这样每行数据的读取是分离的,分离的读操作对总线的利用率不高,如果每行数据量较少,读总线的利用率会大大降低。
有鉴于此,本申请提供了一种图像填充方法、装置、电子设备和存储介质。
由于本申请将填充引擎内嵌到了DMA控制系统中,并且,在DMA控制系统中的控制单元对DMA任务进行解析后,会生成指示读接口从数据提供方读取数据的读取控制信号,和指示填充引擎对于图像填充任务进行相关处理的处理控制信号,也即,本申请将填充操作与DMA的读操作进行了解耦,而整块原始数据一般在数据提供方侧是按照线性的方式存储的,在读操作与填充操作解耦的情况下,读操作可以进行连续的线性访问,使得读总线的利用率更高;并且,该方式下对于图像填充任务而言,填充引擎可以采用穿插方式执行拆分操作和填充操作,使得基于DMA搬运数据的同时在线进行填充操作,在提高效率的同时,无需额外的矢量处理指令,性能更高。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图2所示,其为本申请实施例中的一种应用场景示意图。该应用场景图中包括一个数据提供方210、一个DMA控制系统220,和一个数据处理方230。
其中,DMA控制系统220用于将图像数据从数据提供方210搬移至数据处理方230,并在数据搬移的过程中,在线进行padding操作。
在本申请实施例中,数据提供方210具体是指存储有图像原始数据的一方,而数据处理方230具体是指图像填充后的下游任务方,如数据提供方210为内存,数据处理方230为CPU;又如,数据提供方210为CPU,数据处理方230为内存。
需要说明的是,上述只是简单举例,数据提供方210和数据处理方230还可以是其他硬件装置,本文不做具体限定。
此外,图2所示只是举例说明,实际上数据提供方、DMA和数据处理方的数量不受限制,在本申请实施例中不做具体限定。
参阅图3所示,其为本申请实施例中的一种DMA控制系统内部结构示意图。其中,DMA控制系统包括:控制单元(dma control unit),读接口(read interface)和填充引擎(padding engine)。
其中,padding engine内嵌于DMA控制系统中,DMA控制系统中的dma controlunit完成dma数据搬移的控制,本申请中,通过dma control unit解析DMA任务产生不同的控制信号,以实现读操作和填充操作的解耦,具体分为:读取控制信号(read controlsingal)和处理控制信号(padding control singal),read control singal送入readinterface,padding control singal送入padding engine,read interface完成原始数据的读取操作,将读取到的输入送入padding engine中,padding engine进行填充处理。
需要说明的是,该处理控制信号(padding control singal)具体是一种填充处理控制信号,即控制是否需要进行图像填充,对于图像填充任务而言,即表示需要进行图像填充,对于非图像填充任务而言,即表示不需要进行图像填充。与下文中的填充控制信号不同,下文中的填充控制信号是针对图像填充任务而言的,具体表示应如何生成图像填充数据。
具体地,控制单元(dma control unit)、读接口(read interface)和填充引擎(padding engine)分别用于执行如下操作:
控制单元,用于对DMA任务进行解析,生成相应的读取控制信号(padding engine)和处理控制信号(padding control singal),并将读取控制信号输入读接口,以及将处理控制信号输入填充引擎。
读接口,用于基于接收到的读取控制信号,从数据提供方读取DMA任务对应的原始数据,并将原始数据输入填充引擎。
填充引擎,用于基于处理控制信号确定DMA任务是图像填充任务时,采用穿插方式执行拆分操作和填充操作,拆分操作包括:对原始数据进行拆分,填充操作包括:生成原始数据对应的填充数据;将拆分后的原始数据和填充数据合并为目标数据,并将目标数据输出至数据处理方。
此外,填充引擎还用于在基于处理控制信号确定DMA任务是非图像填充任务时,跳过拆分操作和填充操作,将原始数据输出至数据处理方。
在上述实施方式中,填充引擎内嵌于DMA控制系统,且将读操作和填充操作解耦,基于控制单元分别产生读取控制信号和处理控制信号,由读接口从数据提供方读取DMA任务对应的原始数据,并将原始数据输入填充引擎,经过填充引擎拆分原始数据、生成填充数据,并将拆分后的原始数据和填充数据合并得到目标数据。其中,读接口可以进行连续的线性访问,大大提高了图像填充效率。
参阅图4所示,其为本申请实施例中的一种填充过程的示意图。在图4中,originaldata为原始数据,需要从内存(一种数据提供方)搬移至处理器核内部(一种数据处理方)的缓存中。
如图4所示,padding的方式分为5种,分别为:top、bottom、left、right、internal。其中,top是指在原始图像上方填充的行数,bottom是指在原始图像下方填充的行数,left是指在原始图像左侧填充的列数,right是指在原始图像右侧填充的列数,internal是指在每行之间填充的行数。
填充的数据是可以配置的,一般为常量数据,如填充为0。除此之外,也可以是其他数据,本文不做具体限定。
此外,本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶、图像处理等场景。
下面结合上述描述的应用场景,参考附图来描述本申请示例性实施方式提供的图像填充方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。
参阅图5所示,为本申请实施例中的一种图像填充方法的实施流程图,应用于DMA控制系统中的填充引擎,DMA控制系统还包括读接口和控制单元,该方法的具体实施流程如下:
S51:填充引擎从读接口获取DMA任务对应的原始数据,以及接收控制单元发送的处理控制信号;原始数据是读接口在接收到控制单元发送的读取控制信号后,从数据提供方读取到的;读取控制信号和处理控制信号是控制单元对DMA任务进行解析后生成并发送的。
如图3所列举的,read interface通过总线读取数据提供方所提供的原始数据后,输入padding engine。
由于整块原始数据一般在数据提供方(如内存)中是按照线性的方式存储的,该方式下,读接口可以进行连续的线性访问,在读取原始数据的过程中,无需将原始数据按行拆分,因而,读总线的利用率更高。
本申请中,填充引擎主要是用于实现填充操作的,因而,在通过读接口读取原始数据后,后续填充引擎的处理是否需要跳过还需要根据DMA任务的任务类型而定。在本申请实施例中,按照是否需要进行图像填充,将DMA任务分为两大类:图像填充任务和非图像填充任务。
对于图像填充任务而言,读取控制信号可包含:所需读取的原始数据的长度信息(位置信息等);处理控制信号可包含:所需读取的原始数据的长度信息、每行原始数据的行数据量信息、以及各类padding方式所对应的具体数值(top、bottom、left、right、internal)等。
其中,行数据量信息是用于指示原始数据拆分的,各类padding方式所对应的具体数值是用于确定后续填充操作所需生成的填充数据的数据量。这样,填充引擎可以根据处理控制信号实现具体的图像填充。
对于非图像填充任务而言,读取控制信号可包含:所需读取的原始数据的长度信息(位置信息等);处理控制信号可包含:所需读取的原始数据的长度信息。也即,对于非图像填充任务而言,只需对原始数据进行搬运,无需处理填充操作,处理控制信号也无需包含行数据量信息以及各类padding方式所对应的具体数值等。
S52:填充引擎基于处理控制信号确定DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,拆分操作包括:对原始数据进行拆分,填充操作包括:生成原始数据对应的填充数据。
在本申请实施例中,采用穿插方式执行拆分操作和填充操作时,包括但不限于如下至少一种执行情况:
执行情况一、在执行拆分操作的过程中,同时执行填充操作;
执行情况二、在执行填充操作的过程中,同时执行拆分操作;
执行情况三、轮流执行拆分操作和填充操作,即执行A操作后再执行B操作,或是执行B操作后再执行A操作。
也即,在上述提高读总线利用率的基础上,采用穿插方式执行拆分操作和填充操作,可实现边拆分边填充的效果,进一步提高图像填充的效率。
下面结合图4所列举的几种padding方式,本申请中将填充数据分为了三大类,分别为:
第一类:前导填充数据,指需填充于第一个原始数据之前的数据;
第二类:中间填充数据,指需填充于各行原始数据之间的数据;
第三类:末尾填充数据,指需填充于最后一个原始数据之后的数据。
参阅图6所示,其为本申请实施例中的第一种填充数据的示意图。以原始数据对应的二维矩阵为4×4为例,假设将top和bottom各设置为1,left和right各设置为2,internal设置为1,即表示将该二维矩阵由4×4填充为9×8。
其中,第一个原始数据即为:原始的4×4二维矩阵中第一行第一列的数据;最后一个原始数据即为:原始的4×4二维矩阵中最后一行最后一列的数据。如图6所示,前导填充数据(leading padding data)有10个,为填充后的9×8二维矩阵中第一行+第二行前两列的数据;中间填充数据(internal padding data)有三组,每组有12个数据,分别为填充后的9×8二维矩阵中:第二行后两列+第三行+第四行前两列的数据;第四行后两列+第五行+第六行前两列的数据;第六行后两列+第七行+第八行前两列的数据;末尾填充数据(postpadding data)有10个,为填充后的9×8二维矩阵中第八行后两列+第九行的数据。
需要说明的是,上述各类padding方式具体数值的设置只是简单举例,其他设置同样适用于本申请实施例,在此不做具体限定。
基于上述所列举的填充数据的划分方式,步骤S52的一种可选的实施方式为:
步骤S521:生成原始数据对应的前导填充数据;前导填充数据是需填充于第一个原始数据之前的数据。
步骤S522:将原始数据按行拆分为多个子序列,并在每拆分得到的一个子序列后,生成子序列对应的中间填充数据,同时继续拆分得到下一个子序列,直至生成所有的中间填充数据;每个子序列对应的中间填充数据是需填充于该子序列及下一子序列之间的数据,这些可作为一组中间填充数据。
步骤S523:生成原始数据对应的末尾填充数据;末尾填充数据是需填充于最后一个原始数据之后的数据。
在上述实施方式中,数据的拆分过程在前导填充数据生成之后,末尾填充数据生成之前,且该数据拆分过程还伴随有中间填充数据的生成,基于上述穿插方式执行拆分操作和填充操作,可以有效提高图像填充效率。
需要说明的是,上述所列举的前导填充数据、中间填充数据和末尾填充数据中,若不存在相关的padding方式,则可跳过相关填充数据的生成过程,如下所列举的:
(一)若对应未设置相应的top和left数值(或是对应数值为0),则可跳过前导填充数据的生成。
如图7所示,其为本申请实施例中的第二种填充数据的示意图。以原始数据对应的二维矩阵为4×4为例,假设将top和left都设置为0,bottom和internal都设置为1,即表示将该二维矩阵由4×4填充为8×6。
在该情况下,不存在前导填充数据(leading padding data);中间填充数据(internal padding data)有三组,每组有8个数据,分别为填充后的8×6二维矩阵中:第一行后两列+第二行的数据;第三行后两列+第四行的数据;第五行后两列+第六行的数据;末尾填充数据(post padding data)有8个,为填充后的8×6二维矩阵中第七行后两列+第八行的数据。
上述方式下,需要跳过前导填充数据的生成过程,即跳过步骤S521,直接执行S522和S523。
(二)若对应未设置相应的internal、left和right(或是对应数值为0),则可跳过中间填充数据的生成。
如图8所示,其为本申请实施例中的第三种填充数据的示意图。以原始数据对应的二维矩阵为4×4为例,假设将internal、left和right都设置为0,top和bottom都设置为1,即表示将该二维矩阵由4×4填充为6×4。
在该情况下,不存在中间填充数据(internal padding data);前导填充数据(leading padding data)有4个,为填充后的6×4二维矩阵中第一行的数据;末尾填充数据(post padding data)有4个,为填充后的6×4二维矩阵中第六行的数据。
上述方式下,需要跳过中间填充数据的生成过程,即跳过步骤S522,执行S521和S523。
(三)若对应未设置相应的bottom和right(或是对应数值为0),则可跳过末尾填充数据的生成。
如图9所示,其为本申请实施例中的第四种填充数据的示意图。以原始数据对应的二维矩阵为4×4为例,假设将bottom、left和right都设置为0,top和internal都设置为1,即表示将该二维矩阵由4×4填充为8×6。
在该情况下,不存在末尾填充数据(post padding data);前导填充数据(leadingpadding data)有8个,为填充后的8×6二维矩阵中第一行+第二行前两列的数据;中间填充数据(internal padding data)有三组,每组有6个数据,分别为填充后的8×6二维矩阵中:第三行+第四行前两列的数据;第五行+第六行前两列的数据;第七行+第八行前两列的数据。
上述方式下,需要跳过末尾填充数据的生成过程,即跳过步骤S523,执行S521和S522即可。
需要说明的是,上述所列举的几种填充方式只是简单举例,其他方式同样适用于本申请实施例,在此不做具体限定。
S53:填充引擎将拆分后的原始数据和填充数据合并为目标数据,并将目标数据输出至数据处理方。
在本申请实施例中,步骤S53之前,填充数据和原始数据是分离的,而该图像填充任务的数据处理方的处理步骤需要合并后的数据,因此还需要在步骤S53中,将拆分后的原始数据和填充数据合并为线性的目标数据。
在上述实施方式中,该在线填充引擎是一种松耦合的结构,读操作和填充操作解耦,有效提高了读总线利用率。
可选的,在基于处理控制信号确定DMA任务是非图像填充任务时,则可跳过拆分操作和填充操作,直接将原始数据输出至数据处理方。
在上述实施方式中,非图像填充任务的数据处理方的处理步骤需要的是原始数据,该方式下,填充引擎和上下游模块的交互简单,性能更优。
下面结合填充引擎的内部结构,对本申请中,填充引擎内部的处理逻辑进行展开说明:
本申请中,考虑到每个DMA任务所属任务类型的异同,在DMA任务有多个时,可通过构建任务队列的方式,区分图像填充任务和非图像填充任务。该任务队列采用先入先出的方式维护。
对于每个图像填充任务而言,本申请采用的是拆分操作和填充操作穿插执行的方式来实施的,为了便于对该穿插执行过程进行控制,本申请引入了有限状态机,基于此,本申请中的填充引擎内部设置了有限状态机模块,以基于有限状态机控制模块可以确定图像填充任务的当前执行状态,进而结合状态之间的转移实现拆分操作和填充操作穿插执行,最终生成目标数据。
一种可选的实施方式为,填充引擎包括有限状态机控制模块和多个数据处理模块;本申请可通过有限状态机控制模块来控制各图像填充任务当前执行状态之间的转移,并结合各执行状态对应的数据处理模块执行相关操作。
具体的,在步骤S51之后,在步骤S52之前,可将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块。
该方式下,对于当前图像填充任务,基于有限状态机控制模块确定该图像填充任务的当前执行状态后,则可控制相应的数据处理模块采用穿插方式执行拆分操作和填充操作。
参阅图10所示,其为本申请实施例中的一种填充引擎的架构图。在图10中,taskinput为dma control unit解析到的控制信息(也即padding control signal中所包含的信息),这些信息会以task为单位压入任务队列task queue中,task queue采用先入先出的方式维护,需要注意的是,如果dma任务无需进行padding操作,则该任务无需压入taskqueue中。
具体的,在图10中,fsm ctrl模块为有限状态机控制模块,主要负责状态机的维护,具体用于确定所述图像填充任务的当前执行状态后,控制相应的数据处理模块对目标图像执行相应的数据处理。
在图10中所列举的数据处理模块有三类,分别为数据拆分(data split)模块、填充插入(pad insert)模块和数据合并(data merge)模块。
其中,每个数据处理模块都对应有各自的处理逻辑;简单来说,数据拆分(datasplit)模块用于接收读接口输出的原始数据,并将原始数据进行拆分后,依次输入填充插入模块;填充插入模块,用于接收数据拆分模块输出的拆分后的原始数据(即子序列,一个子序列即拆分得到的一行原始数据),确定在待填充位置(需要)插入的填充数据;数据合并模块,用于将拆分后的原始数据和填充数据进行合并,获得相应的目标数据。
上述所列举的data split模块、pad insert模块和data merge模块各自所对应的具体处理过程,和当前padding任务的当前执行状态也相关,在数据状态下,则需要通过data split模块按行拆分原始数据;在填充状态下,则需要通过pad insert模块生成填充数据;而在拆分操作和填充操作都结束后,则可通过data merge模块实现拆分后的原始数据和填充数据的合并。
考虑到本申请中,填充数据的生成可分为三个阶段:前导填充数据生成阶段、中间填充数据生成阶段、末尾填充数据生成阶段,相应的,填充状态也可划分为前导填充状态、中间填充状态、末尾填充状态。
基于此,本申请实施例提出了一种状态间的转移过程示例。参阅图11所示,其为本申请实施例中的一种有限状态机的状态转移图,图11列举了5种执行状态(可简称状态),下面介绍各个状态的含义:
1)idle,空闲状态,该状态下没有padding任务需要处理,task_start表示padding任务开始,当收到task_start后,状态转移至lead状态;
2)lead,即前导填充(leading padding)状态,该状态下产生前导padding数据,如图6中第一行+第二行前两列所示,lead_end表示leading padding数据产生完成,状态转移至data状态;
3)data,数据状态,全称为原始数据读取(original data read)状态,该状态下选择读取进来的原始数据,line_end表示一行原始数据拆分完毕,转移至inter状态;data_end表示所有原始数据拆分完毕,转移至post状态;
4)inter,即中间填充(internal padding)状态,该状态下产生中间padding数据,如图6中第二行后两列+第三行+第四行前两列,第四行后两列+第五行+第六行前两列,及第六行后两列+第七行+第八行前两列所示,inter_end表示internal padding产生完成,转移至data状态;
5)post,即末尾填充(post padding)状态,该状态下产生末尾padding数据,如图6中第八行后两列+第九行所示,post_end表示末尾padding数据产生完成,状态转移至idle状态,等待下个padding任务的执行。
需要说明的是,上述所列举的几种状态及状态间的转移只是简单举例,其他可实现填充操作和拆分操作穿插执行的相关状态转移方式同样适用于本申请实施例,在此不做具体限定。
在本申请实施例中,上述所列举的data split模块、pad insert模块和datamerge模块各自所对应的具体处理过程的触发,由fsm ctrl模块来进行控制。在本申请实施例中,fsm ctrl模块控制相应的数据处理模块对目标图像执行相应的数据处理的过程,可以通过fsm ctrl模块输出控制信号给到data split、pad insert和data merge模的方式来实现。
下面基于上述所列举的几种状态,对步骤S52的具体实施过程进行展开说明:
可选的,数据处理模块包括:数据拆分模块和填充插入模块;图像填充任务的当前执行状态包括:数据状态和填充状态。
在基于有限状态机控制模块确定图像填充任务的当前执行状态为数据状态的情况下,则可通过有限状态机控制模块向数据拆分模块发送拆分控制信号,以控制数据拆分模块根据拆分控制信号包含的行数据量信息,执行拆分操作。
在本申请实施例中,拆分控制信号内所包含的行数据量信息表征的是待填充的图像所对应的二维矩阵中,每行所含的数据量,如4所列举的示例,图像所对应的原始的二维矩阵为4×4,每行所含的数据量即为4。
数据拆分模块基于该行数据量信息,则可将读接口所获取的连续的线性原始数据,按行拆分,得到4个子序列。如上述所列举的4×4二维矩阵所对应的线性原始数据即长度为16的一串数字,假设这一串数字为:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16;则,拆分得到的4个子序列分别为:1、2、3、4;5、6、7、8;9、10、11、12;13、14、15、16。
在上述实施方式中,data split模块可以接收read interface输出的原始数据,由于read interface是按照整块数据线性读取的,行与行之间是紧密拼接在一起的,因而读总线的利用率高,而在此基础上,再通过data split模块完成行数据的拆分,即可将整块数据拆分成若干行。
在基于有限状态机控制模块确定图像填充任务的当前执行状态为填充状态的情况下,则可通过有限状态机控制模块向填充插入模块发送填充控制信号,以控制填充插入模块根据填充控制信号包含的填充数据量信息,执行填充操作。
在本申请实施例中,填充控制信号内所包含的填充数据量信息表征的是本次所需生成的填充数据的数量。
结合上述说明,本申请实施例中的填充状态具体可分为:前导填充状态、中间填充状态和末尾填充状态。
在前导填充状态下,发送一次填充控制信号即可,该填充控制信号所包含的填充数据量信息即为前导填充数据的数量(也可以理解为长度)。如图6中,前导填充数据有10个,对应的填充数据量信息即为10。
在中间填充状态下,需要几组中间填充数据,则需发送几次填充控制信号,该填充控制信号所包含的填充数据量信息即为中间填充数据的数量。如图6中,中间填充数据有3组,对应需发送三次填充控制信号,每组12个数据,因而每个填充控制信号所包含的填充数据量信息为12。
在末尾填充状态下,发送一次填充控制信号即可,该填充控制信号所包含的填充数据量信息即为末尾填充数据的数量。如图6中,末尾填充数据有10个,对应的填充数据量信息即为10。
由于本申请中,pad insert模块为padding数据插入模块,在合适的位置,需要通过pad insert模块生成待插入的padding数据,比如在fsm ctrl模块的控制下,如果当前处于inter状态,fsm ctrl模块会输出填充控制信号给pad insert模块,控制信号包含需要插入的padding数据量信息,pad insert模块根据这些信息生成相应数量的padding数据。
需要注意的是,上述所列举的几种填充状态中,前导填充状态对应图11所列举的状态转移图中的lead,中间填充状态对应图11中的internal,末尾填充状态对应图11中的post;此外,本文中的数据状态对应图11中的data。此外,上述的数据状态即为图11中的data,很显然,图像填充任务的当前执行状态还可包括空闲状态,对应图11中的idle。
下面结合各状态之间的转移逻辑,对本申请实施例中的各个执行状态下的处理过程进行详细说明:
有限状态机控制模块在接收到对于当前图像填充任务的任务开始(task_start)指令后,由空闲状态(idle)转移至前导填充状态(lead)。
其中,任务开始指令在确定当前图像填充任务之前不再存在非图像填充任务的情况下即可触发。fsm ctrl模块即可向pad insert模块发送一次填充控制信号。
具体地,在前导填充状态下,padding engine通过有限状态机控制模块向填充插入模块输出填充控制信号,以控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据。
进一步地,在前导填充数据产生完成后,有限状态机控制模块由前导填充状态(lead)转移至数据状态(data)。fsm ctrl模块即可向data split模块发送拆分控制信号。
在数据状态下,padding engine通过有限状态机控制模块向数据拆分模块发送拆分控制信号,以控制数据拆分模块根据拆分控制信号包含的行数据量信息,按行拆分原始数据,获得多个子序列。
进一步地,每获得一个子序列,有限状态机控制模块触发一次中间填充状态。fsmctrl模块即可向pad insert模块发送一次填充控制信号。
具体地,在中间填充状态下,padding engine通过有限状态机控制模块向填充插入模块发送填充控制信号,以控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据;每个子序列对应的中间填充数据是需填充于子序列及下一子序列之间的数据。
在上述实施方式中,data和inter这两个状态可同时存在,即拆分下一行数据,同时,还可生成该“下一行数据”之前需插入的padding数据,以加速图像填充任务的处理效率。
可选的,在原始数据拆分完成后,有限状态机控制模块由数据状态(data)转移至末尾填充状态(post)。fsm ctrl模块即可向pad insert模块发送一次填充控制信号。
具体地,在末尾填充状态,padding engine通过有限状态机控制模块向填充插入模块输出填充控制信号,以控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据。
需要说明的是,填充数据的具体生成过程可参见上述实施例,在此不再重复赘述。
另外需要注意的是,对于当前图像填充任务,若任意一种填充状态不存在,则跳过相应的填充操作。其中,任意一种填充状态可以是前导填充状态、中间填充状态或是末尾填充状态。
例如图7、图8或图9所列举的几种填充数据的示意图,其中:图7即表示前导填充状态不存在的情况,即跳过相应前导填充数据的生成操作;图8即表示中间填充状态不存在的情况,即跳过相应中间填充数据的生成操作;图9即表示末尾填充状态不存在的情况,即跳过相应末尾填充数据的生成操作。
在上述实施方式中,将填充数据的生成划分为三个阶段,即前导填充数据生成阶段、中间填充数据生成阶段和末尾填充数据生成阶段,采用阶段化的填充数据方式,与原始数据的拆分过程充分结合,穿插执行,有效提高图像填充任务的处理效率。
可选的,数据处理模块还包括:数据合并模块;当前执行状态包括空闲状态和填充状态;
在生成所有填充数据后,有限状态机控制模块由填充状态转移至空闲状态;在空闲状态,通过有限状态机控制模块向数据合并模块发送合并控制信号,以控制数据合并模块将拆分后的原始数据和填充数据合并为目标数据。
如图11所列举的,由post转移至idle,fsm ctrl模块即可向data merge模块发送合并控制信号,指示data merge模块完成原始数据和padding数据的合并。
在本申请实施例中,在data merge模块之前,padding数据和原始数据是分离的,下游的处理步骤需要合并后的数据,因此需要data merge模块将原始数据和padding数据合并成线性数据。
总线利用率很高,在典型算子测试中,读总线利用率提升30%,性能较高。
基于上述实施方式,本申请将padding操作与DMA的读操作解耦,整块原始数据一般在内存中是按照线性的方式存储的,读操作可以进行连续的线性访问,读总线的利用率可以达到最大化。
此外,本申请中,为了便于对图像填充任务和非图像填充任务的处理逻辑和输出逻辑进行区分,还进一步引入了:用于判断当前DMA任务是否需要跳过填充引擎,以输出相应选择信号给多路选择器的旁路控制模块;用于输出下游所需数据的多路选择器。
一种可选的实施方式为,填充引擎还包括旁路控制模块和多路选择器。
仍以图10所示为例,其中,旁路控制模块bypass ctrl,用于判断当前DMA任务是否需要跳过填充引擎padding engine,并输出多路选择器的选择信号。
具体的,如果当前的DMA任务无需进行padding操作(即当前的DMA任务为非图像填充任务),则需要跳过padding engine的后续处理,具体是指跳过后续的拆分操作、填充操作等,该任务还是会流经padding engine的。如果当前的DMA任务需要进行padding操作(即当前的DMA任务为图像填充任务),则无需跳过padding engine的后续处理,也即,需要采用穿插方式执行拆分操作和填充操作,并合并得到目标数据,等等。
本申请中,多路选择器的输入有两路,一路为:读接口输出的原始数据;另一路为数据合并模块输出的目标数据(可能存在,也可能不存在,根据任务类型而定)。在上述基础上,多路选择器用于接收旁路控制模块输出的选择信号;根据选择信号,从目标数据和原始数据中选择相应的数据进行输出至数据处理方。
也即,本申请中可以通过旁路控制模块生成针对各个DMA任务的选择信号,进而,通过多路选择器选择合适的结果输出至数据处理方。
在本申请实施例中,为了指明需要对第几个DMA任务执行填充操作,可指明每个图像填充任务之前有多少个非图像填充任务,因而,任务队列中的每个图像填充任务都对应有目标域段,目标域段用于表示相应图像填充任务之前所存在的非图像填充任务的数量;此外,每个图像填充任务还对应有相应的任务控制信息,也即任务的具体控制信息,包括但不限于如下的部分或全部:
所需读取的原始数据的长度信息、每行原始数据的行数据量信息、以及各类padding方式所对应的具体数值(top、bottom、left、right、internal)等。
上述任务控制信息主要用于实现后续的拆分、填充、合并等操作。而目标域段这一项配置信息可以反映需要对流经padding engine的第几个task进行padding操作,以控制任务队列中的当前图像填充任务何时开始执行。
参阅图12所示,其为本申请实施例中的一种旁路控制模块的处理逻辑示意图。padding task会被压入task queue中,task queue的头部指针指向最早被压入的task,task queue中不但包含任务控制信息(即图12中的task cmd,全称为task command),还包含目标域段(即图12中的pre task num),该域段表示在该task之前,还有几个非paddingtask需要跳过。
本申请实施例中,按照目标域段的数值,划分为如下两种情况:
情况一:目标域段表示头部指针所指向的图像填充任务(即当前图像填充任务)之前不存在非图像填充任务(如目标域段数值为0)。
该情况下,直接通过旁路控制模块向多路选择器输出第一选择信号,以通过第一选择信号控制多路选择器输出目标数据至数据处理方。
情况二:目标域段表示头部指针所指向的图像填充任务(即当前图像填充任务)之前存在非图像填充任务(如目标域段数值非0)。
该情况下,旁路控制模块内还需要设置一个寄存器,用于记录当前图像填充任务之前所经过的非图像填充任务数。
该情况下,并非头部指针指向该图像填充任务时,就触发针对该图像填充任务的拆分操作和填充操作,而是在确定该图像填充任务之前的非图像填充任务都处理后,再触发针对该图像填充任务的后续操作。
本申请中,对于非图像填充任务而言,无需执行上述所列举的拆分、填充、合并等操作,因而,直接将通过读接口读取到的原始数据输出给下游的数据处理方即可。
在一种可选的实施方式中,每当一个非图像填充任务经过填充引擎时,通过旁路控制模块向多路选择器输出一个第二选择信号,以通过第二选择信号控制多路选择器输出非图像填充任务对应的原始数据至数据处理方。
此外,每当一个非图像填充任务经过填充引擎时,基于预设步长对旁路控制模块中的寄存器执行一次减操作,直至寄存器中的目标域段更新为目标数值,则通过旁路控制模块向多路选择器输出第一选择信号,以通过第一选择信号控制多路选择器输出图像填充任务对应的目标数据至数据处理方。
需要说明的是,上述预设步长、目标数值等的设置可依据实际情况而定,且目标数值的设置受目标域段和预设步长的影响。如预设步长设置为1,目标数值设置为0,某一图像填充任务对应的目标域段数值为5表示该图像填充任务之前有5个非图像填充任务时,可将预设步长设置为1,每经过一个非图像填充任务,则对目标域段减1,当目标域段减为0时,即表示该图像填充任务之前的非图像填充任务都处理完成。
如图12所示的旁路控制模块还包括寄存器,该寄存器用于存储当前图像填充任务对应的目标域段,且该寄存器对应的另一个输入为执行减操作所需的预设步长,如图12中设置为1,每次减1即表示有一个非图像填充任务经过padding engine,该寄存器对应的输出即为更新后的目标域段。
具体的实现方案如图12所示,当一个非padding task经过padding engine时,对pre task num寄存器进行减1操作,当pre task num寄存器减为0时,流经padding engine的task即为需要进行padding操作的task,不能进行bypass。
在上述实施方式中,以padding engine置于DMA数据通路,且相应的配置信息中包含需要对流经padding engine的第几个task进行padding操作,基于此,和上下游模块的交互更加简单,任务处理效率更高。
相应地,bypass ctrl模块输出mux的选择信号,最后的mux输入有两个,一个是经过padding处理后的目标数据,一个是原始输入数据(也即原始数据),如果当前任务无需进行padding处理,则mux选择原始数据输出,否则选择经过padding处理后的数据输出。
基于上述实施方式,本申请提出的松耦合的在线padding engine内嵌到DMA控制系统中,基于DMA搬运数据的同时在线进行padding操作,无需额外的矢量指令,读。
参阅图13所示,其为本申请实施例中的一种DMA控制系统内部的控制单元、读接口和填充引擎之间的交互时序图。该方法的具体实施流程如下:
步骤S1301:控制单元对DMA任务进行解析,生成相应的读取控制信号和处理控制信号。
步骤S1302:控制单元将读取控制信号输入读接口,以及将处理控制信号输入填充引擎。
步骤S1303:读接口基于接收到的读取控制信号,从数据提供方读取DMA任务对应的原始数据,并将原始数据输入填充引擎。
该步骤包括:将原始数据输入数据拆分模块,以及,将原始数据输入多路选择器。
步骤S1304:填充引擎将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块。
步骤S1305:旁路模块判断当前图像填充任务前是否存在非图像填充任务,如果是,则执行步骤S1306,否则,执行步骤S1309。
步骤S1306:当一个非图像填充任务经过填充引擎时,旁路模块对寄存器进行减1操作。
此外,旁路模块向多路选择器输出针对该非图像填充任务的第二选择信号,在旁路模块向多路选择器输出第二选择信号的情况下,对于该非图像填充任务而言,即跳过相应的拆分操作和填充操作,执行步骤S1314。
步骤S1307:旁路模块确定寄存器未减为0,则返回步骤S1306,否则,执行步骤S1308。
步骤S1308:旁路模块当寄存器减为0时,触发针对该当前图像填充任务的任务开始指令,并向多路选择器输出针对当前图像填充任务的第一选择信号。
步骤S1309:有限状态机控制模块接收到对于当前图像填充任务的任务开始指令后,所由空闲状态转移至前导填充状态;并在前导填充状态,通过有限状态机控制模块向填充插入模块输出填充控制信号,控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据。
步骤S1310:在前导填充数据产生完成后,有限状态机控制模块由前导填充状态转移至数据状态;并在数据状态,通过有限状态机控制模块向数据拆分模块发送拆分控制信号,控制数据拆分模块根据拆分控制信号包含的行数据量信息,按行拆分原始数据,获得多个子序列。
步骤S1311:每获得一个子序列,有限状态机控制模块触发一次中间填充状态;在中间填充状态,通过有限状态机控制模块向填充插入模块发送填充控制信号,控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据。
步骤S1312:在原始数据拆分完成后,有限状态机控制模块由数据状态转移至末尾填充状态;在末尾填充状态,通过有限状态机控制模块向填充插入模块输出填充控制信号,控制填充插入模块根据填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据。
步骤S1313:在生成所有填充数据后,有限状态机控制模块由填充状态转移至空闲状态;并在空闲状态,通过有限状态机控制模块向数据合并模块发送合并控制信号,控制数据合并模块将拆分后的原始数据和填充数据合并为目标数据,将目标数据输入多路选择器。
步骤S1314:多路选择器基于选择信号输出相应的数据。
需要说明的是,上述流程图只是简单示例,在读操作与填充操作解耦的基础上,符合拆分操作与填充操作穿插执行的相关流程都适用于本申请实施例,在此不再一一赘述。
概括来说,在本申请实施例中,对于图像填充任务,通过读接口从数据提供方读取原始数据后,还需要采用穿插方式执行拆分操作和填充操作,之后需要将拆分后的原始数据和数据合并获得的目标数据输出至数据处理方。
对于非图像填充任务而言,无需执行拆分操作和填充操作,因而,通过读接口从数据提供方读取原始数据后,直接输出至数据处理方即可。
该方式下,实现了读操作和填充操作的解耦,读总线利用率很高,基于此,性能也较高。
基于相同的发明构思,本申请实施例还提供一种图像填充装置。如图14所示,其为图像填充装置1400的组成结构示意图,该图像填充装置可应用于填充引擎,DMA控制系统还包括读接口和控制单元,填充引擎用于执行以下操作:
从读接口获取DMA任务对应的原始数据,以及接收控制单元发送的处理控制信号;原始数据是读接口在接收到控制单元发送的读取控制信号后,从数据提供方读取到的;读取控制信号和处理控制信号是控制单元对DMA任务进行解析后生成并发送的;
基于处理控制信号确定DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,拆分操作包括:对原始数据进行拆分,填充操作包括:生成原始数据对应的填充数据;
将拆分后的原始数据和填充数据合并为目标数据,并将目标数据输出至数据处理方。
可选的,填充引擎还用于执行以下操作:
基于处理控制信号确定DMA任务是非图像填充任务,则跳过拆分操作和填充操作,将原始数据输出至数据处理方。
可选的,填充引擎具体用于执行以下操作:
生成原始数据对应的前导填充数据;前导填充数据是需填充于第一个原始数据之前的数据;
将原始数据按行拆分为多个子序列,并在每拆分得到的一个子序列后,生成子序列对应的中间填充数据,同时继续拆分得到下一个子序列,直至生成所有的中间填充数据;每个子序列对应的中间填充数据是需填充于子序列及下一子序列之间的数据;
生成原始数据对应的末尾填充数据;末尾填充数据是需填充于最后一个原始数据之后的数据。
可选的,DMA任务有多个;填充引擎包括有限状态机控制模块1401和多个数据处理模块1402;
填充引擎还用于在采用穿插方式执行拆分操作和填充操作之前,执行以下操作:
将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块1401;
填充引擎具体用于执行以下操作:
对于当前图像填充任务,基于有限状态机控制模块1401确定图像填充任务的当前执行状态后,控制相应的数据处理模块1402采用穿插方式执行拆分操作和填充操作。
可选的,任务队列中的每个图像填充任务对应有目标域段,目标域段用于表示相应图像填充任务之前所存在的非图像填充任务的数量;填充引擎还包括旁路控制模块1403和多路选择器1404;
旁路控制模块1403具体用于:对于当前图像填充任务,若确定当前图像填充任务的目标域段表示图像填充任务之前不存在非图像填充任务,则向多路选择器1404输出第一选择信号;
多路选择器1404具体用于:在接收到第一选择信号后,输出目标数据至数据处理方。
如图14所示,多路选择器1404可从数据合并模块1402-3获取目标数据并输出。
可选的,旁路控制模块1403包括寄存器,寄存器用于存储当前图像填充任务对应的目标域段;
旁路控制模块1403还用于:若确定图像填充任务的目标域段表示图像填充任务之前存在非图像填充任务,则每当一个非图像填充任务经过填充引擎时,向多路选择器1404输出一个第二选择信号;以及
每当一个非图像填充任务经过填充引擎时,基于预设步长对寄存器执行一次减操作,直至寄存器中的目标域段更新为目标数值,则向多路选择器1404输出第一选择信号;
多路选择器1404还用于:在接收到第二选择信号后,输出非图像填充任务对应的原始数据至数据处理方。
可选的,数据处理模块1402包括:数据拆分模块1402-1、填充插入模块1402-2和数据合并模块1402-3;当前执行状态包括:空闲状态、数据状态和填充状态;
有限状态机控制模块1401具体用于:在数据状态,向数据拆分模块1402-1发送拆分控制信号;在填充状态,向填充插入模块1402-2发送填充控制信号;
数据拆分模块1402-1具体用于:在接收拆分控制信号后,根据拆分控制信号包含的行数据量信息,执行拆分操作;
填充插入模块1402-2具体用于:在接收到填充控制信号后,根据填充控制信号包含的填充数据量信息,执行填充操作;
有限状态机控制模块1401还用于:在生成所有填充数据后,由填充状态转移至空闲状态;在空闲状态,向数据合并模块1402-3发送合并控制信号;
数据合并模块1402-3具体用于:在接收到合并控制信号后,将拆分后的原始数据和填充数据合并为目标数据。
可选的,填充状态包括前导填充状态;
有限状态机控制模块1401具体用于:接收到对于当前图像填充任务的任务开始指令后,由空闲状态转移至前导填充状态;在前导填充状态,向填充插入模块1402-2输出填充控制信号;
填充插入模块1402-2具体用于:在接收到填充控制信号后,根据填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据;前导填充数据是需填充于第一个原始数据之前的数据。
可选的,有限状态机控制模块1401还用于:
在前导填充数据产生完成后,由前导填充状态转移至数据状态;在数据状态,向数据拆分模块1402-1发送拆分控制信号;
数据拆分模块1402-1具体用于:在接收到拆分控制信号后,根据拆分控制信号包含的行数据量信息,按行拆分原始数据,获得多个子序列。
可选的,填充状态包括中间填充状态;
有限状态机控制模块1401还用于:每获得一个子序列,触发一次中间填充状态;在中间填充状态,向填充插入模块1402-2发送填充控制信号;
填充插入模块1402-2具体用于:在接收到填充控制信号后,根据填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据;每个子序列对应的中间填充数据是需填充于子序列及下一子序列之间的数据。
可选的,填充状态包括末尾填充状态;
有限状态机控制模块1401具体用于:在原始数据拆分完成后,由数据状态转移至末尾填充状态;在末尾填充状态,向填充插入模块1402-2输出填充控制信号;
填充插入模块1402-2具体用于:在接收到填充控制信号后,根据填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据;末尾填充数据是需填充于最后一个原始数据之后的数据。
可选的,填充引擎还用于执行以下操作:
对于当前图像填充任务,若任意一种填充状态不存在,则跳过相应的填充操作。
其中,图14中指向多路选择器1404的虚线表示的是:来自读接口的原始数据;由多路选择器1404指出的虚线表示的是:由多路选择器1404输出原始数据或目标数据至数据处理方。
由于本申请将填充引擎内嵌到了DMA控制系统中,并且,在DMA控制系统中的控制单元对DMA任务进行解析后,会生成指示读接口从数据提供方读取数据的读取控制信号,和指示填充引擎对于图像填充任务进行相关处理的处理控制信号,也即,本申请将填充操作与DMA的读操作进行了解耦,而整块原始数据一般在数据提供方侧是按照线性的方式存储的,在读操作与填充操作解耦的情况下,读操作可以进行连续的线性访问,使得读总线的利用率更高;并且,该方式下对于图像填充任务而言,填充引擎可以采用穿插方式执行拆分操作和填充操作,使得基于DMA搬运数据的同时在线进行填充操作,在提高效率的同时,无需额外的矢量处理指令,性能更高。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本申请时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本申请示例性实施方式的图像填充方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
与上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备。在一种实施例中,电子设备的结构可以如图15所示,包括存储器1501,通讯模块1503以及一个或多个处理器1502。
存储器1501,用于存储处理器1502执行的计算机程序。存储器1501可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。
存储器1501可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1501也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者存储器1501是能够用于携带或存储具有指令或数据结构形式的期望的计算机程序并能够由计算机存取的任何其他介质,但不限于此。存储器1501可以是上述存储器的组合。
处理器1502,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器1502,用于调用存储器1501中存储的计算机程序时实现上述图像填充方法。
通讯模块1503用于与终端设备和其他服务器进行通信。
本申请实施例中不限定上述存储器1501、通讯模块1503和处理器1502之间的具体连接介质。本申请实施例在图15中以存储器1501和处理器1502之间通过总线1504连接,总线1504在图15中以粗线描述,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1504可以分为地址总线、数据总线、控制总线等。为便于描述,图15中仅用一条粗线描述,但并不描述仅有一根总线或一种类型的总线。
存储器1501中存储有计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于实现本申请实施例的图像填充方法。处理器1502用于执行上述的图像填充方法,如图5所示。
在介绍了本申请示例性实施方式的电子设备之后,接下来,介绍根据本申请的另一示例性实施方式的计算装置。
下面参照图16来描述根据本申请的这种实施方式的计算装置1600。图16的计算装置1600仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图16,计算装置1600以通用计算装置的形式表现。计算装置1600的组件可以包括但不限于:上述至少一个处理单元1601、上述至少一个存储单元1602、连接不同系统组件(包括存储单元1602和处理单元1601)的总线1603。
总线1603表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元1602可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1621和/或高速缓存存储器1622,还可以进一步包括只读存储器(ROM)1623。
存储单元1602还可以包括具有一组(至少一个)程序模块1624的程序/实用工具1625,这样的程序模块1624包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算装置1600也可以与一个或多个外部设备1604(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置1600交互的设备通信,和/或与使得该计算装置1600能与一个或多个其它计算装置进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1605进行。并且,计算装置1600还可以通过网络适配器1606与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图16所示,网络适配器1606通过总线1603与用于计算装置1600的其它模块通信。应当理解,尽管图中未表示出,可以结合计算装置1600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本申请提供的图像填充方法的各个方面还可以实现为一种程序产品的形式,其包括计算机程序,当程序产品在电子设备上运行时,计算机程序用于使电子设备执行本说明书上述描述的根据本申请各种示例性实施方式的图像填充方法中的步骤,例如,电子设备可以执行如图5中所示的步骤。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请的实施方式的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括计算机程序,并可以在电子设备上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被命令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由命令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的计算机程序,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。计算机程序可以完全地在用户计算装置上执行、部分地在用户计算装置上执行、作为一个独立的软件包执行、部分在用户计算装置上部分在远程计算装置上执行、或者完全在远程计算装置或服务器上执行。在涉及远程计算装置的情形中,远程计算装置可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算装置,或者,可以连接到外部计算装置(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用计算机程序的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序命令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序命令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的命令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序命令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的命令产生包括命令装置的制造品,该命令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序命令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的命令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (25)
1.一种图像填充方法,其特征在于,应用于直接存储器访问DMA控制系统中的填充引擎,所述DMA控制系统还包括读接口和控制单元,所述方法包括:
从所述读接口获取DMA任务对应的原始数据,以及接收所述控制单元发送的处理控制信号;所述原始数据是所述读接口在接收到所述控制单元发送的读取控制信号后,从数据提供方读取到的;所述读取控制信号和所述处理控制信号是所述控制单元对所述DMA任务进行解析后生成并发送的;
基于所述处理控制信号确定所述DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;
将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述处理控制信号确定所述DMA任务是非图像填充任务,则跳过所述拆分操作和所述填充操作,将所述原始数据输出至所述数据处理方。
3.如权利要求1所述的方法,其特征在于,所述采用穿插方式执行拆分操作和填充操作,包括:
生成所述原始数据对应的前导填充数据;所述前导填充数据是需填充于第一个原始数据之前的数据;
将所述原始数据按行拆分为多个子序列,并在每拆分得到的一个子序列后,生成所述子序列对应的中间填充数据,同时继续拆分得到下一个子序列,直至生成所有的中间填充数据;每个子序列对应的中间填充数据是需填充于所述子序列及下一子序列之间的数据;
生成所述原始数据对应的末尾填充数据;所述末尾填充数据是需填充于最后一个原始数据之后的数据。
4.如权利要求1~3任一项所述的方法,其特征在于,所述DMA任务有多个;所述填充引擎包括有限状态机控制模块和多个数据处理模块;
在所述采用穿插方式执行拆分操作和填充操作之前,还包括:
将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于所述任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块;
所述采用穿插方式执行拆分操作和填充操作,包括:
对于当前图像填充任务,基于所述有限状态机控制模块确定所述图像填充任务的当前执行状态后,控制相应的数据处理模块采用穿插方式执行拆分操作和填充操作。
5.如权利要求4所述的方法,其特征在于,所述任务队列中的每个图像填充任务对应有目标域段,所述目标域段用于表示相应图像填充任务之前所存在的非图像填充任务的数量;所述填充引擎还包括旁路控制模块和多路选择器;所述方法还包括:
对于当前图像填充任务,若确定所述当前图像填充任务的目标域段表示所述图像填充任务之前不存在非图像填充任务,则通过所述旁路控制模块向所述多路选择器输出第一选择信号,以通过所述第一选择信号控制所述多路选择器输出所述目标数据至所述数据处理方。
6.如权利要求5所述的方法,其特征在于,所述旁路控制模块包括寄存器,所述寄存器用于存储当前图像填充任务对应的目标域段;所述方法还包括:
若确定所述图像填充任务的目标域段表示所述图像填充任务之前存在非图像填充任务,则每当一个非图像填充任务经过所述填充引擎时,通过所述旁路控制模块向所述多路选择器输出一个第二选择信号,以通过所述第二选择信号控制所述多路选择器输出所述非图像填充任务对应的原始数据至所述数据处理方;以及
每当一个非图像填充任务经过所述填充引擎时,基于预设步长对所述旁路控制模块中的寄存器执行一次减操作,直至所述寄存器中的目标域段更新为目标数值,则通过所述旁路控制模块向所述多路选择器输出第一选择信号,以通过所述第一选择信号控制所述多路选择器输出所述图像填充任务对应的目标数据至所述数据处理方。
7.如权利要求4所述的方法,其特征在于,所述数据处理模块包括:数据拆分模块和填充插入模块;所述当前执行状态包括:数据状态和填充状态;
所述基于所述有限状态机控制模块确定所述图像填充任务的当前执行状态后,控制相应的数据处理模块采用穿插方式执行拆分操作和填充操作,包括:
在数据状态,通过所述有限状态机控制模块向所述数据拆分模块发送拆分控制信号,以控制所述数据拆分模块根据所述拆分控制信号包含的行数据量信息,执行所述拆分操作;
在填充状态,通过所述有限状态机控制模块向所述填充插入模块发送填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,执行所述填充操作。
8.如权利要求4所述的方法,其特征在于,所述数据处理模块还包括:数据合并模块;所述当前执行状态包括空闲状态和填充状态;
所述方法还包括:
在生成所有填充数据后,所述有限状态机控制模块由填充状态转移至空闲状态;
所述将拆分后的原始数据和所述填充数据合并为目标数据,包括:
在所述空闲状态,通过所述有限状态机控制模块向所述数据合并模块发送合并控制信号,以控制所述数据合并模块将拆分后的原始数据和所述填充数据合并为目标数据。
9.如权利要求7所述的方法,其特征在于,所述填充状态包括前导填充状态;所述当前执行状态还包括空闲状态;所述方法还包括:
接收到对于当前图像填充任务的任务开始指令后,所述有限状态机控制模块由空闲状态转移至前导填充状态;
所述在填充状态,通过所述有限状态机控制模块向所述填充插入模块发送填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,执行所述填充操作,包括:
在所述前导填充状态,通过所述有限状态机控制模块向所述填充插入模块输出填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据;所述前导填充数据是需填充于第一个原始数据之前的数据。
10.如权利要求9所述的方法,其特征在于,所述方法还包括:
在前导填充数据产生完成后,所述有限状态机控制模块由前导填充状态转移至数据状态;
所述在数据状态,通过所述有限状态机控制模块向所述数据拆分模块发送拆分控制信号,以控制所述数据拆分模块根据所述拆分控制信号包含的行数据量信息,执行所述拆分操作,包括:
在所述数据状态,通过所述有限状态机控制模块向所述数据拆分模块发送拆分控制信号,以控制所述数据拆分模块根据所述拆分控制信号包含的行数据量信息,按行拆分所述原始数据,获得多个子序列。
11.如权利要求10所述的方法,其特征在于,所述填充状态包括中间填充状态;所述方法还包括:
每获得一个子序列,所述有限状态机控制模块触发一次中间填充状态;
所述在填充状态,通过所述有限状态机控制模块向所述填充插入模块发送填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,执行所述填充操作,包括:
在所述中间填充状态,通过所述有限状态机控制模块向所述填充插入模块发送填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据;每个子序列对应的中间填充数据是需填充于所述子序列及下一子序列之间的数据。
12.如权利要求11所述的方法,其特征在于,所述填充状态包括末尾填充状态;所述方法还包括:
在所述原始数据拆分完成后,所述有限状态机控制模块由数据状态转移至末尾填充状态;
所述在填充状态,通过所述有限状态机控制模块向所述填充插入模块发送填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,执行所述填充操作,包括:
在所述末尾填充状态,通过所述有限状态机控制模块向所述填充插入模块输出填充控制信号,以控制所述填充插入模块根据所述填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据;所述末尾填充数据是需填充于最后一个原始数据之后的数据。
13.如权利要求9~12任一项所述的方法,其特征在于,所述方法还包括:
对于当前图像填充任务,若任意一种填充状态不存在,则跳过相应的填充操作。
14.一种用于图像填充的DMA控制系统,其特征在于,所述DMA控制系统包括:控制单元,读接口和填充引擎;
所述控制单元,用于对DMA任务进行解析,生成相应的读取控制信号和处理控制信号,并将所述读取控制信号输入所述读接口,以及将所述处理控制信号输入所述填充引擎;
所述读接口,用于基于接收到的读取控制信号,从数据提供方读取所述DMA任务对应的原始数据,并将所述原始数据输入所述填充引擎;
所述填充引擎,用于基于所述处理控制信号确定所述DMA任务是图像填充任务时,采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
15.一种图像填充装置,其特征在于,应用于DMA控制系统中的填充引擎,所述DMA控制系统还包括读接口和控制单元,所述填充引擎用于执行以下操作:
从所述读接口获取DMA任务对应的原始数据,以及接收所述控制单元发送的处理控制信号;所述原始数据是所述读接口在接收到所述控制单元发送的读取控制信号后,从数据提供方读取到的;所述读取控制信号和所述处理控制信号是所述控制单元对所述DMA任务进行解析后生成并发送的;
基于所述处理控制信号确定所述DMA任务是图像填充任务,则采用穿插方式执行拆分操作和填充操作,所述拆分操作包括:对所述原始数据进行拆分,所述填充操作包括:生成所述原始数据对应的填充数据;
将拆分后的原始数据和所述填充数据合并为目标数据,并将所述目标数据输出至数据处理方。
16.如权利要求15所述的装置,其特征在于,所述DMA任务有多个;所述填充引擎包括有限状态机控制模块和多个数据处理模块;
所述填充引擎还用于在采用穿插方式执行拆分操作和填充操作之前,执行以下操作:
将多个DMA任务中的图像填充任务按照先后顺序依次写入任务队列,并基于所述任务队列的先入先出处理方式,将各个图像填充任务依次输出至有限状态机控制模块;
所述填充引擎具体用于执行以下操作:
对于当前图像填充任务,基于所述有限状态机控制模块确定所述图像填充任务的当前执行状态后,控制相应的数据处理模块采用穿插方式执行拆分操作和填充操作。
17.如权利要求16所述的装置,其特征在于,所述任务队列中的每个图像填充任务对应有目标域段,所述目标域段用于表示相应图像填充任务之前所存在的非图像填充任务的数量;所述填充引擎还包括旁路控制模块和多路选择器;
所述旁路控制模块具体用于:对于当前图像填充任务,若确定所述当前图像填充任务的目标域段表示所述图像填充任务之前不存在非图像填充任务,则向所述多路选择器输出第一选择信号;
所述多路选择器具体用于:在接收到所述第一选择信号后,输出所述目标数据至所述数据处理方。
18.如权利要求17所述的装置,其特征在于,所述旁路控制模块包括寄存器,所述寄存器用于存储当前图像填充任务对应的目标域段;
所述旁路控制模块还用于:若确定所述图像填充任务的目标域段表示所述图像填充任务之前存在非图像填充任务,则每当一个非图像填充任务经过所述填充引擎时,向所述多路选择器输出一个第二选择信号;以及
每当一个非图像填充任务经过所述填充引擎时,基于预设步长对所述寄存器执行一次减操作,直至所述寄存器中的目标域段更新为目标数值,则向所述多路选择器输出第一选择信号;
所述多路选择器还用于:在接收到所述第二选择信号后,输出所述非图像填充任务对应的原始数据至所述数据处理方。
19.如权利要求16所述的装置,其特征在于,所述数据处理模块包括:数据拆分模块、填充插入模块和数据合并模块;所述当前执行状态包括:空闲状态、数据状态和填充状态;
所述有限状态机控制模块具体用于:在数据状态,向所述数据拆分模块发送拆分控制信号;在填充状态,向所述填充插入模块发送填充控制信号;
所述数据拆分模块具体用于:在接收所述拆分控制信号后,根据所述拆分控制信号包含的行数据量信息,执行所述拆分操作;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,执行所述填充操作;
所述有限状态机控制模块还用于:在生成所有填充数据后,由填充状态转移至空闲状态;在所述空闲状态,向所述数据合并模块发送合并控制信号;
所述数据合并模块具体用于:在接收到所述合并控制信号后,将拆分后的原始数据和所述填充数据合并为目标数据。
20.如权利要求19所述的装置,其特征在于,所述填充状态包括前导填充状态;
所述有限状态机控制模块具体用于:接收到对于当前图像填充任务的任务开始指令后,由空闲状态转移至前导填充状态;在所述前导填充状态,向所述填充插入模块输出填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的前导填充数据;所述前导填充数据是需填充于第一个原始数据之前的数据。
21.如权利要求20所述的装置,其特征在于,所述有限状态机控制模块还用于:
在前导填充数据产生完成后,由前导填充状态转移至数据状态;在所述数据状态,向所述数据拆分模块发送拆分控制信号;
所述数据拆分模块具体用于:在接收到所述拆分控制信号后,根据所述拆分控制信号包含的行数据量信息,按行拆分所述原始数据,获得多个子序列。
22.如权利要求21所述的装置,其特征在于,所述填充状态包括中间填充状态;
所述有限状态机控制模块还用于:每获得一个子序列,触发一次中间填充状态;在所述中间填充状态,向所述填充插入模块发送填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的中间填充数据;每个子序列对应的中间填充数据是需填充于所述子序列及下一子序列之间的数据。
23.如权利要求22所述的装置,其特征在于,所述填充状态包括末尾填充状态;
所述有限状态机控制模块还用于:在所述原始数据拆分完成后,由数据状态转移至末尾填充状态;在所述末尾填充状态,向所述填充插入模块输出填充控制信号;
所述填充插入模块具体用于:在接收到所述填充控制信号后,根据所述填充控制信号包含的填充数据量信息,生成相应数量的末尾填充数据;所述末尾填充数据是需填充于最后一个原始数据之后的数据。
24.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1~13中任一所述方法的步骤。
25.一种计算机可读存储介质,其特征在于,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行权利要求1~13中任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310247553.6A CN116977151A (zh) | 2023-03-07 | 2023-03-07 | 一种图像填充方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310247553.6A CN116977151A (zh) | 2023-03-07 | 2023-03-07 | 一种图像填充方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116977151A true CN116977151A (zh) | 2023-10-31 |
Family
ID=88478514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310247553.6A Pending CN116977151A (zh) | 2023-03-07 | 2023-03-07 | 一种图像填充方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116977151A (zh) |
-
2023
- 2023-03-07 CN CN202310247553.6A patent/CN116977151A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7930162B1 (en) | Accelerating hardware co-simulation using dynamic replay on first-in-first-out-driven command processor | |
CN110007961B (zh) | 一种基于risc-v的边缘计算硬件架构 | |
US9454322B2 (en) | Results generation for state machine engines | |
US11775320B2 (en) | Overflow detection and correction in state machine engines | |
US8680888B2 (en) | Methods and systems for routing in a state machine | |
CN107608750B (zh) | 用于型式辨识的装置 | |
US10489062B2 (en) | Methods and systems for using state vector data in a state machine engine | |
JP2015531936A (ja) | 状態機械エンジンにおける命令挿入 | |
US10268602B2 (en) | System and method for individual addressing | |
TW201331856A (zh) | 用於一狀態機中偵測之方法及系統 | |
US10430210B2 (en) | Systems and devices for accessing a state machine | |
US20230176999A1 (en) | Devices for time division multiplexing of state machine engine signals | |
US20220261257A1 (en) | Systems and devices for accessing a state machine | |
CN117827284B (zh) | 向量处理器访存指令处理方法、系统、设备及存储介质 | |
JP4051974B2 (ja) | 画像処理装置および画像処理方法 | |
CN116977151A (zh) | 一种图像填充方法、装置、电子设备和存储介质 | |
CN104503733A (zh) | 一种状态机的合并方法和装置 | |
CN116893854A (zh) | 指令资源的冲突检测方法、装置、设备及存储介质 | |
CN114970848A (zh) | 用于并行处理器的数据搬运装置及相应处理器 | |
CN118426512B (zh) | 流水级反压控制方法及装置 | |
US20050102490A1 (en) | Data-driven type information processor and method of controlling execution of data flow program | |
CN118570352A (zh) | 一种渲染方法、装置、系统、设备和存储介质 | |
CN112231226A (zh) | 一种软件测试数据生成、维护和导出的方法及系统 | |
CN115114876A (zh) | 一种访问内部总线的方法、系统、设备和存储介质 | |
JPH1165887A (ja) | プロセッサ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |