OpenVX用户内核
用户内核
OpenVX支持客户端定义函数的概念,这些函数应作为节点,从图形内部或图形内部执行。这种模式的目的是:
1)进一步利用OpenVX平台内节点的独立操作。
2)允许在OpenVX的其他地方重用组件化功能。
3)将严格的验证要求正式化(即合同编程)。
如图2-6所示,要执行客户端提供的函数,图形不必先暂停,然后再恢复。这些节点应相对于OpenVX中的独立基础节点,以独立的方式执行。如果存在利用此属性的硬件,能实现进一步最小化执行时间。

图2-6 具有用户内核节点的基本图
1.参数验证
用户内核必须通过为其实现的每个视觉功能,提供明确的验证功能来帮助图形验证工作。传递给用户内核的实例化节点的每个参数,都使用客户端提供的验证函数进行验证。客户端必须检查以下属性和/或每个参数的值:
1)必须检查参数的每个属性或值。例如,数组的大小,或在一个范围内的标量的值,或图像的维度约束,如宽度可分割性。一些实现可能有限制,例如图像宽度可以被某个固定数字整除。
2)如果输出参数依赖于输入参数的属性或值,则必须检查这些关系。
3)元格式对象是一个不透明的对象,用于收集有关输出参数的要求,然后OpenVX实现将对其进行检查。客户端必须手动设置要根据输出参数检查的相关对象属性,如维度、格式、缩放等。
2.用户内核命名约定
用户内核必须使用唯一名称和唯一枚举导出。OpenVX的客户端可能使用名称或枚举来检索内核,因此,非唯一名称引起的冲突将导致问题。内核枚举可以通过以下示例进行扩展。
#define VX_KERNEL_NAME_KHR_XYZ "org.khronos.example.xyz"
/*! \简要介绍XYZ示例库集
* \ingroup group_xyz_ext
*/
#define VX_LIBRARY_XYZ (0x3) // 由Khronos分配,供应商控制的
/*! \简要介绍XYZ内核列表
* \ingroup group_xyz_ext
*/
enum vx_kernel_xyz_ext_e {
/*! \简要介绍用户定义内核示例 */
VX_KERNEL_KHR_XYZ = VX_KERNEL_BASE(VX_ID_DEFAULT, VX_LIBRARY_XYZ) + 0x0,
// 最多可以创建0xFFF内核枚举
};
愿景功能或实现的每个供应商,都必须向Khronos申请一个唯一的标识符。在获得唯一ID前,供应商必须使用VX_ID_DEFAULT。
要构造内核枚举,供应商必须同时具有其ID和库ID。库ID完全由供应商定义(但是,当使用VX_ID_DEFAULT ID时,许多库可能会在命名空间中发生冲突)。
一旦定义了两者,就可以使用VX_kernel_BASE宏和偏移量来构建内核枚举。偏移量是可选的,但对于长枚举非常有用。
人工智能芯片与自动驾驶