OpenVX编程笔记(一)

本文介绍了OpenVX的主要目标,包括其在实时计算和跨平台抽象方面的优势。讲解了数据对象(如数据映射、属性管理和Graph建模)、虚拟对象、深度学习支持(如NNEF格式)、即时模式API以及OpenVX与OpenCL和OpenCV的对比。着重于如何通过Graph简化编程并利用OpenVX进行硬件优化。

1. 基本概念

1.1 OpenVX 应用目标

  1.  real time computing on low power platforms
  2.  high-level abstraction for heterogeneous platforms

2. OpenVX对象

2.1 data objects

  • 数据访问

OpenVX通过map和unmap函数实现可以在CPU memory(host memory)和accelerator memory之间进行数据移动。例如:`vxMapImagePatch` 和 `vxUnmapImagePatch`。

  • 数据属性

每个数据对象都拥有属性(attribute),可以理解为元数据。属性通常具有“只读”或“可读写”限制。VX通过query和set类函数对其进行获取和设置。例如`vxQuery[Object]`和`vxSet[Object]Attribute`。

 2.2 Graph

由于算法的总体执行效率通常由数据传输和函数执行两部分共同决定,应次需要考虑许多因素,这对编程者造成很大困难。VX为编程者提供了高级接口,这样编程者便不需要考虑底层的数据传输和执行策率,VX将在内部设定传输和执行时机。
为了让vx获知将要执行的算法函数和数据的传输方向,vx使用Graph对象来对此进行建模。

其中node代表要执行的函数,之间的有向连接表示数据传输的方向。
Graph设置完成后在执行之前需要对其进行验证(verify),验证过程会决定执行时要使用的加速硬件和检查Graph中是否存在错误。对于要多次执行的Graph如果仅仅改变执行时使用的数据,那么不会进行过此verify,但是如果要改变Graph中的node或是links,在执行之前要经过再次verify操作。
OpenVX提供用户自定义node的功能,以方便在标准vx中不包含时使用者可以自定义自己要执行的专用功能。 

2.3 虚拟对象(virtual objects)

在Graph的执行过程中如果对于中间过程中产生的、没有访问或保存需求的数据,可以使用虚拟对象。使用虚拟对象可以为执行的优化提供帮助。

2.4 深度神经网络

在OpenVX中深度神经网络有两种引入方式:*OpenVX Neural Network Extension* 和 *OpenVX Kernel Import Extension*。其中*OpenVX Kernel Import Extension*将预训练的网络读取为一个单一的node,同时使用*Neural Network Exchange Format (NNEF)*作为数据传输的格式。

2.5 Immediate mode API

OpenVX有两种使用方式,分别为*Graph模式* 和 *Immediate模式*,其中*Immediate模式*生成一个值包含单一node的graph,在调用时,编程者不需要再构建Graph而可以类似于函数调用的方式使用OpenVX,但是只有graph模式采用有更多的优化。

2.6  OpenVX、OpenCL和OpenCV的比较

OpenVX具有更小的scope,使其支持的优化平台范围更加广泛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值