嵌入式OpenVX-计算机视觉库

364420阅读 1评论2019-12-24 BugMan
分类:C/C++

OpenVX我觉得可以认为是OpenCV的嵌入式版本(计算机视觉和人工智能),OpenVX提供一些图像处理的标准的API,系统第三方Vendor可以用硬件来实现一些图像处理功能,效率更高,而OpenCV则偏向于用Software的方式来实现这一些定义的功能(本章只是简单做一个记录,并不详细说实现)

在OpenVX当中,有一个关键词叫做kernel,这里的kernel并不是指操作系统的kernel,而是指OpenVX中的一种功能,比如对一个图片进行高通滤波的功能就是openVX的一个功能,这在OpenVX里面叫做一个user kernel。既然kernel是一种提供给用户使用的功能,那么这个功能函数一般支持传参,通过参数的不同来改变kernel的运行结果(比如传入的图片就算一个参数),在OpenVX当中,把参数定义初始化好后的kenrel叫做node,  因此,node就是kernel的一个实例化即拥有指定参数的kernel。在CNN中,OpenVX的node就是一个layer层,而OpenVX的运行是基于node来运行的,所有的node会被链接到图(graph)中,最后由graph统一运行。运行例子如下(具体编程参考后面的链接):

既然存在user kernel(这个功能运行在当前CPU上),TI在openVX的基础上增加了remote kernel即这个Kernel函数是运行在其他CPU上面的,这样做可以让多个CPU并行运算,提升运行效率,比如将不同功能分发给擅长该功能的CPU运行,可以事半功倍(这里就简单提一下,不详细说具体实现)。

TI的多核并行运算TIOpenVX数据逻辑如下(远程CPU之间通信是通过共享内存和rpmsg实现,下图是一个DSP+ARM流程图):


TI修改后的TiOpenVX代码初始化逻辑框架如下:



参考链接:


上一篇:VirtIO结构分析
下一篇:Linux中断子系统domain

文章评论