一种基于可编程并行处理器的全搜索运动估计方法

文档序号:7797167阅读:247来源:国知局
一种基于可编程并行处理器的全搜索运动估计方法
【专利摘要】本发明公开一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:在可编程并行处理器中建立线程组,线程组包括线程;将N×N的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系;将当前帧宏块加载到可编程并行处理器的共享内存;对当前帧宏块进行搜索时,直接通过线程调用共享内存的当前帧子块数据;所述N为自然数。本发明将每个当前帧宏块的处理映射到一个GPU线程组中,从而能够很方便的将该宏块的数据加载进GPU的片内共享内存,实现线程组内共享当前宏块数据。这样,在此宏块对应的整个搜索区域的处理过程中,不必再重复从显存中加载该数据,从而节约了宝贵的片外访存带宽。
【专利说明】一种基于可编程并行处理器的全搜索运动估计方法【技术领域】
[0001]本发明涉及图像压缩领域,更具体的说,涉及一种基于可编程并行处理器的全搜索运动估计方法。
【背景技术】
[0002]在基于运动补偿的视频编码系统中,运动估计是计算量最大、访存带宽要求最高的环节。它往往通过在参考帧中寻找相对于当前宏块的最优匹配块,来降低视频数据的时间域相关性,从而达到压缩的目的。由于帧尺寸大、搜索范围大、参考帧数量多等原因,高质量视频编码系统中的运动搜索需要极大的访存带宽。
[0003]图形处理器(GPU)是一种新兴的并行计算设备,相对于普通多核CPU计算的有限并行能力而言,其大规模数据并行的特点,有助于解决高质量视频编码算法,尤其是整像素运动估计的全搜索算法的巨大计算量问题。相对于CPU,其优势在于单位时间理论计算能力,而劣势在于其片外访存带宽的瓶颈。
[0004]以H.264的整像素运动估计为例,对当前帧的每一个16x16大小的宏块(MB),在其参考帧内都有对应的运动估计搜索范围,每一个搜索位置都对应于宏块的一个运动向量(motion vector,以下简称MV)。而每一个宏块又可以分为16x8,8x16,8x8,8x4,4x8,4x4大小的子块。仅以一个4x4子块的整像素全搜索为例,假设参考帧数仅为1,对一幅长为width,宽为heigtht,搜索宽度为search_range的视频帧,需要搜索的位置N =width/4*height/4*search_range2。以1080P高清视频,搜索宽度为32的典型情况为例,一帧视频的全搜索量将达132710400之多!
[0005]由于全搜索算法的本质是基于宏块的,因此非常适合GPU的并行实现。但是算法需要对参考帧进行大量反复的读取,由于GPU的访存带宽有限,算法未经优化将很难达到较高的效率。

【发明内容】

[0006]本发明所要解决的技术问题是提供一种能降低可编程并行处理器访存数据量的基于可编程并行处理器的全搜索运动估计方法。
[0007]本发明的目的是通过以下技术方案来实现的:
[0008]一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:
[0009]在可编程并行处理器中建立线程组,线程组包括线程;
[0010]将NXN的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立--
对应的映射关系;
[0011]每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存;
[0012]所述N为自然数。
[0013]进一步的,所述全搜索运动估计方法还包括参考帧的读取步骤:
[0014]每个当前帧宏块在参考帧中都有一个对应的对位宏块(co-located MB),以对位宏块为中心,建立MXM的搜索块,所述M为大于N的自然数;
[0015]将搜索块分割成多个搜索子块,搜索子块与线程建立一一对应的映射关系;
[0016]每个线程将对应的搜索子块加载到可编程并行处理器的共享内存。通过线程来均分读取MXM的搜索块的数据,每个线程独立并列运行,互不影响,读取数据的速度和效果都有显著提升。
[0017]进一步的,所述全搜索运动估计方法还包括宏块的全搜索运算步骤:
[0018]所述对位宏块在搜索块中有多种二维位移量,每种位移量形成一个参考宏块,所有参考宏块的集合形成一个搜索范围;所述每个线程至少对一个参考宏块进行搜索运算,得出局部最优结果;每个线程对应的参考宏块的集合构成一个搜索片区,
[0019]汇总所有线程的局部最优结果,然后计算当前帧宏块在整个搜索块内的最优的搜索结果。完成当前帧宏块及其对应的参考帧搜索块数据载入,进入搜索阶段。
[0020]此时需要将对位宏块在搜索块的范围内进行位移,对位宏块每一种的移位都会产生一个新宏块数据(设为参考宏块),采用排列组合的方式,每个对位宏块可以在搜索块中组合出(M-N)x(M-N)个不同的参考宏块,当前帧宏块需要跟每个参考宏块进行对比,计算残差(SAD)值,最终得到最优代价和运动矢量W。为了提升运算效率,可以将所有的参考宏块的搜索运算均摊到每个线程,每个线程读取整个当前帧宏块数据,然后分别跟其负责的参考宏块进行一一对比,最终得到局部最优结果,这样每个线程之间并行运算,互不影响,大幅提升了运算效率。
[0021]进一步的,可编程并行处理器包括第一运算内核和第二运算内核,在可编程并行处理器中启动第一运算内核,第一运算内核包括多个线程,每个线程从共享内存中读取当前帧宏块和搜索块数据;在其搜索片区中计算所述局部最优结果,
[0022]将每个线程的局部最优结果存储到外部存储器,然后在可编程并行处理器中启动第二运算内核,第二运算内核从外部存储器读取每个局部最优结果,计算出当前帧宏块在整个搜索块内的最优的搜索结果。寄存器是各自线程自己能看到,而共享内存、外部存储器则能够被所有的线程访问,由于共享内存不占用外部的访存带宽,因此将整个宏块的当前帧宏块存储到共享内存。
[0023]进一步的,每个线程遍历所有可能的模式进行全搜索,每次计算得到的搜索结果存储对应的寄存器中,所述搜索结果包括运动向量和编码代价;
[0024]如果计算的编码代价小于寄存器的编码代价,用当前计算的编码代价替换寄存器的编码代价,
[0025]每个线程完成其搜索片区的搜索运算后,寄存器存储的运动向量和编码代价为局部最优结果。总的来说,访存带宽水平:寄存器明显大于共享内存,共享内存远大于外部存储器,线程每次的结果存在寄存器中,最后完成遍历时才从寄存器写外部存储器,这样省访存带宽。
[0026]第一运算内核在线程组加载了对应的当前帧宏块及参考帧的搜索块数据后,对每一个线程,首先依次遍历其所负责的2x2搜索片区(即4个参考宏块数据),依次求得每个4x4子块的SAD值,写入临时寄存器中,并不占用片外的全局内存。求得4x4子块的SAD值后,同样通过累加得出8x4,4x8,16x8,8x16,16x16等各种其他模式的SAD值,同样存在临时寄存器中。继续在遍历过程中,对每一种模式分别更新其最佳的运动向量(MV)和编码代价(初始化为无穷大,每当当前搜索位置计算所得之代价小于目前已知的最佳代价,就更新它)。这样当遍历完毕,每一个线程都将得出其2x2搜索范围内的最佳MV和编码代价,这些数据将作为中间数据写入于片外全局内存中。该数据的组织可视为一个二维数组,其元素尺寸与原始视频帧相同,每个元素则包含了其对应的当前帧像素所在宏块的局部最佳MV和相应的搜索代价。
[0027]第二运算内核设计为每个线程负责一个宏块的进一步处理,即每个线程可视为进行中间数据中16x16元素的读入,然后通过遍历该区域的数据,依次比较各局部最优的结果,最终得到当前宏块在整个32x32搜索区域中全局最优的MV及其编码代价。此后便可以进行最佳模式的选择,以及细化的分像素运动估计。
[0028]进一步的,相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区;
[0029]对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;
[0030]后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。假设参考帧中的搜索块(SW)是一个以相应当前巾贞位置为中心的宽度为S_width高度为S_height的矩形,一行宏块数量为MBh,一列宏块数量为MBV。相邻的搜索块是重叠的,不再相互独立。两个相邻搜索块的重叠的搜索区域大小为S_heightX (S_width_MB_width),其中MB_width是当前宏块的宽度,
[0031]现有技术载入搜索窗数据所需的片外访存带宽为:
[0032]Bff_normal = MBhX (S_height X S_width) XMBv
[0033]采用本技术方案进行数据重用优化后的访存带宽为:
[0034]Bff_proposed = (S_height X S_width+ (MBh-1) X S_height XMB_width) XMBv
[0035]以宏块大小为16xl6,VGA分辨率(即MBh为40,MBV为30),搜索块为48x48的情况为例,本优化的访存带宽节省率将达到近三倍:
[0036]Bff_proposed/Bff_normal = (48 X 48+39 X 48 X 16) / (40 X 48 X 48) = 1/2.86
[0037]不难看出,对于高分辨率的视频帧,随着水平方向宏块数的增多,此优化比率将更高。因此,在高清视频日益占主流的今天,该优化的价值不言而喻。
[0038]进一步的,可编程并行处理器包括第一运算内核和第二运算内核,在可编程并行处理器中启动第一运算内核,第一运算内核同时运行一列宏块数量对应的线程组。
[0039]进一步的,所述当前帧和参考帧先预存到纹理内存,所述线程从纹理内存中读取当前帧和参考帧数据,然后存储到可编程并行处理器中的共享内存。对当前帧宏块进行搜索时,直接通过共享内存读取参考帧对应的宏块数据。与普通的一维全局内存访问方式不同,可编程并行处理器(以下以GPU为例进行说明)片内的共享内存,即其内部的存储空间对二维空间的局域访问有优化,因此当相邻的GPU线程访问二维空间中相近的区域时,其访存效率较高。针对这一特点,本技术方案首先将当前帧宏块和参考帧加载为纹理内存,而不是以普通的全局内存形式存在于片外,这样只要当前线程所需的数据已经在片内的纹理高速缓存中,就可以节约宝贵的访存带宽。此外,由于共享内存具有内建的边界处理机制,不必占用计算资源来对边界进行特殊处理,方便了算法实现。
[0040]纹理内存其实就是物理上的外部内存,对应GPU而言,即为独立于GPU芯片存在于显卡上的显存芯片,两者之间通过芯片级数据总线连接,通信速度会慢于GPU芯片的计算单元跟共享存储器在芯片内直接通信,跟普通方式访问外部存储器的方式有所不同,就是当数据是按纹理内存方式存在外存时,GPU运算核心读取它时会把处理器芯片内的纹理缓存(texture cache)用起来,因此产生(2D空间相关性)访存优化效果。
[0041]进一步的,所述可编程并行处理器为GPU。
[0042]进一步的,每个线程组的线程数量等于对应当前帧宏块的像素数量,每个当前帧子块代表一个像素的数据。
[0043]经研究,现有技术每一次对当前帧宏块与对位宏块求SAD值,都要重新加载当前帧宏块数据,这就浪费了访存带宽。本发明将每个当前帧宏块的处理映射到一个GPU线程组中,从而能够很方便的将该宏块的数据加载进GPU的片内共享内存,实现线程组内共享当前宏块数据。这样,在此宏块对应的整个搜索区域的处理过程中,不必再重复从显存中加载该数据,从而节约了宝贵的片外访存带宽。另外,通过线程来均分读取当前帧宏块的数据,每个线程独立并列运行,互不影响,读取数据的速度和效果都有显著提升。
【专利附图】

【附图说明】
[0044]图1是本发明基于可编程并行处理器的全搜索运动估计方法的方法示意图;
[0045]图2是本发明实施例的两个相邻搜索位置的搜索块重叠的示意图;
[0046]图3是本发明实施例的参考帧搜索块的数据重用原理示意图; [0047]图4是本发明实施例的压缩中间数据的方法示意图。
【具体实施方式】
[0048]一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:
[0049]在可编程并行处理器中建立线程组,线程组包括线程;
[0050]将NXN的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立--
对应的映射关系;
[0051]每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存;
[0052]所述N为自然数。
[0053]经研究,现有技术每一次对当前帧宏块与对位宏块求SAD值,都要重新加载当前帧宏块数据,这就浪费了访存带宽。本发明将每个当前帧宏块的处理映射到一个GPU线程组中,从而能够很方便的将该宏块的数据加载进GPU的片内共享内存,实现线程组内共享当前宏块数据。这样,在此宏块对应的整个搜索区域的处理过程中,不必再重复从显存中加载该数据,从而节约了宝贵的片外访存带宽。另外,通过线程来均分读取当前帧宏块的数据,每个线程独立并列运行,互不影响,读取数据的速度和效果都有显著提升。
[0054]下面选择GPU作为可编程并行处理器,每个当前帧子块代表一个像素的数据为例,结合附图和较佳的实施例对本发明作进一步说明。
[0055]一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:
[0056]在GPU中建立线程组,线程组包括线程;
[0057]将当前帧的宏块分割成多当前帧宏块,每个当前帧子块与线程建立--对应的映
射关系,每个线程组的线程数量等于对应当前帧宏块的像素数量,每个当前帧子块代表一个像素的数据;
[0058]每个当前巾贞宏块在参考巾贞中都有一个对应的对位宏块,以对位宏块为中心,建立MXM的搜索块,所述M为大于N的自然数;将搜索块分割成多个搜索子块,搜索子块与线程
建立一一对应的映射关系;
[0059]每个线程将当前帧子块及其对应的搜索子块加载到可编程并行处理器的共享内存中;
[0060]对当前帧宏块进行搜索时,直接通过线程调用共享内存的当前帧宏块和搜索块数据;
[0061 ] 当前帧和参考帧先预存到纹理内存,线程从纹理内存中读取当前帧和参考帧数据,然后存储到可编程并行处理器中的共享内存。
[0062]考虑一幅长为width,宽为heigtht,搜索宽度为search_range的视频巾贞,其当前中贞宏块数为width/16*height/16,每个当前巾贞宏块需要搜索search_range2次,因此访存量为width/16*height/16*search_range2*16*16.以1080P高清视频,单参考巾贞,搜索宽度为32的典型情况为例,一帧视频的访存量将达2123366400之多,十分巨大。如图2所示,当前宏块在同一参考帧内的水平方向相邻的两个搜索位置对应的搜索块分别为SA1、SA2,两者有明显的重叠(实际上仅有少部分独立),假如GPU上两个并行的线程分别处理它们时,显然载入数据的重复性极高。因此本实施方式首先将参考帧加载为纹理内存,而不是以普通的全局内存形式存在于片外,纹理内存具有内建的边界处理机制,不必占用计算资源来对边界进行特殊处理,方便了算法实现。最后将参考帧的数据从纹理内存读取到可编程并行处理器的共享内存中,当前帧跟参考帧比对时,统一从共享内存中读取参考帧的数据,无须频繁访问片外的纹理内存,节约宝贵的访存带宽。
[0063]纹理内存其实就是物理上的外部内存,对应GPU而言,即为独立于GPU芯片存在于显卡上的显存芯片,两者之间通过芯片级数据总线连接,通信速度会慢于GPU芯片的计算单元跟共享存储器在芯片内直接通信,跟普通方式访问外部存储器的方式有所不同,就是当数据是按纹理内存方式存在外存时,GPU运算核心读取它时会把处理器芯片内的纹理缓存(texture cache)用起来,因此产生(2D空间相关性)访存优化效果。
[0064]进一步的,本发明还可以用于解决参考帧的重复读取问题。
[0065]鉴于参考帧中搜索所需加载的像素区域大于对位宏块,因此,搜索块在参考帧中会发生重叠,相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区。当前帧宏块的大小和对位宏块相等,因此,搜索块包括的像素数量也大于当前帧宏块,每个线程要读取多个像素。
[0066]对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;
[0067]后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。在可编程并行处理器中启动第一运算内核,第一运算内核同时运行一列宏块数量对应的线程组。
[0068]每个GPU线程各自读取一个矩形区域的像素。如图3所示,以当前宏块尺寸16x16,搜索区域32x32为例,则参考帧搜索块SW为48x48(SW_widthXSW_height),因此每个线程需要读取大小为3x3像素的矩形区域。[0069]令某一 GPU线程对应的像素在当前帧中的全局坐标为(X,y),而在宏块中的局部坐标为(i,j),则该线程所需读取的纹理内存中的像素为:
[0070]P{(X - 16+i*3+m, y - 16+j*3+n), m=0,1,2,3;n=0,1,2,3}
[0071]假设参考帧中的搜索块(SW)是一个以相应当前帧位置为中心的宽度为S_width高度为SJieight的矩形,一行宏块数量为MBh,一列宏块数量为MBV。相邻的搜索块是重叠的,不再相互独立。两个相邻搜索块的重叠的搜索区域大小为S_heightX (S_width_MB_width),其中MB_width是当前宏块的宽度,
[0072]现有技术载入搜索块数据所需的片外访存带宽为:
[0073]Bff_normal = MBhX (S_height X S_width) XMBv
[0074]采用本技术方案进行数据重用优化后的访存带宽为:
[0075]Bff_proposed = (S_height X S_width+ (MBh-1) X S_height XMB_width) XMBv
[0076]以宏块大小为16xl6,VGA分辨率(即MBh为40,MBV为30),搜索块为48x48的情况为例,本优化的访存带宽节省率将达到近三倍:
[0077]Bff_proposed/Bff_normal = (48X48+39X48X16)/(40X48X48) = 1/2.86
[0078]不难看出,对于高分辨率的视频帧,随着水平方向宏块数的增多,此优化比率将更高。因此,在高清视频日益占主流的今天,该优化的价值不言而喻。
[0079]本发明还进一步解决了中间数据的反复读取问题。
[0080]步骤1:计算局部最优结果。
[0081]当前帧宏块在其相应的参考帧中都有对应的对位宏块,以对位宏块为中心,建立范围大于并完全覆盖该对位宏块的搜索块;
[0082]所述对位宏块在搜索块中有多种二维位移量,每种位移量形成一个参考宏块,所有参考宏块的集合形成一个搜索范围;
[0083]在可编程并行处理器中启动第一运算内核,第一运算内核包括多个线程,每个线程从所述共享内存中读取相应的当前帧宏块和搜索块数据,
[0084]每个线程至少对一个参考宏块进行搜索运算,每个线程对应的参考宏块的集合构成一个搜索片区,每次计算得到的搜索结果存储对应的寄存器中,所述搜索结果包括运动向量和编码代价;
[0085]如果计算的编码代价小于寄存器的编码代价,用当前计算的编码代价替换寄存器的编码代价,每个线程完成其搜索片区的搜索运算后,寄存器存储的运动向量和编码代价为局部最优结果;
[0086]将局部最优结果存储到该线程对应的寄存器中;
[0087]当第一运算内核完成整个搜索块的搜索后,将每个线程的局部最优结果存储到外部存储器,
[0088]若当前帧宏块对应的对位宏块大小为16x16,搜索范围为32x32,则搜索块的大小为32+16=48 (x48),则16x16线程组中平均每线程的当前帧子块为Ixl (当前帧)和3x3 (搜索块),而搜索片区为2x2 (4个参考宏块)。
[0089]步骤2:计算整个当前帧宏块的最优的搜索结果。
[0090]第二运算内核从外部存储器读取所有局部最优结果,计算出整个当前帧宏块的最优的搜索结果。[0091]总的来说,访存带宽水平:寄存器明显大于共享内存,共享内存远大于外部存储器,线程每次的结果存在寄存器中,最后完成遍历时才从寄存器写外部存储器,这样省访存带宽。
[0092]寄存器是各自线程自己能看到,而共享内存、外部存储器则能够被所有的线程访问,由于共享内存不占用外部的访存带宽,因此将整个宏块的当前帧宏块存储到共享内存。
[0093]参见图4,第一运算内核在线程组加载了当前帧宏块及其对应的搜索块,对每一个线程,首先依次遍历其所负责的2x2搜索区域,依次求得每个4x4子块的SAD值,写入临时寄存器中,并不占用片外的全局内存。
[0094]求得4x4子块的SAD值后,同样通过累加得出8x4,4x8,16x8,8x16,16x16等各种其他模式的SAD值,同样存在临时寄存器中。
[0095]继续在遍历过程中,对每一种模式分别更新其最佳的运动向量(MV)和编码代价(初始化为无穷大,每当当前搜索位置计算所得之代价小于目前已知的最佳代价,就更新它)。这样当遍历完毕,每一个线程都将得出其2x2搜索范围内的最佳MV和编码代价,这些数据将作为中间数据写入于片外全局内存中。该数据的组织可视为一个二维数组,其元素尺寸与原始视频帧相同,每个元素则包含了其对应的当前帧像素所在宏块的局部最佳MV和相应的搜索代价。
[0096]第二运算内核设计为每个线程负责一个宏块的进一步处理,即每个线程可视为进行中间数据中16x16元素的读入,然后通过遍历该区域的数据,依次比较各局部最优的结果,最终得到当前宏块在整个32x32搜索范围中全局最优的MV及其编码代价。此后便可以进行最佳模式的选择,以及细化的分像素运动估计。
[0097]本发明不局限于GPU,还可以采用其他可编程并行处理器。
[0098]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属【技术领域】的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
【权利要求】
1.一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,包括步骤: 在可编程并行处理器中建立线程组,线程组包括线程; 将NXN的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系; 每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存; 所述N为自然数。
2.如权利要求1所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,所述全搜索运动估计方法还包括参考帧的读取步骤: 每个当前帧宏块在参考帧中都有一个对应的对位宏块,以对位宏块为中心,建立MXM的搜索块,所述M为大于N的自然数; 将搜索块分割成多个搜索子块,搜索子块与线程建立一一对应的映射关系; 每个线程将对应的搜索子块加载到可编程并行处理器的共享内存。
3.如权利要求2所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,所述全搜索运动估计方法还包括宏块的全搜索运算步骤: 所述对位宏块在搜索块中有多种二维位移量,每种位移量形成一个参考宏块,所有参考宏块的集合形成一个搜索范围;所述每个线程至少对一个参考宏块进行搜索运算,得出局部最优结果;其对应的参考宏块的集合构成一个搜索片区,` 汇总所有线程的局部最优结果,然后计算当前帧宏块在整个搜索块内的最优的搜索结果O
4.如权利要求3所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于, 可编程并行处理器包括第一运算内核和第二运算内核,在可编程并行处理器中启动第一运算内核,第一运算内核包括多个线程,每个线程从共享内存中读取当前帧宏块和搜索块数据;在其搜索片区中计算所述局部最优结果, 将每个线程的局部最优结果存储到外部存储器,然后在可编程并行处理器中启动第二运算内核,第二运算内核从外部存储器读取每个局部最优结果,计算出当前帧宏块在整个搜索块内的最优的搜索结果。
5.如权利要求4所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于, 每个线程遍历所有可能的模式进行全搜索,每次计算得到的搜索结果存储对应的寄存器中,所述搜索结果包括运动向量和编码代价; 如果计算的编码代价小于寄存器的编码代价,用当前计算的编码代价替换寄存器的编码代价, 每个线程完成其搜索片区的搜索运算后,寄存器存储的运动向量和编码代价为局部最优结果。
6.如权利要求2所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区; 对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。
7.如权利要求6所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于, 可编程并行处理器包括第一运算内核和第二运算内核,在可编程并行处理器中启动第一运算内核,第一运算内核同时运行一列宏块数量对应的线程组。
8.如权利要求2所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,所述当前帧和参考帧先预存到纹理内存,所述线程从纹理内存中读取当前帧和参考帧数据,然后存储到可编程并行处理器中的共享内存。
9.如权利要求1所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,所述可编程并行处理器为GPU。
10.如权利要求1所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,每个线程组的线程数量等于对应当前帧宏块的像素数量,每个当前帧子块代表一个像素的数据 。
【文档编号】H04N19/527GK103873874SQ201410056657
【公开日】2014年6月18日 申请日期:2014年2月19日 优先权日:2014年2月19日
【发明者】隆刚, 金明, 史方 申请人:同观科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1