认识一下RK3399Pro的硬件
前言
好久不更新博文,在这里和加我的朋友说声“对不起,不好意思”,由于一直没有留意通过请求的信息,等看到的时候,已经过期!
好了言归正传,此篇文章开始又要更新我的RK3399Pro的开发篇了。这次是因为工作所需,开始做产品了!
介绍一下基础部分:
首先要知道嵌入式开发和PC开发的不同之处,PC纯靠CPU和GPU通过编写程序,不计成本的进行运算,只要肯砸钱,配置越高运算能力越强。但嵌入式平台并不是这样的,嵌入式平台需要兼顾算力、功耗、成本等等因素,一颗好的嵌入式芯片,他要在控制成本和功耗的情况下尽可能的提高特定运算的能力。(划重点:CPU是为了通用运算,而嵌入式芯片将一些特定的运算固化成了芯片电路,大大提高了运算速度、降低了功耗和成本。)
下面就给大家介绍下RK3399PRO的这些特定运算的硬件(注意,以下所有硬件单元皆是独立运作的,也就是说同一时间他们都可以做独立的任务,相互不干扰不等待,考验同学们多线程编码的时候到了):
硬件组成 (RK3399Pro = RK3399 + NPU)
- CPU : 双核A72 + 四核A53 :
core0-core3 是小核, core4-core5是大核, 编程深度优化时候可以把cpu的某些运算手动绑定在大核上,可提高通用运算的速度。 - GPU : Mali T860, 支持OpenGL 2.x 和 OpenCL 1.2 以及 Vulkan
如果你用的是Linux系统开发,那使用OpenGL和CL时候,从Khronos官网下载对应版本的头文件,加上我们Mali的so库,就可以进行开发了,千万不要从操作系统自带的源里去下载,因为源里默认的都只有CPU版本的gl和cl。
注:Linux操作系统暂时不支持Vulkan,想玩Vulkan的还是需要安卓系统。
如果你用的是Android系统开发,那OpenGL和Vulkan就已经是JavaAPI和NDK里自带的了,RK已经对接了GPU,直接使用即可。OpenCL的话依然需要自己下载CL的头文件,配合安卓里system/lib64的GLES的so使用。
当然如果想利用GPU做运算,这里我建议同学们去ARM的官网下载Arm Computer Lib,它分为Linux和Android两个版本,分别自带的包括arm nn在内的arm cpu/mali gpu的运算封装,可以大大提高大家代码开发效率,毕竟自己徒手写OpenCL还是很复杂的。 - VPU : RKVdec, VPU2 (视频编解码单元)
Rockchip最牛逼的地方之一莫过于他的视频编解码模块,其中RKVdec模块可以支持包括H264/H265在内6路1080P/30FPS,或者2路4K/30FPS(支持HDR 10bits),或者同等运算量其他组合形式。而VPU2单独的编码模块,可以在解码的同时,进行2路1080P30FPS的H264编码。(大家对比下PC平台,如果想做到这个程度的编解码,需要砸多少钱、花费多少功率用CPU、GPU来实现)
如果你是Android系统开发,那么使用Android自带的MediaCodec API,就可以用到所有的VPU能力了,RK已经对接好了。
如果你是Linux系统开发,那推荐使用RK自己开发的MPP lib来调用VPU编解码(https://github.com/rockchip-linux/mpp),千万不要用操作系统自带的源去安装gstreamer、ffmpeg之类的库,这些库默认都是用cpu编解码的,我们也会发布相关的rpm包来让大家使用rk vpu对接过的gsteamer和ffmpeg,如果想下载源码编译,也可以在https://github.com/rockchip-linux找到。 - RGA :二维图像辅助计算单元
这又是Rockchip的神器之一,该单元可以在极短时间内拷贝、旋转、格式转换、缩放、混合 图片,想想在PC上被CPU memcpy支配的恐惧,再回头看看能在短短几个毫秒内内存拷贝一张4K图片,还能同时缩放、旋转、把YUV转成RGB之类的格式转换,用上后就再也不会想用CPU来做这些工作了。
不论你是Android还是Linux开发者,想用RGA的话都需要使用我们的rga lib来调用,而安卓因为hwc单元一直在使用该器件进行转屏混合工作,所以在安卓上使用rga效率远远低于linux平台。(安卓的librga位置在hardware/rockchip/librga目录里) - NPU : 神经网络计算单元
这是RK3399Pro独有的运算单元,他可以通过传递一张计算图初始化后,不断的喂给他输入数据,而吐出输出数据。这个单元在我们各种文档和直播视频里都介绍了,这里就不再重复描述了。
不论你是Android还是Linux开发者,都需要单独使用rknn_api lib来调用。 - PCI-E x 4 接口
这个不能算是运算单元,但是我还是在这里提下,并不是所有嵌入式芯片都带有PCI-E插槽的,而3399Pro因为有了PCI-E支持,可以非常方便的扩展包括硬盘阵列在内的各种单元。(是不是忽然有种脑洞大开的感觉,觉得这块板子能做更多事情了 :)