本文将对以TMS320C64x/DM64xDSP为基础的通用视频编码器优化技术进行介绍。基于DM64x的视频编码优化结合了多种技术,其中包括算法/系统优化、存储器缓冲优化、EDMA及高速缓存利用率优化等。
TMS320C64x/DM64x器件建立在德州仪器(TI)开发的第二代高性能VLIW架构(VelociTI.2)基础之上。该器件具有VLIW架构、2级存储器/高速缓存层次结构以及EDMA引擎等关键特性,从而使其成为计算强度较大的视频/影像应用(如视频编码与分析)的最佳选择之一。利用DM64x进行应用开发时,需要全面了解其特性与开销以实现最佳性能。下面以DM642为例在此列出其所有DSP关键特性:
1. 增强功能单元
DM64x的8个功能单元中的VelociTI.2扩展包括加速视频与影像应用性能的新指令。
2. L1/L2分级存储器结构
16KB直接映射的L1P程序高速缓存,带有32字节的高速缓存管线(8周期L1P高速缓存缺失损失)。
16KB双路关联L1D数据高速缓存,带有64字节的高速缓存管线(6循环L1D高速缓存缺失损失)。
256KBL2统一映射RAM/高速缓存(灵活的RAM/缓存分配)
L2四路关联高速缓存,带有128字节的高速缓存管线。
3. 位优先原则:低位优先(Little Endian),高位优先(Big Endian)。
4.64位外部存储器接口(EMIF):至异步与异步存储器的无胶合逻辑接口。
5.1024MB总的可寻址外部存储器空间。
6.增强型直接存储器存取(EDMA)控制器(64个独立通道)。
片上外设集包括:三个可配置的视频端口,一个10/100Mbps以太网MAC(EMAC),一个管理数据输入/输出(MDIO)模块,一个VCXO内插控制端口(VIC)。视频端口外设提供与通用视频解码器和编码器相连的无缝接口,以支持多种视频分辨率及标准,如ITU-BT.656、BT.1120、SMPTE125M/260M/274M/296M等。
上面的功能特性对包括视频编码在内的所有算法的执行都相当重要。二级存储器/高速缓存分级结构与EDMA引擎基本决定了视频编码器实现的架构。在算法实现过程中,我们需要弄清一些有关存储器/高速缓存层次结构以及EDMA引擎的基本概念。如果代码大于L1P,就可能发生L1P高速缓存缺失,CPU停止运行至到读取到所需代码。
类似地,如果数据与L1D不符,就会出现L1D高速缓存缺失并且CPU停止运行。所有的L1P与L1D缺失问题均由L2高速缓存/SRAM来解决。如果代码与数据的大小均大于L2高速缓存的容量,那么就可能出现L2高速缓存缺失。与L1P/L1D高速缓存缺失损失相比,L2缺失损失通常更严重,因为L2高速缓存需要与速度较低的片外存储器相互传递数据/代码。
确保视频编码器最佳性能的两大重要因素是进行有利于高速缓存的程序分区(program partitioning)以及数据传输处理(如减少L1/L2缺失)。尽管L2 SRAM可用于解决L1D/L1P缺失问题,我们通常还是更倾向于采用EDMA来传输L2 SRAM与片外存储器之间的代码/数据,因为EDMA的传输效率通常高于L2高速缓存。

图1:视频编码结构图
视频编码器系统/算法优化
图1给出了通用视频编码算法结构图,MPEG2、H.263及MPEG4等许多视频编码标准都可从该算法结构图衍生而来。在图1中,DCT与量化(Q)去除了视频的空间冗余;运动估计(ME)降低了视频的时间冗余;VLC进行熵编(entropycoding),以将数据有效地进行分组。
通常,视频编码器的实现是以宏模块(MB)为基础。这就是说,只有在当前MB完成所有处理步骤后,视频编码器才读取下一个MB。这种靠直觉进行操作的方法存在两大缺点:
1.视频编码器的整体代码尺寸通常大于L1P。在每个MB读取阶段,代码都需要在L1P和L2P之间进行交换,这会造成严重的高速缓存缺失问题。
2.用EDMA从外部视频帧存储器向内部存储器传输小块数据(如一个MB)的效率不高。
为了避免造成大量高速缓存缺失损失和CPU停止响应问题,我们可将算法分为三个小循环/模块,每部分都能在L1P中容下。每个循环中每次同时操作M个宏模块(MB串),而不是只操作一个宏模块。M是宏模块串的大小,只受可用L1D大小的限制。M越大,就能获得的越高的EDMA数据吞吐量性能。
三个小循环为:
1. 宏模块编码环路
2. 运动估计环路
3. 宏模块重建环路
正如上面强调指出的那样,每次都读取M个宏模块,一起经过三个环路中的一个来处理。举例来说,在宏模块编码循环中,如果将M个宏模块读入内部存储器,那么将对其进行DCT转换、量化以及熵编码。只有当宏模块编码环路结束时,这一组宏模块才离开L1D。
相应的程序包括DCT、量化以及VLC内核,其会在所有M个宏模块在L1P中完全处理之后才脱离该环路。EDMA引擎驱动的乒乓存储器缓冲方案有助于减少执行一组宏模块时环路初始的设置时间,同时还可确保最小化的CPU停止周期,这是由于传输与处理并行进行的原因。
视频编码器的存储器缓冲方案
为了获得最佳性能,许多与关键内核相关的查找表格、状态变量以及数据缓冲都必须位于内部存储器之中。除了上述基本数据所占用的存储器之外,部分TMS320DM64x仍有足够的内部存储器可容纳整个视频帧,以供编码器处理。但有的器件则不行,因为内部SRAM在不同的C64x/DM64x器件间有所差异。
有些应用只需运行视频编码器,而其它应用则要运行其他算法,其中包括视频编码等。为了针对大多数视频应用情况下的所有DM64x器件提供通用的视频缓冲方案,全部视频帧应位于外部存储器,而非内部存储器中。EDMA每次将M个MB带从外部视频缓冲传输到内部缓冲。正如我们在上一节中谈到的那样,M只受L1D大小的限制。
图片群(GOP)是视频编码中的重要概念,因为其确定了每个视频帧的编码方案。通常,在GOP中定义所有视频编码标准的I帧和P帧。B帧只包含在高级视频编码配置文件(profile)中,如MPEG4高级简单配置文件以及MPEG2主配置文件等。对于I帧而言,我们可采用类似JPEG的编码方案来去除空间冗余。
对于P帧来说,我们采用前向运动估计(forward motion estimation),并以此前的I/P作为参考。对于B帧而言,前向ME(forward ME)不仅需要此前的I/P帧,而且还需要随后的I/P帧用于后向ME(backward ME)。视频编码器必须在两个P帧之间对所有B帧进行缓冲,这是由于B帧采用双向ME方案的缘故。图2给出了视频帧的数据依赖性。
我们已经熟知,对于B帧GOP而言,视频捕获/显示的顺序不同于视频编码顺序。例如,GOP= IBBP BBP BBP BBP BB的顺序适用于捕获/显示,而GOP编码顺序则为GOP= IPBB PBB PBB PBB……。视频编码算法分区的关键在于使CPU负载尽可能暂时不变。

