一种应用于超高清视频编解码芯片中的定制CACHE

2016-03-16 08:14江显舟
移动信息 2016年6期
关键词:编解码命中率内存

江显舟



一种应用于超高清视频编解码芯片中的定制CACHE

江显舟

福州瑞芯微电子股份有限公司,上海 201203

在超高清实时编解码芯片中,数据带宽和访问延时一直是制约芯片性能和成本的关键。本设计在参考了传统CACHE特性的基础上,充分利用了视频编解码器对视频数据的处理顺序、图像数据相关性、AXI总线及DRAM的访问特性,将平均访问命中率提高到75%以上、并明显降低了未命中数据的读取延时。

CACHE;DRAM;AXI

2013年HEVC(High Efficiency Video Coding)正式成为国际标准。相较于H.264/AVC,HEVC在相同的视频质量前提下,可以提高约一倍的压缩效率,在同样的信道条件下可以传递更多的视频信息。但与此同时,HEVC也大大提升了算法复杂度,再加上不断增加的分辨率和帧率需求,都对视频编解码器的实时编码速度提出了较大的挑战。特别是对于的数据带宽消耗,即使仅考虑分辨率提升产生的影响,4K分辨率的视频编解码所需的数据带宽也已经是1080P的4倍。如何降低视频编解码系统的数据带宽,是所有高性能视频处理芯片都需要解决的难题。[1]

1 通用指令CACHE简介

通用指令CACHE的设计初衷,是为了解决CPU内核不断增长的读指令数据访问需求与系统内存低下的数据效率之间的矛盾。[2]CACHE的核心思想是开辟一个速度快容量小的存储空间(通常使用高速片上RAM),存储一些经常会被使用到的数据,使得CPU对系统内存的数据访问降低,以达到降低系统带宽并提升数据访问效率的作用。

CACHE的最小操作单位是行,一般称之为“cache line”。每个cache line使用tag和index与系统内存中的相同大小的数据对应。在访问系统内存时,CACHE会根据访问地址查找与其对应的cache line,若cache line中存在因之前访问所保留下来的该地址的数据,则直接将cache line中的数据返回,称之为访问命中;否则从系统内存中读取该数据,同时返回数据给请求者以及判断是否将其存储在cache line中供后续访问使用。[3]

2 定制化的CACHE设计

研究中所描述的定制化CACHE是在通用指令CACHE的基础上,综合考虑了编解码器的数据访问,通用总线(AXI)及DRAM的特性,而设计出的一款适用于编解码器的高命中低访问延时数据缓冲模块。设计细节如下:

CACHE最小操作单位(cache line)的选定:cache line越小,CACHE中的数据利用率越高,但CACHE与系统内存中的数据的映射逻辑较复杂,并且数据访问过于零散,造成系统内存的数据访问延时增大、数据访问带宽降低;cache line越大,cache中的数据利用率越低(因为即使仅需要一笔数据,整个cache line都需要被存储或读取),但映射逻辑较简单,连续访问的数据较多,数据访问效率较高。通过对当前主流的视频压缩协议的运动估计结果分析得出,以4行16列的亮度分量及其对应的色度分量(若色度格式为yuv420,则色度分量为2行16列)作为一个cache line最为合理。首先,主流视频压缩协议都以16x16或其整数倍大小的图像块作为编码单元,在大多数的情况下,当前编码的图像块与其左侧已经编码完成的图像块具有相同的运动方向(同属一个平动物体),即当前编码块的匹配块也位于左侧图像块的匹配块的右侧,并且水平距离为编码图像块的宽度。站在数据访问的角度来看,当前需要访问的数据非常可能位于上一次访问数据的右侧,且距离为16的整数倍。故以16作为cache line的宽度刚好可以匹配访问位置的移动。而将亮度和色度合并在一个cache line中可以一次将匹配块的数据读出,并且在系统内存中连续编址,增加DRAM访问效率。

cache line映射方案:本设计采用了组相连的cache line映射方案,但tag和index的排布根据编解码器的访问特性进行了调整。首先,采用组相连方案映射的CACHE,每个index只能映射到若干固定的位置。以4路组相连的CACHE为例,若需要访问的数据恰好需要5个相同index映射位置的数据,则无法全部存储,至少有一个数据会被更新掉。在视频编码中,运动估计都会指定一个矩形的范围,若tag区域的大小刚好与其匹配,可以最大限度的利用CACHE中的存储单元。特别的,由于编解码对图像块的处理顺序是光栅扫描顺序,上行图像块的参考图像块相邻的数据有较大的概率在当前图像块的编码过程中使用,基于以上特性,设计了以line buffer为组织形式的L2 CACHE,进一步提高CACHE命中。

cache line更新策略:当从外存中载入了新的数据,且CACHE中能与其对应的cache line都已经存有数据时,需要选择一个cache line将其内部的数据更新成新载入的数据。cache line更新策略的目的是尽量更新掉后续不会再被使用的数据。由于图像块的编码顺序是从左到右从上到下,所以右下侧的数据有更大的几率会被后续的编码过程使用。本模块综合考虑到了上述数据访问特点以及数据与当前编码块之间的距离信息,选择将最不可能被使用的数据进行更新。

总线优化方案:站在总线效率来看,若想要获得高效率的数据传输,则需要尽量增大连续数据传输的长度,并增大发出的最大命令请求数量。模块内部采用可配置的多个数据管理引擎,可同时发出多个ID的数据请求,并支持数据返回乱序和交织、连续cache line请求命令聚合等功能,以提高总线数据传输效率。

DRAM访问优化方案:DRAM作为绝大多数系统内存的实际载体,其访问效率决定着整个系统的运行速度。针对于DRAM访问的特性,模块会尽量减少对DRAM同一个bank不同row的连续数据访问。实现方式为通过地址映射,将CACHE中的多个数据管理引擎映射到DRAM的不同bank,每个数据管理引擎每次管理一行cache line,这保证了同时发出的命令必然是散布在DRAM的不同bank上,并尽量减少对同一bank不同row的数据访问。

3 性能测试与分析

使用x264作为测试平台,在集成了本文所述的CACHE之后,通过对不同的视频序列进行实际编码,部分测试数据如表1。

表1

视频序列名称分辨率CACHE命中率 tennis1920x108073.29% streetview306x23482.87% soccer720x48080.38% station1920x108078.11% basketball1920x108077.68% riverbed1920x108068.35%

对于绝大多数的视频序列,CACHE命中率都可以达到75%以上。对于一些运动方向特别复杂的视频序列(如riverbed),由于其参考块数据的位置较随机,造成命中率有所下降,但也能保持在68%以上的命中率。

4 结语

研究中所述的定制化CACHE,充分挖掘了编解码算法以及系统总线和DRAM的特性,显著提升了命中率和带宽效率。可以广泛应用于各种视频编解码器的设计中,具有很高的实际应用价值。

[1]叶云飞,柯宜京.一种应用于超声无损检测的可变步长LMS算法[J].信息通信,2016(1):29-30.

[2]梅建伟,姜木霖,刘杰,等.一种应用于牵引型超级电容的充电装置研制[J].湖北汽车工业学院学报,2013,27(2):63-65.

[3]姬伟杰,刘平,李杰,等.一种应用于地下腔体成像的新超宽带成像算法[J].现代导航,2015(5):441-447.

A Custom CACHE Used in Ultra High Definition Video Codec Chip

Jiang Xianzhou

Fuzhou rockchips electronics Limited by Share Ltd,Shanghai 201203

Data bandwidth and access delay are the key to control the performance and cost of ultra high definition real time coding and decoding chip.This design in reference to the basis of traditional cache characteristic,make full use of the video codec for video data processing sequence,image data correlation,Axi bus and DRAM access features,the average access hit rate is increased to more than 75%,and significantly reduces the misses in the data read delay.

CACHE;DRAM;AXI

TN919.81

A

1009-6434(2016)6-0158-02

猜你喜欢
编解码命中率内存
基于文献回顾的罚球命中率与躯干稳定性影响因素研究
ASN.1 的PER 分层运行库系统的设计和实现
第9 届世界女子大金属地掷球锦标赛单人连续拋击技术运用分析
为多重编解码世界做好准备
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
大型民机试飞遥测视频编解码方法研究
2015男篮亚锦赛四强队三分球进攻特点的比较研究
投篮的力量休斯敦火箭
内存搭配DDR4、DDR3L还是DDR3?