首页> 中国专利> HEVC/H.265的亚像素插值的SIMD快速实现方法

HEVC/H.265的亚像素插值的SIMD快速实现方法

摘要

本发明提供了一种HEVC/H.265的亚像素插值的SIMD快速实现方法,首先在运动搜索过程中,采用简化的SIMD实现的四阶亚像素插值模块,获取亚像素运动矢量,利用微弱的性能损失换取明显的速度提升;然后在运动补偿计算当前像素块和参考像素块的残差时,采用原始八阶亚像素插值得到参考像素块,保证编码端和解码端一致,避免解码像素出现漂移。

著录项

  • 公开/公告号CN104378641A

    专利类型发明专利

  • 公开/公告日2015-02-25

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN201410647903.9

  • 发明设计人 张小云;黎凌宇;高志勇;陈立;

    申请日2014-11-14

  • 分类号H04N19/51;H04N19/56;

  • 代理机构上海汉声知识产权代理有限公司;

  • 代理人徐红银

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-17 04:31:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-01

    授权

    授权

  • 2015-03-25

    实质审查的生效 IPC(主分类):H04N19/51 申请日:20141114

    实质审查的生效

  • 2015-02-25

    公开

    公开

说明书

技术领域

本发明涉及视频编码技术领域,具体地,涉及一种HEVC/H.265的亚像素插值的 SIMD(single instruction multiple data,单指令多数据技术)快速实现方法。

背景技术

随着视频内容的增长和视频产品的迅速发展,视频内容产业链面临更大的压力,目 前AVC(Advanced Video Coding)视频压缩技术已经不能满足视频传输的要求,更高效的 视频压缩技术应运而生。不仅如此,未来视频市场趋于更高水平的要求已经超出了目前 AVC编码能力的范围,比如3D TV和4K TV。对于4K TV,即使使用目前H.264方式 编码,也需要24-32M码率,AVC已经成为4K TV业务发展的瓶颈。在此背景下,高 效视频编码(High Efficiency Video Coding,HEVC)这种新的视频编码标准应运而生。 HEVC的发展最早追溯到2004年,经过近十年的发展,HEVC于2012年2月形成完整 的委员会标准草案,并于2013年1月正式成为国际标准。HEVC的目标是编码效率比 AVC提高50%,复杂度比AVC复杂2到10倍。HEVC未来的业务主要面向高清、超高 清、3D TV,数据量比以往视频大得多,另外HEVC要求大大提高视频压缩比,而高压 缩算法是以增加算法复杂度为代价的,考虑到这两个方面的因素,HEVC编码器对系统 的计算性能提出了更高的要求。

为降低HEVC编码复杂度,通常有算法优化、指令集优化、并行优化等方法,其中 指令集优化是利用计算平台的指令集实现计算模块,SIMD(single instruction multiple data) 单指令多数据技术能在一个指令周期内并行处理多个数据的计算,相比于常规的实现方 案能大大减少指令周期,提高运行速度,同时能保证计算结果准确无误。在视频编码中, SIMD技术广泛应用于密集数据计算,如亚像素插值、SAD、DCT/IDCT、计算残差等 模块。

在Tilera平台上实现HEVC编码器,移植了HEVC参考代码HM的亚像素插值模 块。亚像素插值模块在运动搜索中被多次调用,为了得到得到更精准的运动矢量,像素 残差更小,从而压缩性能越高。HEVC的亮度亚像素插值采用8阶插值,计算复杂度很 高,在开发的基于Tilera平台的HEVC编码器中,亚像素插值模块占了30%-50%的编 码时间,亟需一种亚像素插值模块的加速实现方法。

发明内容

针对现有技术中的缺陷,本发明的目的是提供一种HEVC/H.265的亚像素插值的 SIMD快速实现方法,所述方法针对Tilera平台上常规的C语言实现的HEVC的亚像素 插值模块计算复杂度高、编码速度慢的问题,利用Tilera的SIMD指令集实现HEVC的 亚像素插值模块,在同样的计算结果下,减少程序运行的指令周期数,提高运行速度。 提高运行速度。

为实现以上目的,本发明提供一种HEVC/H.265的亚像素插值的SIMD快速实现 方法,包括如下步骤:

步骤1:将亚像素插值所需要的整像素数据从内存装载进寄存器,视为矢量数据;

步骤2:如果是水平方向亚像素插值直接跳到步骤3;

步骤3:如果是竖直方向亚像素插值,将一组矢量数据两两逐级交织,实现数据转 置;

步骤4:根据当前亚像素插值点所需要的整像素,对矢量数据重新排列组合;

步骤5:将矢量数据和对应的系数执行点乘计算,完成相邻整像素和对应系数乘积 求和,其中亚像素插值阶数为四阶或八阶;

步骤6:将点乘结果重新排列组合,并行执行右移舍入运算,转载进输出内存,跳 至步骤2,直至完成当前像素块中所有的亚像素插值;

步骤7:对于非水平竖直方向的亚像素插值,先执行水平方向的亚像素插值,对插 值中间结果执行竖直方向的亚像素插值;以上步骤1-7得到四阶亚像素插值函数或八阶 亚像素插值函数;

步骤8:在运动搜索中调用四阶亚像素插值函数,在运动补偿过程中调用八阶亚像 素插值函数。

优选地,所述步骤5中,点乘计算公式如下所示:

dotp=Σi=1nAi×Ci---(1)

式中:dotp是点乘计算结果;n是亚像素插值阶数:4或8;A是相应的整像素值; C是相应的亚像素插值系数。

优选地,所述步骤5中,采用一条点乘指令代替多次的乘法和加法运算,有效加 速整像素和对应系数相乘求和的计算。

优选地,所述步骤5中,采用一条点乘计算指令代替多次的乘法和加法运算,有 效加速中间变量和相应系数的乘积求和过程。

优选地,所述步骤6中,采用并行的加法和右移运算以及数据重组,并行完成对 点乘计算结果进行右移舍入操作。

优选地,所述步骤6中,右移计算公式如下:

result=(dotp+offset)>>shift    (2)

式中:result时右移输出结果;shift是右移值;offset是补偿值,在水平或竖直方向 的插值中shift=6,offset=1<<(shift-1),对于非水平竖直的插值,offset另外推导。

优选地,所述步骤8中,对于亚像素插值函数的调用,在运动搜索中调用简化的 四阶亚像素插值函数,在运动补偿过程中调用八阶亚像素插值函数。

与现有技术相比,本发明具有如下的有益效果:

本发明提供的方法利用Tilera平台的指令集对Tilera的亚像素插值模块进行SIMD 优化,有效加速Tilera平台上HEVC的亚像素插值模块。经验证,相比于常规的C代码 实现方法,在使用该发明后,亚像素插值计算结果不变,没有性能损失,同时亚像素插 值函数能平均减少40%-80%的指令周期数,基于Tilera平台研发的HEVC编码器平均 减少了30%-40%的编码时间。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特 征、目的和优点将会变得更明显:

图1为HEVC亮度亚像素插值示意图;

图2是本发明所提出的水平或竖直方向亚像素插值的SIMD实现流程;

图3是从非8byte对齐内存地址装载数据矢量示意图;

图4是本发明提出的将8个8元矢量进行转置的示意图;

图5是本发明提出的对数据矢量进行重新排列组合示意图;

图6是本发明所用到的单字节点乘指令示意图;

图7是本发明所用到的单字节双点乘指令示意图;

图8是本发明提出的并行执行右移舍入操作示意图;

图9是本发明提出的亚像素插值函数的调用示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人 员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技 术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于 本发明的保护范围。

如图1所示,为HEVC亮度亚像素插值示意图;

如图2所示,为本发明一实施例中HEVC/H.265的亚像素插值的SIMD快速实现 方法,包括如下步骤:

步骤1:将亚像素插值所需要的整像素数据从内存装载进寄存器,视为矢量数据;

本实施例中,可以采用以下方式:

将当前亚像素插值所依赖的整像素数据从内存至寄存器,这些整像素数据在内存中 并不一定是8byte对齐的,所以不能使用常规的针对8byte对齐的装载指令,否则底层 通过异常处理程序得到正确的计算结果,反而使程序变慢。为了从一个非对齐的内存地 址装载一个64bit的寄存器数据,本发明先用非对齐装载指令从当前非对齐的内存地址 临近的两个对齐的内存地址中装载两个64bit的寄存器数据,然后利用一条对齐指令根 据当前非对齐地址重新组合这两个寄存器数据,得到从非对齐内存地址中装载的寄存器 数据。设亚像素插值块的大小为m行n列,这样得到m行n/8列数据矢量,每个数据 矢量由8个水平方向相邻的整像素组成。如图3所示。

步骤2:如果是水平方向亚像素插值直接跳到步骤3;

步骤3:如果是竖直方向亚像素插值,将一组矢量数据两两逐级交织,实现数据转 置;如图4所示,具体的:

整像素数据内存在水平方向是连续分布的,因此竖直方向的整像素间存在内存地址 间隔,不能将一组有内存间隔的数据直接装载成数据矢量。为了将竖直方向的整像素数 据装载成数据矢量,本发明利用步骤1得到的数据矢量,将同一列的每八个数据矢量视 为一组,对每组数据矢量进行转置,具体则是将数据矢量逐级两两交织,最后8个八元 矢量的第n(1,2…8)个元素组成第n个新的八元矢量,这样第n个新的数据矢量则装 载了第n列的8行数据。

步骤4:根据当前亚像素插值点所需要的整像素,对矢量数据重新排列组合;如图 5所示,具体地:

以水平方向第一行的第一个和第二个亚像素插值为例,从步骤1中1/4亚像所依赖 的-3至4的整像素数据装载在一个数据矢量中,而1+1/4亚像素的依赖的-2至5的整像 素数据分布在相邻的两个数据矢量中。为了将1+1/4亚像素所依赖的整像素装载成一个 数据矢量,本发明需要采用步骤1中的对齐指令,利用-2位置整像素的内存地址,从两 个相邻的整像素数据矢量中重组得到装载有-2至5的整像素数据的矢量。

步骤5:将矢量数据和对应的系数执行点乘计算,完成相邻整像素和对应系数乘积 求和;具体的:

将亚像素插值点临近的整像素值和对应的插值滤波系数相乘,然后将乘积相加求 和。HEVC的亮度亚像素插值在两个整像素点之间要插三个亚像素点,分别是1/4、1/2 和3/4位置,三个位置对应三组的插值滤波系数,每个系数为1byte的有符号数。

点乘计算公式如下所示:

dotp=Σi=1nAi×Ci---(1)

式中:dotp是点乘计算结果;n是亚像素插值阶数:4或8;A是相应的整像素值; C是相应的亚像素插值系数。

对于八阶亚像素插值,将一组8个系数装载成一个64bit的常系数矢量,用Tilera 的单字节点乘指令将步骤5得到的数据矢量和对应的常系数矢量点乘,便得到一个点乘 结果,如图6所示。

对于四阶亚像素插值,根据八阶插值系数的特性以及参考现有文献(微软的视频编 码标准VC1(wmv9)标准文档中对亚像素插值的描述部分),得到对应的三组四阶亚像素 系数,一组四阶亚像素插值系数有四个元素,这三组系数分别为 {-4,36,36,-4},{-4,53,18,-3},{-3,18,53,-4},本发明将一组系数装载进常系数矢量的高32bit 和低32bit。用Tilera的单字节双点乘指令计算步骤5得到的数据矢量和常系数矢量,便 可以得到两个点乘结果,如图7所示。相比于八阶插值,四阶插值一条指令可以一次计 算两个点乘结果,同时节省相关的数据准备和后续数据处理工作,计算速度更快。

步骤6:将点乘结果重新排列组合,并行执行右移舍入运算,转载进输出内存,跳 至步骤2,直至完成当前像素块中所有的亚像素插值;如图8所示,具体地:

整像素值为1byte的无符号数,亚像素插值的结果也应该是1byte的无符号数,步 骤5中得到的点乘结果需要执行右移舍入以满足亚像素的数据位宽要求。

具体右移计算公式如下:

result=(dotp+offset)>>shift    (2)

式中:result时右移输出结果;shift是右移值;offset是补偿值,在水平或竖直方向 的插值中shift=6,offset=1<<(shift-1),对于非水平竖直的插值,offset的值和 offset=1<<(shift-1)不一样,需另外推导。

步骤7:对于非水平竖直方向的亚像素插值,先执行水平方向的亚像素插值,对插 值中间结果执行竖直方向的亚像素插值;具体地:

先执行水平方向插值步骤1至6,不同在于步骤6中,右移舍入变为并行减法,计 算结果保存为16bit无符号数,不输出到目标内存地址;

然后执行竖直方向插值步骤1至6,不同在于处理的数据元是16bit的无符号数, 步骤3,4,5,6中的处理指令需要做相应的调整,需要用到双字节相关的SIMD指令 而非单字节SIMD指令,并行度会稍有下降,同时在步骤6中右移舍入的相关系数也有 所不同。

步骤8:在运动搜索中调用简化的四阶亚像素插值函数,在运动补偿过程中调用八 阶亚像素插值函数。

根据上述步骤1-7描述了一个完整的亚像素插值过程,四阶插值和八阶插值唯一的 不同在于步骤5,如果步骤5里面采用的是单字节点乘指令,则1-7描述的是一个八阶 亚像素插值函数,如果步骤5采用的是单字节双点乘指令,则1-7描述的是一个四阶亚 像素插值函数。

如图9所示,在运动搜索过程中,采用简化的SIMD实现的四阶亚像素插值函数(如 果步骤5采用的是单字节双点乘指令,则1-7描述的是一个四阶插值函数),获取亚像 素运动矢量,利用微弱的性能损失换取明显的速度提升;然后在运动补偿计算当前像素 块和参考像素块的残差时,采用原始八阶亚像素插值得到参考像素块,保证编码端和解 码端一致,避免解码像素出现漂移。

本发明提供的方法利用Tilera平台的指令集对Tilera的亚像素插值及其简化算法模 块进行SIMD优化,有效加速Tilera平台上HEVC的亚像素插值模块。经验证,相比于 常规的C代码实现方法,在使用该发明后,亚像素插值计算结果不变,没有性能损失, 同时亚像素插值函数能平均减少40%-80%的指令周期数,基于Tilera平台研发的HEVC 编码器平均减少了30%-40%的编码时间。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上 述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改, 这并不影响本发明的实质内容。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号