关于个人介绍,既然你诚心诚意的看了 我就大发慈悲的告诉你 为了防止世界被破坏 为了维护世界的和平 贯彻爱与真实的邪恶 可爱又迷人的反派角色 我们是穿梭在银河的火箭队 白洞,白色的明天在等着我们
分类: C/C++
2019-12-24 10:35:49
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代码初始化逻辑框架如下:
参考链接: