CN104320668B - Hevc/h.265的dct变换和反变换的simd优化方法 - Google Patents
Hevc/h.265的dct变换和反变换的simd优化方法 Download PDFInfo
- Publication number
- CN104320668B CN104320668B CN201410608208.1A CN201410608208A CN104320668B CN 104320668 B CN104320668 B CN 104320668B CN 201410608208 A CN201410608208 A CN 201410608208A CN 104320668 B CN104320668 B CN 104320668B
- Authority
- CN
- China
- Prior art keywords
- data
- rounding
- hevc
- dct transform
- vector
- 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.)
- Active
Links
Landscapes
- Complex Calculations (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供了一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,首先对输入数据进行预处理,将数据从内存装载进寄存器,视为数据矢量,对矢量数据进行交织和重新排列组合,对于垂直方向的DCT变换,将数据进行右移舍入以适应有限的寄存器位宽,提高计算并行度;然后对预处理后的数据进行蝶形运算,逐级计算对应数据的和差;而后执行点乘运算,计算蝶形运算得到的中间值和相应的变换系数乘积的和,得到输入数据和变换矩阵的乘积;最后,对矩阵乘积结果进行舍入计算,满足输出数据的位宽限定并输出。本发明在Tilera平台上能够有效加速HEVC/H.265视频编码器的DCT变换反变换模块,获得较好的加速优化效果。
Description
技术领域
本发明涉及视频编码技术领域,具体地,涉及一种HEVC/H.265视频编码标准的DCT变换和反变换的SIMD加速优化方法(基于Tilera平台),利用Tilera的SIMD指令集实现HEVC的DCT变换和反变换模块,提高运行速度。
背景技术
随着视频内容的增长和视频产品的迅速发展,视频内容产业链面临更大的压力,目前AVC(Advanced Video Coding)视频压缩技术已经不能满足视频传输的要求,更高效的视频压缩技术应运而生。不仅如此,未来视频市场趋于更高水平的要求已经超出了目前AVC编码能力的范围,比如3D TV和4K TV。对于4K TV,即使使用目前H.264方式编码,也需要24-32M码率,AVC已经成为4K TV业务发展的瓶颈。在此背景下,高效视频编码(HighEfficiency 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 multipledata)单指令多数据技术能在一个指令周期内并行处理多个数据的计算,相比于常规的实现方案能大大减少指令周期,提高运行速度,同时能保证计算结果准确无误。在视频编码中,SIMD技术广泛应用于密集数据计算,如亚像素插值、SAD、DCT/IDCT、计算残差等模块。
在Tilera平台上实现HEVC编码器,我们移植了HEVC参考代码HM的DCT/IDCT实现方法,HEVC的DCT模块相比于H.264复杂度大大提升。H.264的变换系数为1和2,H.264的变换只需要简单的移位和加法计算。HEVC支持4x4至32x32的变换块,此外HEVC的DCT系数数值更大、更复杂,这意味着HEVC的DCT变化需要执行多次乘法,而且中间变量的数值更大,需要更大的位宽。在执行竖直方向的DCT变换时,中间变量的值超出了16bit的存储范围,为17-19bit,如果用32bit保存中间变量,则数据处理的并行水平大打折扣。在Intel和Arm上已有的一些HEVC的DCT和IDCT的SIMD实现方法,竖直方向的DCT变换的速度要低于水平方向的DCT变换。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,所述方法针对Tilera平台上常规的C语言实现的HEVC的DCT和IDCT模块计算复杂度高、编码速度慢的问题,利用Tilera的SIMD指令集实现HEVC的DCT变换和反变换模块,提高运行速度。
为实现以上目的,本发明提供一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,包括如下步骤:
第一步,将一维DCT输入数据从内存装载进寄存器,视为矢量数据;
第二步,对矢量数据重新排列组合,执行蝶形运算,对输入数据逐级加减,计算出中间变量矢量;
第三步,如果该一维DCT变换是水平方向变换,直接跳到第五步;
第四步,对中间变量进行右移舍入运算,以限制其位宽;
第五步,将中间变量矢量和对应的系数矢量进行点乘运算;
第六步,将点乘运算的结果进行重新排列组合,执行右移舍入,输出结果保存至目标内存。
优选地,所述第二步中,对输入数据的并行加减,完成蝶形运算,进行逐级多次的并行加减法,计算出用于点乘计算的中间变量矢量。
优选地,所述第四步中,一维DCT变换对中间变量进行舍入预处理,为了保持并行性,达到较好的加速效果,对于竖直方向的一维DCT变换,将中间变量右移舍入使其位宽在16bit内;具体的右移计算如式(1):
y=(x+(1<<(MIVO-1)))>>MIVO (1)
其中:x为需要进行右移舍入的数据,MIVO为中间变量最大阶数,y是执行完右移舍入后的结果;
同时,输入变量shift值也要根据MIVO做相应的调整,使其能抵消中间变量的右移舍入,shift值是DCT输出时需要将数据右移舍入的位数。
优选地,所述第五步中,采用一条点乘计算指令代替多次的乘法和加法运算,有效加速中间变量和相应系数的乘积求和过程。进一步的,对于计算四个中间变量和相应系数的点乘,直接采用一条指令执行四元矢量点乘便可以完成;对于四个以上中间变量和相应系数的点乘,通过多次的四元矢量点乘完成;对于计算两个中间变量和相应系数的点乘,采用并行的乘法和加法指令完成。
优选地,所述第六步中,采用并行的加法和右移运算以及数据重组,并行完成对点乘计算结果进行右移舍入操作;右移舍入计算如式(2):
y=(x+offset)>>shift
offset=(1<<(shift-1))
error=2shift-1
式中:x是需要执行右移舍入的数据,y是执行完右移舍入的结果;offset是用于四舍五入的补偿值,由右移位数shift推导而来,shift值由DCT变换块的大小N(4,8,16,32)和数据位宽B(8bit,10bit)推导而来,水平方向(horizontal)的shift值和N,B有关,而竖直方向(vertical)的shift值和N有关,根据shift值的不同可以用来判断一维DCT变换的方向:水平还是竖直;error是执行右移舍入操作产生的最大误差。
与现有技术相比,本发明具有如下的有益效果:
本发明提供的方法利用Tilera平台的指令集对Tilera的DCT和IDCT模块进行SIMD优化,实现在微弱的性能损失情况下有效加速Tilera平台上HEVC的DCT和IDCT模块。经验证,相比于普通的C代码实现方法,在使用该发明后,Tilera平台上HEVC的DCT和IDCT模块能平均减少40%-70%的指令周期数,而BD-PSNR(相同质量下的PSNR)仅有不到0.003的损失。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明一较优实施例的一维DCT变换流程图;
图2为本发明一较优实施例的一维IDCT变换流程图;
图3为本发明一较优实施例的蝶形运算计算中间变量示意图;
图4为本发明一较优实施例对中间变量进行预处理的流程图;
图5为本发明一较优实施例蝶形运算中执行矢量点乘运算示意图,其中:(a)为四元素矢量点乘运算示意图,(b)为二元素矢量点乘运算示意图;
图6为本发明一较优实施例对蝶形运算结果执行后续舍入操作示意图;
图7为本发明一较优实施例一维IDCT中对数据进行转置变换操作的示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
如图1、2所示,本实施例提供一种HEVC/H.265的DCT变换和反变换的SIMD优化方法(基于Tilera平台),具体实施步骤如下:
步骤(1)、将一维DCT输入数据从内存装载进寄存器,视为矢量数据;具体的:
从输入数据所在的内存块中批量读取数据,将相邻的多个低位宽输入数据装载进64bit寄存器,装载成一个数据矢量。
步骤(2)、对矢量数据重新排列组合,执行蝶形运算,对输入数据逐级加减,计算出中间变量矢量,如图3所示;具体的:
HEVC的DCT变换系数有很强的奇偶对称性,利用这种对称性,先对数据进行逐级的加法和减法,然后将其和相应的系数做乘积,这样能有效减少乘法运算,这就是蝶形运算的原理。从内存装载进寄存器的数据矢量不能直接进行加减,矢量数据需要进行一定的重新排列组合,使其符合需要的运算规则,然后执行后续的计算流程。在Tilera平台上有相应的指令,支持两个64bit数据的中任意byte的排列组合。
在后续的步骤中,数据需要不断地进行排列组合,以满足相应的运算规则。
随后利用并行加减指令,完成矢量的加减法,这样一次指令能同时完成多个数据的加法和减法,减少指令周期,实现加速。随着DCT变换块的增大,中间变量的计算级数也会增大,在逐级计算中间变量的过程中需要对计算结果进行重新排列和组合,使其满足后续运算规则。
步骤(3)、如果该一维DCT变换时水平方向变换,直接跳到步骤(5),如图4所示;具体的:
水平方向和竖直方向一维DCT变换的输入变量shift是不同的,通过判断输入变量shift值的大小可以判断其是水平方向还是竖直方向的一维DCT变换。
步骤(4)、对中间变量进行右移舍入运算,限制其位宽,如图4所示;具体的:
二维的DCT变换由两个方向的一维DCT变换组成:水平方向DCT变换和竖直方向的DCT变换。HEVC中,先执行水平方向的一维DCT变换,其输入数据为像素值的残差,为9bit位宽的有符号数。在蝶形运算逐级计算中间变量的过程中,能保证中间变量位宽在16bit内。但是在执行竖直方向一维DCT变换时,其输入是水平方向DCT变换的输出,位宽为16bit,这样其蝶形运算的中间变量不能用16bit位宽保存,否则出现严重的溢出错误。如果用32位保存,则并行性下降,不能起到很好的加速效果。为了解决这一问题,对中间变量进行右移舍入,舍弃低位bit,使其能用16bit位宽保存,通过一定的舎位误差代价换取并行性。
具体的右移计算如式(1):
y=(x+(1<<(MIVO-1)))>>MIVO (1)
其中:x为需要进行右移舍入的数据,MIVO为中间变量最大阶数,y是执行完右移舍入后的结果。
此外输入变量shift值也要根据MIVO做相应的调整,使其能抵消中间变量的右移舍入。
步骤(5)、将中间变量矢量和对应的系数矢量进行点乘运算,如图5中(a)和(b)所示;具体的:
Tilera平台提供矢量点乘运算指令,一条指令能执行多个数据的点乘求和运算,起到很好的加速效果。
对于计算四个中间变量和相应系数的点乘,直接采用一条指令执行四元矢量点乘便可以完成;对于四个以上中间变量和相应系数的点乘,可以通过多次的四元矢量点乘完成;对于计算两个中间变量和相应系数的点乘,Tilera没有直接的指令,本发明采用并行的乘法和加法指令完成。
中间变量的点乘计算是DCT变换的核心计算部分,乘法复杂度高,执行点乘计算之前的操作都是为了准备数据,适应点乘指令的计算规则。
步骤(6)、将点乘运算的结果进行重新排列组合,执行右移舍入,输出结果保存至目标内存,如图6所示;具体的:
基于HEVC的规定,一维DCT变换的输出位宽为16bit,执行完点乘计算的结果为32bit,需要执行舍入运算,保存为16bit;HEVC的舍入计算如式(2):
y=(x+offset)>>shift
offset=(1<<(shift-1))
error=2shift-1
式中:x是需要执行右移舍入的数据,y是执行完右移舍入的结果;offset是用于四舍五入的补偿值,由右移位数shift推导而来,shift值由DCT变换块的大小N(4,8,16,32)和数据位宽B(8bit,10bit)推导而来,水平方向(horizontal)的shift值和N,B有关,而竖直方向(vertical)的shift值和N有关,根据shift值的不同可以用来判断一维DCT变换的方向:水平还是竖直;error是执行右移舍入操作产生的最大误差。
将步骤(5)得到的点乘结果保存为32bit数据,一个64bit寄存器保存两个点乘结果,对点乘结果先并行加上偏移值offset,然后并行右移shift,便得到16bit的输出结果。对输出结果进行重新排列和组合,最后保存至输出内存空间,完成输出。
上述为一维DCT变换的详细步骤,一维IDCT是一维DCT的反向运算,其具体流程与DCT变换类似,区别在于对输入数据需要进行转置,具体如图7所示。一维DCT中用于一次点乘计算的数据在内存分布上是连续的,因此可以直接装载进寄存器用于计算;而一维IDCT中用于一次点乘计算的输入数据在内存分布上不连续,装载进寄存器后不能直接用于计算;本发明将装载进寄存器的内存分布相邻的矢量数据逐级两两交织,最终达到转置的效果,即四个四元矢量的第n(1,2,3,4)个元素,组成第n个新的四元矢量,通过转置后的数据矢量就能直接用于后续计算。
本发明在Tilera平台上能够有效加速HEVC/H.265视频编码器的DCT变换反变换模块,获得较好的加速优化效果,降低HEVC编码复杂度。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (6)
1.一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,包括如下步骤:
第一步,将一维DCT输入数据从内存装载进寄存器,视为矢量数据;
第二步,对矢量数据重新排列组合,执行蝶形运算,对输入数据逐级加减,计算出中间变量矢量;
第三步,如果该一维DCT变换是水平方向变换,直接跳到第五步;
第四步,对中间变量进行右移舍入运算,以限制其位宽;
第五步,将中间变量矢量和对应的系数矢量进行点乘运算;对于计算四个中间变量和相应系数的点乘,直接采用一条指令执行四元矢量点乘便可以完成;对于四个以上中间变量和相应系数的点乘,通过多次的四元矢量点乘完成;对于计算两个中间变量和相应系数的点乘,采用并行的乘法和加法指令完成;
第六步,将点乘运算的结果进行重新排列组合,执行右移舍入,输出结果保存至目标内存。
2.根据权利要求1所述的一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,所述第二步中,对输入数据的并行加减,完成蝶形运算,进行逐级多次的并行加减法,计算出用于点乘计算的中间变量矢量。
3.根据权利要求1所述的一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,所述第四步中,一维DCT变换对中间变量进行舍入预处理,对于竖直方向的一维DCT变换,将中间变量右移舍入使其位宽在16bit内。
4.根据权利要求3所述的一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,所述第四步中,具体的右移计算如式(1):
y=(x+(1<<(MIVO-1)))>>MIVO (1)
其中:x为需要进行右移舍入的数据,MIVO为中间变量最大阶数,y是执行完右移舍入后的结果;
同时,输入变量shift值也要根据MIVO做相应的调整,使其能抵消中间变量的右移舍入,shift值是DCT输出时需要将数据右移舍入的位数。
5.根据权利要求1所述的一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,所述第六步中,采用并行的加法和右移运算以及数据重组,并行完成对点乘计算结果进行右移舍入操作。
6.根据权利要求5所述的一种HEVC/H.265的DCT变换和反变换的SIMD优化方法,其特征在于,所述第六步中,右移舍入计算如式(2):
式中:x是需要执行右移舍入的数据,y是执行完右移舍入的结果;offset是用于四舍五入的补偿值,由右移位数shift推导而来,shift值由DCT变换块的大小N(4,8,16,32)和数据位宽B(8bit,10bit)推导而来,水平方向horizontal的shift值和N,B有关,而竖直方向vertical的shift值和N有关,根据shift值的不同来判断一维DCT变换的方向:水平还是竖直;error是执行右移舍入操作产生的最大误差。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410608208.1A CN104320668B (zh) | 2014-10-31 | 2014-10-31 | Hevc/h.265的dct变换和反变换的simd优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410608208.1A CN104320668B (zh) | 2014-10-31 | 2014-10-31 | Hevc/h.265的dct变换和反变换的simd优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104320668A CN104320668A (zh) | 2015-01-28 |
CN104320668B true CN104320668B (zh) | 2017-08-01 |
Family
ID=52375825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410608208.1A Active CN104320668B (zh) | 2014-10-31 | 2014-10-31 | Hevc/h.265的dct变换和反变换的simd优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104320668B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104683817B (zh) * | 2015-02-11 | 2017-12-15 | 广州柯维新数码科技有限公司 | 基于avs的并行变换和反变换方法 |
CN104811738B (zh) * | 2015-04-23 | 2017-11-03 | 中国科学院电子学研究所 | 基于资源共享的低开销多标准8×8一维离散余弦变换电路 |
CN105847840B (zh) * | 2015-11-18 | 2018-12-07 | 西安邮电大学 | 一种用于高效视频编码反变换运算的并行结构构造方法 |
CN110737869B (zh) * | 2019-12-20 | 2020-04-03 | 眸芯科技(上海)有限公司 | Dct/idct乘法器电路优化方法及应用 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873812B1 (en) * | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
CN103092559A (zh) * | 2013-01-30 | 2013-05-08 | 上海交通大学 | 用于hevc标准下dct/idct电路的乘法器结构 |
CN103535041A (zh) * | 2011-05-19 | 2014-01-22 | 索尼公司 | 图像处理装置和方法 |
-
2014
- 2014-10-31 CN CN201410608208.1A patent/CN104320668B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873812B1 (en) * | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
CN103535041A (zh) * | 2011-05-19 | 2014-01-22 | 索尼公司 | 图像处理装置和方法 |
CN103092559A (zh) * | 2013-01-30 | 2013-05-08 | 上海交通大学 | 用于hevc标准下dct/idct电路的乘法器结构 |
Non-Patent Citations (2)
Title |
---|
Acceleration of HEVC Transform and Inverse;Hui Yong;《Intelligent Signal Processing and Communication Systems(ISPACS),2013 International Symposium on》;20131115;第170页第2栏3行到171页1栏倒数第2行,第172页第11行 * |
基于SIMD 架构的二维DCT/IDCT 变换电路模块的设计与实现;彭永克;《中国优秀硕士学位论文全文数据库(信息科技辑)》;20091215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104320668A (zh) | 2015-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101330616B (zh) | 视频解码过程中反离散余弦变换的硬件实现装置及方法 | |
CN104320668B (zh) | Hevc/h.265的dct变换和反变换的simd优化方法 | |
CN106066783A (zh) | 基于幂次权重量化的神经网络前向运算硬件结构 | |
CN101282476B (zh) | 应用于视频和图像处理的变换方法 | |
CN104867165B (zh) | 一种基于变换域下采样技术的图像压缩方法 | |
CN106254883B (zh) | 一种视频解码中的反变换方法和装置 | |
CN104244010A (zh) | 提高数字信号变换性能的方法及数字信号变换方法和装置 | |
CN101188761A (zh) | Avs标准中基于并行处理来优化dct快速算法的方法 | |
CN102547263B (zh) | 可变复杂度的离散余弦逆变换查表快速算法 | |
CN102595112B (zh) | 视频编码中编码和重建图像块的方法 | |
CN103092559B (zh) | 用于hevc标准下dct/idct电路的乘法器结构 | |
CN104378641A (zh) | Hevc/h.265的亚像素插值的simd快速实现方法 | |
CN113743593B (zh) | 神经网络量化方法、***、存储介质及终端 | |
CN104661036A (zh) | 用于视频编码的方法和*** | |
CN104683817B (zh) | 基于avs的并行变换和反变换方法 | |
CN108184127A (zh) | 一种可配置的多尺寸dct变换硬件复用架构 | |
Zhang et al. | SIMD acceleration for HEVC encoding on DSP | |
CN101268623B (zh) | 用于创建可变形状区块的方法和装置 | |
CN101964912A (zh) | 一种在mpeg2中游程编码快速计算游程长度的方法 | |
CN102447898B (zh) | 用fpga实现klt变换的方法 | |
CN206962992U (zh) | 用于数字视频编解码的3乘3整数dct变换量化器 | |
CN104683800A (zh) | 基于avs的并行量化和反量化方法 | |
CN101583038A (zh) | Satd快速实现的硬件架构 | |
CN103327332A (zh) | 一种hevc标准中8×8idct变换的实现方法 | |
CN101977318A (zh) | Dct量化的并行装置及其方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |