UCP是什么?
统一计算平台(Unify Compute Platform,以下简称 UCP)定义了一套统一的异构编程接口, 提供应用程序接口(Application Programming Interface,以下简称API)实现对芯片(System on Chip,以下简称SOC)上所有资源的调用。 UCP将SOC上的功能硬件抽象出来并进行封装,对外提供基于功能的API,用于创建相应的UCP任务(如VP算子任务),并支持设置硬件Backend提交至UCP调度器, UCP可基于硬件资源,完成SOC上任务的统一调度。 具体提供了以下几个功能: 视觉处理(Vision Process)、神经网络模型推理(Neural Network)、高性能计算库(High Performance Library)、自定义算子插件开发(待实现)。

Backend相关介绍请查看 Backend说明 。
UCP应用场景:
单算子调用:可直接使用UCP中的视觉算子、高性能处理算子。
算子插件开发使用:可进行自定义算子的开发。
深度学习模型推理:可完成深度学习模型的推理任务,UCP内部完成模型的解析及硬件部署。
UCP的优势:
高度抽象:对于单算子的功能,不会受到硬件差异带来的困扰,可通过指定backend选择需要执行的硬件,降低硬件部署难度。
集成度高:作为地平线统一的异构编程接口,一套接口完成所有需求开发。
本章节用于指导如何使用UCP进行模型硬件部署等开发任务,具备基本的嵌入式开发的知识、经验和技能可以更好地理解本章节内容。
UCP任务执行有三种方式:同步执行、异步执行、注册回调函数执行。 以调用VP接口hbVPRoate(hbVPRotate) 为例,说明三种任务执行方式。
创建任务时,将taskHandle对应的参数传入nullptr,可立即同步执行,参考代码如下:
创建任务时,需要提前将taskHandle参数初始化为nullptr; 提交UCP任务(hbUCPSubmitTask)后,在线程指定位置执行接口(hbUCPWaitTaskDone),等待任务完成,参考代码如下:
创建任务时,需要提前将taskHandle参数初始化为nullptr; 回调函数需要在任务提交(hbUCPSubmitTask)前注册,否则注册接口会报错。
如下给出设置回调函数的参考代码:
backend是指UCP任务执行时的后端计算硬件,当前UCP支持的backend包括BPU、DSP、GDC、STITCH、JPU、VPU、PYRAMID。
| backend | 描述 |
|---|---|
| BPU | Brain Process Unit,地平线神经网络计算单元。 |
| DSP | Digital Signal Processor,数字信号处理器,是一个可编程的硬件单元。 |
| GDC | Geometric Distortion Correction,是ARM上的一个硬件IP,可将输入图像进行视角变换、畸变矫正、图像仿射变换等操作。 |
| STITCH | stitch是J6的一个IP单元,可对输入的图像进行裁剪,拼接,拼接模式分别有:alpha融合、alpha beta融合、直接拷贝。 |
| JPU | JPEG Processing Unit,主要用以完成JPEG的编解码功能。 |
| VPU | Video Processing Unit,是一种专用的视觉处理单元。 |
| PYRAMID | 全称Image Pyramid,是一个硬件处理模块,可对整幅原始图像进行缩小。 |
UCP适用于地平线J6及更高架构的计算平台,您需要具备基本的嵌入式开发的知识技能,以完成交叉编译、部署,使用环境及工具要求参考下表:
| 环境/工具 | 支持版本 |
|---|---|
| 操作系统 | Linux |
| 开发板 | J6开发板 |
| 开发语言 | C++11 |
| 交叉编译器 | Linaro 11.4.0 |
| 工具链DSP | Cadence Vsion Q8 2021.7 |
除开发板外,UCP还在x86仿真环境下提供了与板端同样的开发能力支撑。
与开发板端相同,UCP在 x86 架构上通过仿真形式提供了同样的视觉处理、模型推理和高性能计算能力,所有的示例及接口代码均可以在仿真环境中等效使用。 您可以在x86环境中进行代码开发和调试,开发过程中获得可即时反馈,并在早期发现和解决问题,从而提高开发效率和代码质量,以确保代码能够无缝迁移到SoC硬件上运行。
UCP支持的各Backend仿真方式如下:
gdc_cmodel 。Nieuport_JpgEnc 和 Nieuport_JpgDec ,分别用于JPEG编码和解码。hevc_enc 和 hevc_dec ,分别用于Video编码和解码。UCP仿真使用Docker镜像自带的编译器环境即可。
HB_DSP_CMODEL_IMAGE,以确保应用程序能够找到正确的仿真镜像文件。
参考命令如下:但x86仿真环境下的性能通常会低于实际硬件的性能,主要原因如下: 前文我们提到,目前UCP支持的各Backend使用的仿真方式包括指令级仿真、CModel可执行文件仿真以及使用仿真库。