高通骁龙820A内置了Hexagon 680 DSP芯片,如下图所示,可见Hexagon 680在其中占据了很重要的位置。
DSP中存在专门处理JPEG图像压缩的部分,这部分内容专门只针对JPEG图像压缩算法设计,硬件上只针对这一个工作进行全力优化(比如专门针对图形处理中常用的傅里叶变换的计算单元,效能极为出色),执行专用操作。一般来说,在一个处理器中,有很多类似的功能使用CPU部分完成虽然也可以,但是整体效能不高,并且能耗表现也不够理想。因此,人们往往为处理器增加多种专用的DSP,专门针对诸如图像、音频、视频、语音、输入、触控等内容,不但提高了处理效率,而且还在很大程度上释放了CPU资源,降低了能耗。当然,从技术角度来看,DSP比较关注指令集并行,也就是单核心性能,对线程级并行则不太擅长,因此也不太可能存在使用成千上万个DSP来组成计算单元的可能性了。 一般来说,用户主要在三个方面使用DSP,首先是视频处理。在Android设备上,视频处理可以改善播放的视频内容的质量,比如反交错、降噪、色彩校正等。其次是相机后处理和CV,包括摄像头数据处理、动态增强、色彩调整、HDR等。最后还有相机播放内容,针对传感器等的处理情况。目前Hexagon 680均对这些内容做出了支持。
Hexagon 680 DSP内置了一个1024bit的SMID矢量数据寄存器,高通称之为Hexagon Vector Extensions—Hexagon矢量扩展,简写为HVX。HVX每次可以处理四条VLIW向量指令,每个循环可以处理多达4096bit数据,需要注意的是,一般实际应用中的指令比DSP支持的最大指令宽度要小很多,不过借助于SIMD和系统的特性,单个指令可以一次操作多个数据,因此在计算中很多数据可以被一次性填充进入处理过程,实现效能的最大化。另外,HVX为了实现上下文切换功能,还设计了32个向量寄存器。规格方面,HVX支持32位的定点十进制数的操作,但不支持浮点计算,这应该是考虑到晶体管数量和功耗的原因,一般情况下也没有浮点计算的需求。总的来看,这样的规格和性能足以满足4K视频以及20M像素摄像头的处理需求了。高通还展示了HVX底层设计的一些细节。HVX内部拥有L1数据和指令缓存,4个并行的VLIW标量处理单元,单元的运行频率为500MHz,还有共享的L2缓存。此外,HVX中还有两组独立的矢量单元,这样设计实际上是为了执行多线程任务,比如同时处理音频和图像处理,矢量单元可以独立进行计算。
HVX内部SMID结构图
HVX的存储结构设计
与此同时,在存储系统方面,矢量单元和向量单元共享L2缓存。但HVX的L2实际上在一个周期内就可以完成负载的处理,因此有些人也认为这就是一个更为宽松的L1缓存。从应用中来看,Hexagon 680可以直接将数据从摄像头传递至L2缓存(速度为1.2Gp/秒),并将其传输给ISP开始处理,以避免占用DRAM,同时也可以降低能耗。此外,高通还为设计了了一个SMMU(System Memory Management Unit),它可以自动管理那些不可复制的数据,并使得多个并发应用共享CPU资源,实现效能提升。
之前我们说过,DSP在Android设备商最重要的功能之一就是图像处理。高通也做了一些这方面的成果展示。在强大的矢量和标量记算能力的辅助下,只要有优秀的算法,Hexagon 680就能够大放异彩,高通宣称借助于Hexagon 680,可以实现更为清晰的低光照下的视频录制功能,成像质量和速度比之前单纯使用CPU等有了明显提高。图形处理的性能方面,高通也公布了一些数据,比如由于有Hexagon680的辅助,在图片处理方面,Hexagon 680相比之前使用四核心Krait处理延迟要低三倍,功耗更是只有后者的十分之一左右,节能效果非常显著。 最后再来看看Hexagon 680的一项特殊功能——对始终开启的传感器实现自动监控。Hexagon 680拥有特殊的“低功耗岛”,设计人员可以用它监控诸如计步器、传感器等一些需要系统“始终开启”的设备,替代之前的CPU唤醒或辅助处理器唤醒等操作,更进一步降低能耗。根据高通的测试来看,使用Hexagon 680的骁龙820对比骁龙808,能够在“始终开启”的状态下,仅使用之前1/3到1/2的功耗就能完成相同的任务。
Hexagon 680的图像处理速度非常出色,能耗比很高。
Hexagon 680整体表现相当出色,它依靠DSP在架构设计上的优势,尤其是1024bit SIMD的加入,使得Hexagon680大大拓展了应用范围,能够在多项任务中表现出比传统DSP更强悍的功能。目前有关Hexagon 680的相关API也已经准备完成,软件和系统只要调用Hexagon 680的API,就能够启动并得到计算辅助。