1 引 言
当前,高清视频编码应用对处理器的运算能力的要求越来越高。可重构处理器包含多个处理单元,可提供大数据带宽,完成大规模数据并行处理,兼顾应用的灵活性,可高效地执行密集型计算,逐渐成为高清视频处理领域的研究热点。
ReMAP是一款针对高清媒体应用的可重构处理器。其原型验证芯片基于SMIC 0.18μmLogic工艺设计,包含4×4个ALU单元,工作主频为150MHz,性能可达2.4GOPS.本文采用9×8个计算单元阵列规模的动态可重构处理器ReMAP,完成H.264高清视频编码算法的映射,并在可重构处理器的仿真平台ReSim 上进行性能评估。
第2节介绍可重构处理器ReMAP系统及动态流水重构技术,第3节介绍H.264高清编码算法在ReMAP中的映射实现方法,并进行性能评估,对全文进行总结。
2 可重构处理器ReMAP系统概述
2.1 可重构处理器ReMAP系统结构
可重构处理器系统包含一个RISC CPU,一个可重构阵列处理器和一个存储系统,如图1所示。
RISC负责处理算法中控制段程序,管理存储系统的数据输入和输出,通过配置信息流控制可重构处理器的初始化、程序和数据加载以及任务的启停操作。
可重构处理器在RISC的控制下协同操作,采用多个处理单元完成算法中计算量大、并行度高的程序段,RISC负责对可重构处理器进行配置和搬运数据。存储系统包含一个帧缓存器和DMA.DMA用来与系统外存储进行数据交互,帧缓存器用来存储数据(图像帧);地址产生器AGU 组织帧缓存器中的数据以一定的顺序送入可重构处理器中,再将处理完毕的数据以一定顺序暂存至帧缓存器内。
图1 ReMAP系统结构
Fig.1 The system architecture of ReMAP
整个系统工作流程如下:可重构处理器完成初始化,RISC配置存储系统,将算法执行所需要的数据和程序至可重构处理器中,然后发出控制命令开始数据运算。计算完成后,可重构处理器向RISC发送反馈信号,RISC配置AGU 将数据从帧缓存器中取出,并配置DMA 发送至片外总线上。
RISC和可重构处理器可并行执行程序。每算法运算需完成配置流程,当多个子算法进行映射时,根据数据及程序更新的需要可重复循环以上配置过程。
2.2 动态流水重构
大多数情况下,可重构处理器中运算单元数目有限,运行多个子算法或大型任务处理时,每个运算单元需分时配置不同的功能以配合算法实现。因此,本文可重构处理器采用动态流水重构技术实现不同算法在处理器中的映射。假设可重构处理器拥有4个运算单元(PE0~PE3),需处理6个子任务。
rei表示运算单元为任务i进行功能重构,exi表示正在执行任务i的功能运算。如图2所示,将6个子任务周期交替加载到硬件中:每一个运行周期中,可重构处理器只处理3个子任务;每一个运算单元仅采用3周期执行运算,1周期进行功能重构。这种方法虽然运算效率有所降低,但通过分时复用各运算单元,降低了算法对运算单元阵列规模的需求,提高了硬件资源的利用率。
图2 动态流水重构
Fig.2 Dynamic pipelined reconfiguration
3 高清视频编码在可重构处理器中的映射实现
H.264是当前主流的高清视频编码算法,分为视频编码层(VCL)和网络提取层(NAL)。本文主要针对需要大规模计算量的视频编码层中图像处理任务的映射实现。整个编码算法划分成4级流水处理,分别为整数运动估计、小数运动估计、环内算法、熵编码等。通过动态可重构,在不同时刻改变可重构处理器执行功能,采用处理单元时分复用的工作模式,实现算法在硬件中的虚拟流水线,达到多个子算法复用映射的效果。
本文中,高清编码算法在可重构处理器仿真平台ReSim[6]上进行映射。ReSim包含图形化的调试界面,可显示运算单元间的互连情况、每个周期运算单元执行的配置信息以及各传输路径的数据传递情况,支持各运算单元程序运行的单步调试。
本文中映射的可重构处理器对象包含8×9的运算单元阵列,其中,8×8的运算单元采用通用计算单元结构,可完成加减法、移位等简单操作,也可实现截取、改变、取等复合操作;第9行运算单元为乘法累加器,可实现大数乘法,乘法运算需要2周期,MAC运算需要3周期完成。
3.1 整数运动估计
本文中整数运动估计采用块匹配算法,分为计算宏块地址、搜索匹配宏块以及运动向量预测几个步骤。其中,计算宏块地址、运动向量预测等步骤不存在计算并行性,且计算量小,这些算法在RISC中执行。而搜索算法中的匹配计算需要很大的计算量,本文采用SAD准则,其算法如下:
SAD(x,y)=Σ i=0Σ j=0|cur(i,j)-ref(x+i,y+j)|
可重构处理器进行算法映射时,先将当前宏块的像素保存在可重构处理器中运算单元的本地寄存器中。帧缓存器的存储带宽能支持16个像素同时输入,加载完一个宏块的像素需要16个周期。之后,每周期从帧缓存器中取16个参考宏块像素,与运算单元准备好的对应宏块数据相减并取,共用到两行运算单元。完成16个数据同时运算共需4行运算单元并行处理,第5行运算单元完成累加操作。如图3所示,每周期可以完成16个像素的计算,采用小菱形搜索算法连续搜索5个点时需要95个周期,连续搜索3个点需要61个周期,连续搜索2个点需要44个周期。
图3 SAD算法在ReMAP中的映射
Fig.3 SAD algorithm mapping on ReMAP
考虑到数据加载时间,4×4的SAD算法在可重构处理器上映射性能为21周期,之后每周期可处理16个像素点,完成16×16的SAD共需要39 期。较其他可重构处理器MorphoSys,PACT,性能分别有128.6%和52%的提升,如表1所示。
与TMS320C64x完成16×16的宏块处理需884个周期相比,本文可重构处理器完成SAD算法的处理性能明显提升。
表1 SAD算法映射性能对比
Table 1 Performance analysis for SAD algorithm
处理器周期数加速比本文4×4子块需21周期,16×16宏块需39周期1xMorphoSys 4×4子块需48周期2.29xPACT 4×4子块需32周期1.52xTMS320C64x 16×16宏块需884周期22.7×3.2 小数运动估计
小数运动估计以整数运动搜索的位置为中心插值1/2像素,通过比较1/2像素宏块与当前宏块的SAD确定匹配位置。接着,以1/2搜索的位置为中心,类似地,完成1/4像素的插值和搜索以及1/8的插值和搜索。1/2和1/4运动估计算法的实现在文献[5]中已有介绍,可实现较大的性能加速。1/8色度插值是在1/4像素的运动搜索的基础上,用得到的运动矢量分别对相应位置的两个色度块Cr和Cb进行1/8的插值,得到每个色度的1/88×8大小的像素块,计算公式如下:
a=dx×dy×A+dx×(8-dy)×B+(8-dx)×dy×C+(8-dx)×(8-dy)×D (1)
其中,dx,dy 是运动矢量经过1/4的运动搜索之后得到的运动矢量的三位。A,B,C,D 是参考的色度分量,a是插值得到的色度值。
因为色度插值的乘法系数不固定,无法采用移位加的复合操作实现乘法,因此,(1)式中乘法运算利用可重构处理器第9行的乘法累加单元,可并行处理的色度插值数目为8.首先将色度参考块像素存放到第8行运算单元的本地寄存器中;使用RISC计算得到由运动矢量确定的四个常数:dx×dy,dx× (8-dy),(8-dx)×dy,(8-dx)×(8-dy),存放在第9行运算单元的本地寄存器中。参考块像素由第8行计算单元送至第9行乘法累加单元中,与已存入的常数执行乘累加运算;重复4次后,每个ALU完成一个色度的插值。
1/8插值的并行计算受限于ReMAP中的乘法单元数目,完成一个1/8插值宏块处理需要115个周期。
相关资料:
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。