在移动互联大行其道,而电池技术尚未有革命性突破的今天,使得功耗这个话题越来越重要,任何移动设备厂商都把她作为一个重要的技术指标。所谓“平生不见陈近南,便称英雄也枉然”,那么今天我们来聊一聊对功耗有重大意义的Arm帧缓存压缩技术(Arm Frame Buffer Compression)在图形处理器(GPU)中的应用。
为什么要有AFBC
首先我们来做一道简单的数学题:有个小朋友正在手机上看世界杯,假设手机分辨率是1080p,视频也是1080p,帧率是60 (即每秒钟有60帧),那么他手机上的GPU需要向显示屏输出多少颜色数据呢?
颜色缓存(Color buffer):1920 * 1080 * 4 * 60 = 474 MB/S
乘以4是因为一般每一个显示屏上的像素点有RGBA 4个通道。是不是很吓人,这么大的数据量是不是会消耗掉很多电呢?要是能把这个数据量减少一半,是不是就不需要带着充电宝了呢?
什么是AFBC
简单来说,AFBC是Arm提出的一种数据压缩技术:
· 无损压缩
· 支持随机访问(最小4x4块级)
· 几乎零面积成本
· 支持RGB, YUV格式压缩,YUV格式压缩率约50%
· 对应用程序透明
那么AFBC到底用在哪呢?下面我来介绍一下AFBC的常见应用场景,看完之后你就会了解到你手机里的AFBC(如果GPU是Mali的话)是怎么工作的了。
我们来简单的分析一下数据流向:
1. 你正在看世界杯,世界杯的视频数据在VP处理完毕后,会进行AFBC压缩,然后通过数据总线传给GPU。
2. 或者你正在玩王者荣耀,王者荣耀并不会做AFBC压缩,因为她根本不知道AFBC是何方神圣,但是GPU驱动会把相关的数据压缩成AFBC数据,然后在GPU内部进行处理。
3. 上述两步的数据到了GPU后,都变成了AFBC压缩的数据,经过GPU处理后,最后通过数据总线传给DP进行解压并显示。
聪明的小伙伴已经发现了,在我们刚开始算的那道数学题中,474 MB/S只是上图中3上的数据带宽,那么1和2中是不是也有类似的数据流量呢?答案是显而易见的。
使用了AFBC的结果
好了,下面来看一下用了AFBC后我们内存带宽的变化(引用arm developer网站一张图)。
· 蓝色曲线:没有使用AFBC。
· 绿色曲线:内部数据使用了AFBC (降低~40%)。
· 红色曲线:输出以及内部数据使用了AFBC(降低~70%)。
从图中可以看出,使用了AFBC之后,内存带宽大大降低了,但是内存带宽降低了到底能省多少电呢?这个取决于你手机系统的设计,没有统一的数学公式,但是一般来讲,1 GB/S的内存带宽大约耗电为150mW,所以我们来算一下那位看世界杯的小朋友使用AFBC后能省多少电:
474* 2 (VP->GPU, GPU->DP) * 70% / 1024 * 150 mW = 97 mW
省了不少了吧?事实上能省的电比这多得多,因为系统中还有很多数据也是会用到AFBC的。
AFBC的不足
· AFBC并不是固定压缩率的算法,所以在内存分配的大小上并不能省,反而会略有增加。
· 如果应用程序需要频繁的用CPU去读AFBC压缩的数据,那么就需要不停的把数据解压缩,这样带来了额外的开销。
· 如果在某些内存使用量很少的应用程序中使用AFBC,那么压缩解压缩带来的开销将大于省下的内存带宽,得不偿失。
结束语
扫地僧云:“本寺七十二绝技,每一项功夫都能伤人要害、取人性命,凌厉狠辣,大干天和,是以每一项绝技,均须有相应的慈悲佛法为之化解”。通过Arm工程师们的佛法,我相信AFBC必将获得更广泛的应用。
好了,今天就到这里,下次再见!
版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Arm帧缓存压缩技术(AFBC)》的版权归原作者「GPUer」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458
文章来源: 阅读原文
GPUer微信公众号:GPUers
手机扫描上方二维码即可关注GPUer微信公众号