AVS量化和反量化C64x_汇编级优化实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AVS 量化过程: 将正变换输出系数矩阵 Y 与尺度缩放矩阵 ScaleM 的元素对应相乘, 结果右移 19 位; 再通过量化参数 QP 查找量化表得到 Q_ TABQP, 与尺度缩放后的结果相乘; 然后右 15 移 位, 保证量化 输 出 结 果 在 16 位 以 内。 在 算 法 实 现 中 将 ScaleM 也设计成一个整数查找表, 这样量化过程只是查表 、 乘 法、 移位、 加法的整数运算, 没有除法操作, 易于实现。具体的量 化公式为: | Z ij | = ( × Q_TAB ( ( | Y | × ScaleM ) 19 + 1 2 )
表2
第N行 指令 MPYLI MPYHI MPYLI MPYHI ADD 功能单元 M1 M1 M1 M1 L1 说明 求 tmp0[0] 求 tmp0[1] 求 tmp0[2] 求 tmp0[3] 求 tmp1[0] 指令 SHR AND NEG NEG NEG NEG PACK2 PACK2 LDDW
Abstract
In AVS standard,quantization and inverse quantization are frequently called,so that their optimization helps speed up the
encoding of the entire encoder. Very Long Instruction Word ( VLIW) and compact instruction is a widely used architecture in DSP. Taking TI ’ s C64x + DSP as example,the article introduces the characters of VLIW and compact instruction architecture,and analyzes AVS quantization and inverse quantization rapid implementation methods based on these characteristics. Comparison is made by TI's emulation tool,CCS 3. 3 , between results of assembly level and C language level optimizations. The quantization of clock cycle required by assembly optimization effect is about 10. 24% that of C language level optimization cycle while the inverse quantization is about 30. 94% . Keywords AVS Very long instruction word Compact instruction Quantization Inverse quantization
2011 年
实现时通过查表提前得到 。 AVS 反量化过程类似于量化过程, 只是不需要缩放, 具体 的反量化公式为: Z ij = ( Y ij × IQ_tab QP + ( 1 ( shift - 1 ) ) ) shift ( 2)
shift 是 Y 矩 阵 右 移 系 数 表。 其中 Z ij 是 相 应 的 反 量 化 值, IQ_tab QP 的值是 16 位的无符号数, 在程序实现时通过查表提前 得到。
[4 ]
128 次乘法 实现 AVS 8 × 8 块量化需要 64 次绝对值运算, 128 次加法运算, 128 次移位运算, 64 次符号判断, 运算, 可见实 现复杂度比较高。 AVS 整数 DCT 变化针对是 8 × 8 预测残差块, 其数据用 16 位表示, 输出为 8 × 8 DCT 变化后数据, 其数据用 16 位表示。取 耗时较多, 且 C64x + 打包数据 数据指令有五个指令周期延迟, 处理指令支持双字操作, 故采用 LDDW 双字取数据指令, 一次 取 4 个需处理数据, 采用 STDW 双字存数据指令, 一次完成 4 个 数据存储; 又因 C64 + 有两个可进行数据处理的数据通路 A 和 B, 两个数据通路 A 和 B 完全可以并行执行, 故一次取 8 个需处 理数据, 完成对一行数据的处理, 分八次循环完成。 AVS 量化中尺度缩放矩阵为 4 × 4 矩阵, 为了循环内部一致 性的需要, 将其改造为 4 × 8 矩阵, 采用 LDDW 双字取对应数 据, 数据通路 A 和 B 所取数据一致, 分八次循环完成。由此, 前 4 列数据由 A 组独立完成, 后 4 列数据由 B 组独立完成, 不存在 交叉数据处理, 更利于并行安排和软件流水 。 取指包 8 条指令 完全并行执行的情况效率是最高的, 汇编优化的目的是尽可能 B 组的八个功能单元尽可能并行执行 。 量化过程循环核 让 A、 实现如表 2 所示, 因数据通路 A 和 B 一致, 故表 2 只列出通路 A, 通路 B 与 A 完全一致, 只是处理后四列数据, 功能单元为 . D2 、 . L2 、 . S2 、 . M2 。
avs量化和反量化c64x汇编级优化实现223第n行第n1n1行addshrl1s1求tmp11求tmp20stdwd1第n1行输出数据addshrmpylil1s1m1求tmp12求tmp21求tmp30addshrmpylil1s1m1求tmp13求tmp22求tmp31lddwd1第n1行取scalem01shrmpylis1m1求tmp23求tmp32lddwd1第n1行取scalem23mpylim1求tmp33absl1第n1行求in01绝对值addd1求tmp40absl1第n1行求in23绝对值addshrandl1s1d1求tmp41求tmp50确定in0正负addshrandl1s1d1求tmp42求tmp51确定in1正负addshrandl1s1d1求tmp43求tmp52确定in2正负shrandnegs1d1l1求tmp53确定in3正负求out0mpylim1第n1行求tmp00negl1求out1mpyhim1第n1行求tmp01negl1求out2mpylim1第n1行求tmp02negpack2l1s1求out3打包数据mpyhim1第n1行求tmp03pack2s1打包数据addl1第n1行求tmp10stdwd1输出数据addshrl1s1第n1行求tmp11第n1行求tmp20avs反量化过程与量化过程类似前4列数据由a组独立完成后4列数据由b组独立完成采用lddw双字取数据指令一次取8个需处理数据完成对一行数据的处理分八次循环完成
f 是改善图像视觉效果的偏移量, 其中 Z ij 是相应的量化值, 帧内 f = 10 / 31 , f = 10 / 62 , ScaleM Y 编码时 帧间编码时 是 矩阵中对应 元素的缩放系数表。Q_TAB QP 的值是 16 位的无符号数, 在程序
收稿日期: 2010 - 12 - 12 。 牛承珍, 讲师, 主研领域: 视频编码与计 算机应用。
0


QP Qstep QP Qstep
表1
AVS 第一个量化周期内的量化步长数值关系 0 1 4 1 . 4142 1 1 . 0905 5 1 . 5422 2 1 . 1892 6 1 . 6818 3 1 . 2968 7 1 . 8340
随着超长指令字和打包数据处理结构的 DSP 应用越来越 如何利用超长指令字( VLIW ) 和打包数据处理结构提高 广泛, 算法运行速度成为研究热点 能
2. 2
打包数据处理
在信号处理和其他计算密集型的代码中, 打包数据处理是 使用内在并行机制的有力方法, 同时保持了代码的密度 。 很多 通常这些操作 信号处理函数对许多数据元素执行相同的操作, 。 是相互独立的 利用打包数据处理, 程序员能够在单个紧凑指 这样缩短了代码, 提高了执 行 效 率。 令流中对数据进行操作, DSP 数据打包处理是一种用单一指令对多个独立的数据执行相 同操作的处理类型。 C64x + 为打包数据处理提供了丰富的处 理指令, 支持双字读取和存储指令, 其可以一次访问 64 位的数 据。每个时钟周期最多可以发出两个双字读取或存 储 指 令 。 C64x + 对片内存储空间访问的峰值带宽是每个周期 128 位。 打 包数据类型是 C64x + 打包数据处理的基石, 每一个打包数据类 支持等级 型将多个数据单元打包到一个 32 位的通用寄存器中, 最高的是 8 位的无符号数和 16 位的有符号数
[3 ] [1 , 2 ]
。AVS 视频压缩标准是国内最
新的 视 频 压 缩 标 准, 特 点 是 低 码 率、 高清晰度和强抗误码性 。上述优点是以其高运算复杂度为代价取得的, 量化与反 量化在 AVS 编码中是比较耗时的一部分, 被调用次数频繁, 快 速实现量化与反量化成有利于编码器的实时实现 。 本文以 TI 公司 TMS320DM6446 开发平台为例, 介绍了此平台 VLIW 和打 包数据处理优化方法, 并利用这些方法对 AVS 量化与反量化进 行汇编级优化。


AVS 标准中, 量化和反量化过程被频繁调用, 对其优化可以提高整个编码器的编码速度 。 超长指令字和打包数据处理
是在 DSP 广泛使用的结构。以 TI 公司 C64x + DSP 为例介绍了超长指令字和打包数据处理结构特性, 并分析了基于这些特性的 AVS 量化和反量化的快速实现方法 。利用 TI 公司的仿真工具 CCS3. 3 提供的性能分析工具对汇编级优化的效果和 C 语言级优化的 效果进行比较, 量化汇编级优化效果所需时钟周期约为 C 语言级优化周期的 10. 24% , 反量化约为 30. 94% 。 关键词 AVS 超长指令字 打包数据处理 量化 反量化
2
2. 1
量化和反量化汇编级优化
C64 + VLIW 特性
VLIW 描述了一种指令集思想, 在这种指令集中, 编译器把
许多简单、 独立的指令组合到一条指令字中 。 VLIW 的特点是 他能从应用程式中提取高度并行的指令数据, 并把这些机器指 令均匀地分配给芯片中的众多执行单元 。支持 VLIW 的 DSP 具 有的特性是一条指令同时执行多个操作, 每一个操作可以看成 、 、 、 、 是实现某个功能( 如整数加 减 乘 移位 读写内存等) 的 RISC 。C64 + 有两个可进行数据处理的数据通路 A 和 B, 每 . S, . M 和. D ) 和一个包含 32 个 32 个通路有 4 个功能单元( . L, 指令 位寄存器的寄存器组。 功能单元执行逻辑、 位移、 乘法、 加法和 数据寻址等操作。两个数据寻址单元( . D1 和. D2 ) 专门负责寄 存器组与存储器之间的数据传递 。每个数据通路的 4 个功能单 以便两侧 元有单一的数据总线连接到 CPU 另一侧的寄存器上, 的寄存器组可以交换数据 。每条 32 位指令占用一个功能单元 。 C64x + CPU 一般情况下能将 8 条指令组合到一条指令字中, 毫 8 条指令完全并行执行的情况效率是最高的, 无疑问, 因此尽可 B 组的八个功能单元并行执行 。 那么如何才能写出有 能让 A、 效的并行代码, 这里有以下要求: 并行的指令不能使用相同的功能单元; 并行的指令同样的操作数不能超过 4 次; 指令的延迟周期, 并行的指令不能在同一个周期上改变 操作数的值; 并行的两条指令之间不能有关联性 。 交叉通路限制: 相同时钟周期内在同一条交叉通路上只能 处理一个数据; 这个数据在同一个周期最多能被两个不同的功 能单元使用。
ij ij
1
AVS 量化和反量化算法分析
QP
) 15 + f ( 1 )
在 AVS 中, 量化步长的参数 QP 共有 64 个。AVS 中量化步 长以 8 为周期倍增, 即 Qstepi + 8 / Qstepi = 2 , 因此只需设定第一 个周期内的量化参数查找值, 其他周期量化参数倍增即可, 这节 省了查找表的存储空间 。 第一个周期的量化步长数值如表 1 所示。
第 28 卷第 7 期 2011 年 7 月
计算机应用与软件 Computer Applications and Sof 量化和反量化 C64x + 汇编级优化实现
牛 承 珍
( 山西工程职业技术学院计算机工程系 山西 太原 030009 )
222
计算机应用与软件
比特来存储。原始的 C 语言实现如下:
for( i = 0 ; i < 64 ; i + + ) { yy = i /8 ; xx = i% 8 ; abs_in[i] = abs( data_in[i] ); tmp0[ i] = abs_in[ i] * ScaleM[yy&3] [ xx&3 ] ; tmp1[ i] = tmp0[i] + ( 1 < < 18 ) ; tmp2[ i] = tmp1[i] > > 19 ; tmp3[ i] = tmp2[i] * quant [Qp] ; tmp4[ i] = tmp3[i] + f; tmp5[ i] = tmp4[i] > > 15 ; if ( data_in[ i] < 0 ) { out[ i] = - tmp5[ i] } else { out[ i] = tmp5[ i] } }
AVS QUANTIZATION AND INVERSE QUANTIZATION C64x + ASSEMBLY LEVEL OPTIMIZATION IMPLEMENTATION
Niu Chengzhen
( Department of Computer Engineering,Shanxi Engineering Vocational College,Taiyuan 030009 , Shanxi, China)
相关文档
最新文档