OpenVX基本原理

OpenVX基本原理

OpenVX 是一个低级编程框架域,用于支持软件开发人员,可高效访问计算机视觉硬件加速功能和性能的可移植性。OpenVX 旨在支持现代硬件架构,例如,移动和嵌入式 SoC 以及桌面系统。其中许多系统是并行和异构的:多个处理器类型包括多核 CPU、DSP 子系统、GPU、专用视觉计算结构,以及硬连线功能。此外,视觉系统内存层次结构通常具有复杂、分布式、不连贯性。OpenVX 旨在最大限度地提高功能和性能的可移植性,这些不同的硬件平台,提供了一个计算机视觉框架,并对应用程序的产生极小的负面冲击。

OpenVX 包含以下几个内容。

1)预定义和可定制的视觉功能库。

2)基于图形的执行模型,用于组合功能,使任务和与数据无关的执行。

3)一组抽象物理内存的内存对象。

OpenVX 定义了一个 C 应用程序编程接口(API),用于构建验证和协调图形执行,以及访问内存对象。图形抽象使 OpenVX 实现者,能够优化执行底层加速架构的图表。

OpenVX还定义了vxu实用程序库,该库将每个OpenVX预定义函数共享为可直接调用的C函数,而无需首先创建图形。使用vxu库构建的应用程序,不会从图形所启用的优化中受益;然而,vxu库可作使用OpenVX的最简单方法,并作为移植现有视觉应用程序的第一步。

由于计算机视觉领域仍在快速发展,OpenVX 提供了扩展性机制,使开发人员定义的函数,能够添加到应用程序图。

版本/变更历史

OpenVX 1.0 Provisional - 2013 年 11 月

OpenVX 1.0 临时 V2 - 2014 年 6 月

OpenVX 1.0 - 2014 年 9 月

OpenVX 1.0.1 - 2015 年 4 月

OpenVX 1.1 - 2016 年 5 月

OpenVX 1.2 - 2017 年 5 月

OpenVX 1.2.1 - 2018 年 5 月

OpenVX 1.3 - 2019 年 6 月

OpenVX 1.3.1 - 内核模块注册 API - 2021 年 10 月

演变过程中被弃用的某些项目将删除。兼容性头文件中列出的项目仅为临时项目,当这些项目不再支持向后兼容性时,这些项目将被永久删除。

规范约定

OpenVX中使用了以下规范约定。

在OpenVX中,给出的代码示例突出显示了 特定问题使用如下所示的格式:

/* 示例代码部分 */

int main(int argc, char *argv[])

{

   return 0;

}

命名约定

OpenVX中使用了以下命名约定。

不透明对象和原子被命名为vx_object,例如vx_image或vx_uint8,并用下划线将对象名称与vx前缀隔开。

定义的结构被命名为vx_struct_t,例如vx_imagepatch_addressing_t,下划线将结构与vx前缀分隔开,并用t表示它是一个结构。

定义的枚举被命名为vx_enum_e,例如vx_type_e,下划线将枚举与vx前缀分隔开,并用e表示它是一个枚举值。

应用程序编程接口使用骆驼风格大小写,命名为vxsomeFunction(),以小写字母开头,没有下划线,例如vxCreateContext()。

视觉函数还具有遵循类似于Java包的小写、反点层次结构的命名约定,例如,

org.khronos.openvx.color_convert

这最大限度地减少了名称冲突的可能性,并促进了排序和查询可用视觉函数的命名空间时的可读性。每个视觉函数都应具有唯一的虚线名称:tld.vendor.library.function。这种视觉函数命名空间的层次结构是在子域org.khronos,但它们确实遵循现有的国际标准。对于 OpenVX 指定的视觉函数,将唯一名称不使用骆驼风格大小写,而是使用下划线分隔单词。

供应商命名约定

以下命名约定将用于特定于供应商的扩展。

不透明对象和原子被命名为vx_object_vendor,例如vx_ref_array_acme,并用下划线将供应商名称与对象名称隔开。

定义的结构命名为vx_struct_vendor_t,例如vx_mdview_acme_t,下划线将供应商与结构名称隔开,t表示它是一个结构。

定义的枚举被命名为vx_enum_销售方_e,例如vx_convolution _name_acme_e,下划线将供应商与枚举名称隔开,e表示它是枚举值。

定义的枚举值命名为VX_ENUMVALUE_销售方,例如VX_PARAM_STRUCT_ATTRIBUTE_SIZE_ACME,仅使用以vx前缀开头的大写字母和分隔单词的下划线。

应用程序编程接口使用驼色大小写命名为vxSomeFunctionVendor(),以小写字母开头,没有下划线,例如vxCreateRefArrayAcme()。

词汇表和缩略语

原子

原子意味着C基元数据类型。具有额外的用法,如原子操作。

应用程序接口

应用程序编程接口,指定软件组件如何与另一个组件交互。

引擎

一种特定用途的软件抽象,可由用户进行调整。

框架

一种通用软件抽象,其中用户可以产生特定应用程序的功能。

内核

OpenVX使用术语内核来表示抽象的计算机视觉功能,而不是操作系统内核。内核也可以指一些计算机视觉的卷积系数(例如,Sobel内核)。OpenVX不使用此含义。OpenCL使用内核(特别是cl_kernel)来限定用cl编写的函数,OpenCL可以直接调用该函数。这接近OpenVX使用的含义;然而,OpenVX并没有定义一种语言。

运行时

程序的执行阶段。

实现定义

OpenVX API 未指定所述条件下的实现行为,实现开发人员自主开发。

禁止

应用程序应确保未使用所描述的条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenVX的基本操作与支持树莓派联合开发

OpenVX支持树莓派联合开发 Khronos集团和树莓派共同致力于OpenVX的开源实现™11.3,通过了树莓派的一致性。通过一致性配置文件,开源实现了树莓派上OpenVX 1.3中指定的视觉、增强视觉和神经网络。 当Khronos标准在目标系统上可用时,应用程序开发人员可以始终自由使用这些标准…

推荐4本书《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

技术架构典型技术选型

技术架构由多种技术组成,过程中可能涉及非常多的具体技术【图】技术架构核心技术 下面我们就技术架构中核心的流量调度、服务治理、监控体系、消息列队、微服务技术框架等进一步展开介绍。 一、流量调度 流量调度是技术架构中的核心技术,包括负载均衡、API网关、配置中心,以…

什么是单向认证与双向认证

什么是SSL双向认证,与单向认证证书有什么区别 SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端…

「杂文」日常 11

基于手机相册的 2024 年度总结好像一年的开头是考试周来着非常卓越的年轻就是好啊,骑车跨越半个城区去吃包子当时还是狂热粥批 给春节活动攒了大量抽嫖同学的桌游寒假打了不少生稀盐酸看起来还挺有精神的()被 jbbai 带着入坑铲了 当时那个段位乱 D 凑大羁绊就爽吃了因为看到…

块存储、文件存储、对象存储的比较分析

【摘要】本文从从应用角度比较块存储、文件存储、对象存储,对三者的层次关系进行了清晰的解读,并比较了分布式存储在块存储、文件存储、对象存储的应用成效。 一、块存储、文件存储、对象存储三者的本质差别 1.1 块存储 典型设备:磁盘阵列,硬盘 块存储主要是将裸磁盘空间整…

分析基于ASP.NET Core Kernel的gRPC服务在不同.NET版本的不同部署方式的不同线程池下的性能表现

分析基于ASP.NET Core Kernel的gRPC服务在不同.NET版本的不同部署方式的不同线程池下的性能表现 使用默认的 gRPC 项目模板创建,垃圾回收器类型为 ServerGC(Server garbage collection)。 使用 ghz 工具在不同的请求总数、连接数、并发数的参数下,进行压力测试,接口为 /gree…

Python学习(七)——配套《PyTorch深度学习实战》

1. 介绍一下下面这张图推荐系统自己还差点就去研究了这张图片概述了几种数据分析和机器学习的应用场景,包括推荐系统、网页搜索、舆情分析、关联规则、社交网络分析以及天气预测。下面是对每个部分的详细解释: 推荐系统用户u, 商品i:推荐系统旨在为特定用户(u)推荐商品(i…

golang1.23版本之前 Timer Reset方法无法正确使用

在 Go 1.23 之前,正确使用 Timer.Reset 是一个挑战,因为 Stop 和抽取操作之间的状态可能不一致,导致定时器异常触发。最好的做法是避免复用定时器,每次都创建一个新的定时器,这样代码更简洁、健壮,也更容易维护。golang1.23版本之前 Timer Reset方法无法正确使用 golang1…

【kafka】携程基于Kafka的数据校验代理在FinOps领域的应用

一、现状与问题1.1 现状1.2 问题描述1.3 解决方案二、设计与核心实现2.1 Kafka的相关背景知识2.2 Kafka Gatekeeper的设计和实现三、总结以下文章来源于携程技术 ,作者懿涵作者简介 懿涵,携程HybridCloud团队云原生研发工程师,关注云原生、IaC领域。为了有效管理云成本,基于…

苹果(iPhone)越狱,iPhone绕ID越狱,苹果手机越狱方法

CheckRa1n 越狱支持设备:iPhone 5S - iPhone X,兼容系统:iOS 12.3 ~ iOS 14.8,所以一些iPhone 5S以前的老设备(可以通过往期教程老设备越狱)以及iPhone X 以后的新设备都是无法通过heckRa1n 越狱,更别说绕ID的,其中iPhone X以后的新设备目前无法破解ID,某宝、某多的破…

【SQLite数据库】一个伪装成数据库的语言

SQLite是一个嵌入式的数据库,具有体积小、运行快、跨平台等优点,更关键的是,SQLite只有13万行左右。而传统的大型关系型数据库如Mysql、Oracle,代码行数超100多万行。 SQLite从2000年第一个版本发布到现在,已经运行在数亿设备上了,从本地应用、小型桌面应用,到移动设备应…