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

技术编号:15555496 阅读:62 留言:0更新日期:2017-06-09 10:47
本发明专利技术公开一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:在可编程并行处理器中建立线程组,线程组包括线程;将N×N的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系;将当前帧宏块加载到可编程并行处理器的共享内存;对当前帧宏块进行搜索时,直接通过线程调用共享内存的当前帧子块数据;所述N为自然数。本发明专利技术将每个当前帧宏块的处理映射到一个GPU线程组中,从而能够很方便的将该宏块的数据加载进GPU的片内共享内存,实现线程组内共享当前宏块数据。这样,在此宏块对应的整个搜索区域的处理过程中,不必再重复从显存中加载该数据,从而节约了宝贵的片外访存带宽。

A fully search motion estimation method based on programmable parallel processor

The invention discloses a method comprising the steps of estimation, can full search motion programming based on parallel processors in programmable parallel thread group processor, including thread thread group; N * N the current frame macro block is divided into a plurality of sub blocks of the current frame, each current frame sub block and thread mapping one by one the corresponding; the current frame macroblock can be loaded into the shared memory programming parallel processor; the current frame macroblock search, direct shared memory block of current frame data through the thread call; the N is a natural number. In the invention, each mapping macroblocks of the current frame to a GPU thread group, which can easily be shared memory of the macroblock data is loaded into the GPU chip, the current macroblock data sharing within the thread group. So, handling the entire process of the search area in the corresponding macroblock, no need to repeat from memory to load the data, thereby saving valuable on-chip memory bandwidth.

【技术实现步骤摘要】
一种基于可编程并行处理器的全搜索运动估计方法
本专利技术涉及图像压缩领域,更具体的说,涉及一种基于可编程并行处理器的全搜索运动估计方法。
技术介绍
在基于运动补偿的视频编码系统中,运动估计是计算量最大、访存带宽要求最高的环节。它往往通过在参考帧中寻找相对于当前宏块的最优匹配块,来降低视频数据的时间域相关性,从而达到压缩的目的。由于帧尺寸大、搜索范围大、参考帧数量多等原因,高质量视频编码系统中的运动搜索需要极大的访存带宽。图形处理器(GPU)是一种新兴的并行计算设备,相对于普通多核CPU计算的有限并行能力而言,其大规模数据并行的特点,有助于解决高质量视频编码算法,尤其是整像素运动估计的全搜索算法的巨大计算量问题。相对于CPU,其优势在于单位时间理论计算能力,而劣势在于其片外访存带宽的瓶颈。以H.264的整像素运动估计为例,对当前帧的每一个16x16大小的宏块(MB),在其参考帧内都有对应的运动估计搜索范围,每一个搜索位置都对应于宏块的一个运动向量(motionvector,以下简称MV)。而每一个宏块又可以分为16x8,8x16,8x8,8x4,4x8,4x4大小的子块。仅以一个4x4子块的整像素全搜索为例,假设参考帧数仅为1,对一幅长为width,宽为heigtht,搜索宽度为search_range的视频帧,需要搜索的位置N=width/4*height/4*search_range2。以1080P高清视频,搜索宽度为32的典型情况为例,一帧视频的全搜索量将达132710400之多!由于全搜索算法的本质是基于宏块的,因此非常适合GPU的并行实现。但是算法需要对参考帧进行大量反复的读取,由于GPU的访存带宽有限,算法未经优化将很难达到较高的效率。
技术实现思路
本专利技术所要解决的技术问题是提供一种能降低可编程并行处理器访存数据量的基于可编程并行处理器的全搜索运动估计方法。本专利技术的目的是通过以下技术方案来实现的:一种基于可编程并行处理器的全搜索运动估计方法,包括步骤:在可编程并行处理器中建立线程组,线程组包括线程;将N×N的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系;每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存;所述N为自然数。进一步的,所述全搜索运动估计方法还包括参考帧的读取步骤:每个当前帧宏块在参考帧中都有一个对应的对位宏块(co-locatedMB),以对位宏块为中心,建立M×M的搜索块,所述M为大于N的自然数;将搜索块分割成多个搜索子块,搜索子块与线程建立一一对应的映射关系;每个线程将对应的搜索子块加载到可编程并行处理器的共享内存。通过线程来均分读取M×M的搜索块的数据,每个线程独立并列运行,互不影响,读取数据的速度和效果都有显著提升。进一步的,所述全搜索运动估计方法还包括宏块的全搜索运算步骤:所述对位宏块在搜索块中有多种二维位移量,每种位移量形成一个参考宏块,所有参考宏块的集合形成一个搜索范围;所述每个线程至少对一个参考宏块进行搜索运算,得出局部最优结果;每个线程对应的参考宏块的集合构成一个搜索片区,汇总所有线程的局部最优结果,然后计算当前帧宏块在整个搜索块内的最优的搜索结果。完成当前帧宏块及其对应的参考帧搜索块数据载入,进入搜索阶段。此时需要将对位宏块在搜索块的范围内进行位移,对位宏块每一种的移位都会产生一个新宏块数据(设为参考宏块),采用排列组合的方式,每个对位宏块可以在搜索块中组合出(M-N)x(M-N)个不同的参考宏块,当前帧宏块需要跟每个参考宏块进行对比,计算残差(SAD)值,最终得到最优代价和运动矢量MV。为了提升运算效率,可以将所有的参考宏块的搜索运算均摊到每个线程,每个线程读取整个当前帧宏块数据,然后分别跟其负责的参考宏块进行一一对比,最终得到局部最优结果,这样每个线程之间并行运算,互不影响,大幅提升了运算效率。进一步的,可编程并行处理器包括第一运算内核和第二运算内核,在可编程并行处理器中启动第一运算内核,第一运算内核包括多个线程,每个线程从共享内存中读取当前帧宏块和搜索块数据;在其搜索片区中计算所述局部最优结果,将每个线程的局部最优结果存储到外部存储器,然后在可编程并行处理器中启动第二运算内核,第二运算内核从外部存储器读取每个局部最优结果,计算出当前帧宏块在整个搜索块内的最优的搜索结果。寄存器是各自线程自己能看到,而共享内存、外部存储器则能够被所有的线程访问,由于共享内存不占用外部的访存带宽,因此将整个宏块的当前帧宏块存储到共享内存。进一步的,每个线程遍历所有可能的模式进行全搜索,每次计算得到的搜索结果存储对应的寄存器中,所述搜索结果包括运动向量和编码代价;如果计算的编码代价小于寄存器的编码代价,用当前计算的编码代价替换寄存器的编码代价,每个线程完成其搜索片区的搜索运算后,寄存器存储的运动向量和编码代价为局部最优结果。总的来说,访存带宽水平:寄存器明显大于共享内存,共享内存远大于外部存储器,线程每次的结果存在寄存器中,最后完成遍历时才从寄存器写外部存储器,这样省访存带宽。第一运算内核在线程组加载了对应的当前帧宏块及参考帧的搜索块数据后,对每一个线程,首先依次遍历其所负责的2x2搜索片区(即4个参考宏块数据),依次求得每个4x4子块的SAD值,写入临时寄存器中,并不占用片外的全局内存。求得4x4子块的SAD值后,同样通过累加得出8x4,4x8,16x8,8x16,16x16等各种其他模式的SAD值,同样存在临时寄存器中。继续在遍历过程中,对每一种模式分别更新其最佳的运动向量(MV)和编码代价(初始化为无穷大,每当当前搜索位置计算所得之代价小于目前已知的最佳代价,就更新它)。这样当遍历完毕,每一个线程都将得出其2x2搜索范围内的最佳MV和编码代价,这些数据将作为中间数据写入于片外全局内存中。该数据的组织可视为一个二维数组,其元素尺寸与原始视频帧相同,每个元素则包含了其对应的当前帧像素所在宏块的局部最佳MV和相应的搜索代价。第二运算内核设计为每个线程负责一个宏块的进一步处理,即每个线程可视为进行中间数据中16x16元素的读入,然后通过遍历该区域的数据,依次比较各局部最优的结果,最终得到当前宏块在整个32x32搜索区域中全局最优的MV及其编码代价。此后便可以进行最佳模式的选择,以及细化的分像素运动估计。进一步的,相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区;对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。假设参考帧中的搜索块(SW)是一个以相应当前帧位置为中心的宽度为S_width高度为S_height的矩形,一行宏块数量为MBH,一列宏块数量为MBV。相邻的搜索块是重叠的,不再相互独立。两个相邻搜索块的重叠的搜索区域大小为S_height×(S_width-MB_width),其中MB_width是当前宏块的宽度,现有技术载入搜索窗数据所需的片外访存带宽为:BW_normal=MBH×(S_height×S_width)×MBV采用本技术方案进行数据重用优化后的访存带本文档来自技高网
...
一种基于可编程并行处理器的全搜索运动估计方法

【技术保护点】
一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,包括步骤:在可编程并行处理器中建立线程组,线程组包括线程;将N×N的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系;每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存;所述N为自然数;所述全搜索运动估计方法还包括参考帧的读取步骤:每个当前帧宏块在参考帧中都有一个对应的对位宏块,以对位宏块为中心,建立M×M的搜索块,所述M为大于N的自然数;将搜索块分割成多个搜索子块,搜索子块与线程建立一一对应的映射关系;每个线程将对应的搜索子块加载到可编程并行处理器的共享内存;相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区;对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。

【技术特征摘要】
1.一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,包括步骤:在可编程并行处理器中建立线程组,线程组包括线程;将N×N的当前帧宏块分割成多个当前帧子块,每个当前帧子块与线程建立一一对应的映射关系;每个线程将对应的当前帧子块加载到可编程并行处理器的共享内存;所述N为自然数;所述全搜索运动估计方法还包括参考帧的读取步骤:每个当前帧宏块在参考帧中都有一个对应的对位宏块,以对位宏块为中心,建立M×M的搜索块,所述M为大于N的自然数;将搜索块分割成多个搜索子块,搜索子块与线程建立一一对应的映射关系;每个线程将对应的搜索子块加载到可编程并行处理器的共享内存;相邻两个搜索块重叠,形成重叠区,非重叠部分形成增量区;对于每一行的当前帧宏块,每个线程组先从纹理内存读取第一个当前帧对应的搜索块数据;后续当前帧宏块仅从纹理内存读取搜索块的增量区数据;同时将该增量区对应的数据存储到共享内存,作为下一个当前帧宏块搜索的重叠区数据。2.如权利要求1所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,所述全搜索运动估计方法还包括宏块的全搜索运算步骤:所述对位宏块在搜索块中有多种二维位移量,每种位移量形成一个参考宏块,所有参考宏块的集合形成一个搜索范围;所述每个线程至少对一个参考宏块进行搜索运算,得出局部最优结果;其对应的参考宏块的集合构成一个搜索片区,汇总所有线程的局部最优结果,然后计算当前帧宏块在整个搜索块内的最优的搜索结果。3.如权利要求2所述的一种基于可编程并行处理器的全搜索运动估计方法,其特征在于,可编程并行处理器包括第一运算内核和第二运算内核,在...

【专利技术属性】
技术研发人员:隆刚金明史方
申请(专利权)人:同观科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1