OpenVX数据结构、 流水线和批处理
OpenVX数据结构、 流水线和批处理
3.模块文档
3.1. 流水线和批处理
数据结构
枚举
功能
- vxSetGraphScheduleConfig
- vxGraphParameterEnqueueReadyRef
- vxGraphParameterDequeueDoneRef
- vxGraphParameterCheckDoneRef
本节列出了图形管道和批处理所需的API。
3.1.1. 数据结构
vx_graph_parameter_queue_params_t
对特定图形参数的参数进行排队。
typedef struct _vx_graph_parameter_queue_params_t {
uint32_t graph_parameter_index;
vx_uint32 refs_list_size;
vx_reference * refs_list;
} vx_graph_parameter_queue_params_t;
- graph_parameter_index - Index of graph parameter to which these properties apply
- refs_list_size - 数组refs_list中的元素数
- refs_list - 可以在稍后的时间点在此图参数处排队的引用数组
有关更多详细信息,请参见vxSetGraphScheduleConfig。
3.1.2. 枚举
vx_graph_schedule_mode_enum_e
额外枚举。
enum vx_graph_schedule_mode_enum_e {
VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE = 0x1E,
};
枚举
- VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE - 图形调度模式类型枚举。
vx_graph_schedule_mode_type_e
图形调度模式的类型。
enum vx_graph_schedule_mode_type_e {
VX_GRAPH_SCHEDULE_MODE_NORMAL = ((( VX_ID_KHRONOS ) << 20) | ( VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE << 12)) + 0x0,
VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO = ((( VX_ID_KHRONOS ) << 20) | ( VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE << 12)) + 0x1,
VX_GRAPH_SCHEDULE_MODE_QUEUE_MANUAL = ((( VX_ID_KHRONOS ) << 20) | ( VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE << 12)) + 0x2,
};
有关每种模式的详细信息,请参见vxSetGraphScheduleConfig和vxGraphParameterEnqueueReadyRef。
枚举
- VX_GRAPH_SCHEDULE_MODE_NORMAL - 非排队模式下的调度图。
- VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO - 具有自动调度的排队模式下的调度图。
- VX_GRAPH_SCHEDULE_MODE_QUEUE_MANUAL - 具有手动调度的排队模式下的调度图。
vx_graph_attribute_pipelining_e
此扩展添加的图形属性。
enum vx_graph_attribute_pipelining_e {
VX_GRAPH_SCHEDULE_MODE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_GRAPH) + 0x5,
};
枚举
- VX_GRAPH_SCHEDULE_MODE - 返回图形的计划模式。只读。使用vx_enum参数。请参见vx_enum vx_graph_schedule_mode_type_e枚举。
3.1.3. 功能
vxSetGraphScheduleConfig
设置图形调度程序配置。
vx_status vxSetGraphScheduleConfig(
vx_graph graph,
vx_enum graph_schedule_mode,
uint32_t graph_parameters_list_size,
const vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[]);
此API用于设置图形调度程序配置,以允许用户调度图形的多个实例以供执行。
对于不需要图形管道或批处理的遗留应用程序,不需要使用此API。
使用此API,应用程序指定图形调度模式,以及需要允许引用排队的所有图形参数的排队参数。提供单个单片API而不是离散API,因为这允许实现在一次拍摄中获得与调度相关的所有信息,然后基于这些信息优化后续的图调度。必须在图形验证之前调用此API,因为在这种情况下,它允许实现根据应用程序提供的信息优化资源。
graph_schedule_mode选择如何向图提供输入和输出引用,以及实现如何触发下一个图调度。
支持以下调度模式:
当图形调度模式为VX_graph_schedule_mode_QUEUE_AUTO时:
在查询数据引用之前,应用程序需要显式调用vxVerifyGraph
应用程序不应调用vxScheduleGraph或vxProcessGraph
当足够多的引用在不同的图参数处排队时,实现可以触发下一个图调度。
这里,并不是所有的图参数都需要具有排队引用才能开始图调度。期望实现尽可能多地执行图,直到排队的引用不可用为止,此时它将暂停图,直到引用可用为止。这允许应用程序即使在所有参数引用都不可用的情况下也可以调度图,即进行“延迟”排队。然而,确切的行为是具体实施的。
当图形调度模式为VX_graph_schedule_mode_QUEUE_MANUAL时:
应用程序需要显式调用vxScheduleGraph
应用程序不应调用vxProcessGraph
在图形上调用vxScheduleGraph之前,需要对图形的所有图形参数的引用进行排队,否则vxScheduleGraph将返回错误
应用程序可以在同一个图参数处对多个引用进行排队。当调用vxScheduleGraph时,所有排队的引用都会在“批处理”中进行处理。
用户可以使用vxWaitGraph等待上一个vxScheduleGraph完成。
当图形调度模式为VX_graph_schedule_mode_NORMAL时:
graph_parameters_list_size必须为0并且
graph_parameters_queue_params_list必须为NULL
此模式等效于OpenVX v1.2及更早版本定义的非排队调度模式。
默认情况下,在调用此API之前,所有图形都处于VX_GRAPH_SCHEDULE_MODE_NORMAL模式。
graph_parameters_queue_params_list允许指定以下信息:
对于指定的图形参数索引,它启用排队操作模式
此外,它还允许应用程序指定引用列表,稍后可以在此图参数处将其排入队列。
对于graph_parameters_queue_params_list中列出的图形参数,应用程序必须使用vxGraphParameterEnqueueReadyRef在图形参数处设置引用。对这些参数或相应的数据对象使用其他数据访问API将返回错误。对于graph_parameters_queue_params_list应用程序中未列出的图形参数,必须使用vxSetGraphParameterByIndex设置图形参数处的引用。对这些参数或相应的数据对象使用其他数据访问API将返回错误。
这个API还允许应用程序提供引用列表,这些引用稍后可以在图形参数处排队。这允许实现预先进行元数据检查,而不是在每次引用排队期间进行。
在vxVerifyGraph之前调用此API时,如果引用句柄在应用程序中还不可用,则refs_list字段可以为NULL。但是,refs_list_size必须始终由应用程序指定。在验证图形后,应用程序可以再次调用vxSetGraphScheduleConfig,所有参数保持不变,refs_list字段提供了可以在图形参数处排队的引用列表。
参数
[in]graph-图形引用
[in]graph_schedule_mode—图形计划模式。参见vx_graph_schedule_mode_type_e
[in]graph_parameters_list_size-graph_parameters _queue_params_list中的元素数
[in]graph_parameters_queue_params_list-包含需要支持排队的图形参数处的排队属性的数组。
返回:vx_status_e枚举。
返回值
- VX_SUCCESS - 无错误。
- VX_ERROR_INVALID_REFERENCE - 图形不是有效的引用
- VX_ERROR_INVALID_PARAMETERS - 无效的图形参数排队参数
- VX_FAILURE - 任何其他失败。
vxGraphParameterEnqueueReadyRef
将新引用排队到图形参数中进行处理。
vx_status vxGraphParameterEnqueueReadyRef(
vx_graph graph,
vx_uint32 graph_parameter_index,
vx_reference * refs,
vx_uint32 num_refs);
此新引用将在下一个图表计划中生效。
在图形参数输入到图形的情况下,此函数为图形提供具有新输入数据的数据引用。如果图形参数未输入到图形,此函数将提供一个“空”引用,图形执行可以将新数据写入该引用。
此函数实质上将引用的所有权从应用程序转移到图。
用户必须使用vxGraphParameterDequeueDoneRef获取已处理或已使用的引用。
排队的引用必须是vxSetGraphScheduleConfig期间列出的引用。如果提供了此列表之外的引用,则行为未定义。
参数
[in]graph-图形引用
[in]graph_parameter_index-图形参数索引
[in]refs-要排入图参数的引用数组
[in]num_refs-要入队的引用数
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误。
VX_ERROR_INVALID_REFERENCE-图形不是有效引用或引用不是有效引用
VX_ERROR_INVALID_PARAMETERS-图形参数索引不是有效的图形参数索引
VX_FAILURE-引用无法入队。
vxGraphParameterDequeueDoneRef
从图形参数中取消“已使用”的引用的队列。
vx_status vxGraphParameterDequeueDoneRef(
vx_graph graph,
vx_uint32 graph_parameter_index,
vx_reference * refs,
vx_uint32 max_refs,
vx_uint32 * num_refs);
此函数将引用从图的图参数中移出。出队的引用是先前已排入图中的引用,并且在随后的图执行之后被认为是由图处理或消耗的。此函数实质上将引用的所有权从图转移到应用程序。
重要提示:此API将阻止,直到至少有一个引用退出队列。
在图形参数输入到图形的情况下,此函数为应用程序提供一个“已消耗”的缓冲区,以便新的输入数据可以填充并稍后排入图形。如果图形参数未输入到图形中,此函数将提供一个参考,该参考将基于图形执行填充新数据。然后,用户可以将这些新生成的数据与他们的应用程序一起使用。通常,当应用程序使用此新数据时,“空”引用会再次排入图的队列。
此API返回一个引用数组,最大值为max_refs。应用程序必须确保作为输入传递的数组指针(refs)可以容纳max_refs。num_refs是返回的实际引用数,将小于或等于max_refs。
参数
[in]graph-图形引用
[in]graph_parameter_index-图形参数索引
[in]refs-指向最大元素数组max_refs的指针
[out]refs-数组中已取消排队的引用
[in]max_refs-出列的最大引用数
[out]num_refs-实际出列的引用数。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误。
VX_ERROR_INVALID_REFERENCE-图形不是有效的引用
VX_ERROR_INVALID_PARAMETERS-图形参数索引不是有效的图形参数索引
VX_FAILURE-引用无法出列。
vxGraphParameterCheckDoneRef
检查并返回准备出列的引用数。
笔记
vx_status vxGraphParameterCheckDoneRef(
vx_graph graph,
vx_uint32 graph_parameter_index,
vx_uint32 * num_refs);
此函数检查可以出列的引用数,并将值返回给应用程序。
另请参见vxGraphParameterDequeueDoneRef。
参数
[in]graph-图形引用
[in]graph_parameter_index-图形参数索引
[out]num_refs-可以使用退出队列的引用数
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误。
VX_ERROR_INVALID_REFERENCE-图形不是有效的引用
VX_ERROR_INVALID_PARAMETERS-图形参数索引不是有效的图形参数索引
VX_FAILURE-任何其他故障。
3.2. 流动
功能
vxStartGraphStreaming
vxStopGraphStreaming
本节列出了图形流所需的API。
3.2.1. 功能
vxStartGraphStreaming
启动图形执行的流模式。
vx_status vxStartGraphStreaming(
vx_graph graph);
在图执行的流模式中,一旦应用程序开始图执行,就不需要应用程序的进一步干预来重新调度图;即图重新调度自身并连续执行,直到流式执行模式停止为止。
当调用此API时,框架通过vxScheduleGraph调度图形并返回。此图将连续重新调度,直到用户调用vxStopGraphStreaming或任何图节点在执行过程中返回错误为止。
在调用此API之前,必须通过vxVerifyGraph验证图形。此外,用户应用程序必须确保在调用此API之前不安排图形的先前执行。
启动图形的流模式后,应用程序不应*在该图形上使用以下API:vxScheduleGraph、vxWaitScheduleGraphDone和vxIsScheduleGraphAllowed。
vxWaitGraph可以像以前一样用于等待所有挂起的图形执行完成。
参数
[in]graph-引用图形以启动流式执行模式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
VX_ERROR_INVALID_REFERENCE-图形不是有效的VX_graph引用。
vxStopGraphStreaming
停止图形执行的流模式。
笔记
vx_status vxStopGraphStreaming(
vx_graph graph);
此函数会一直阻塞,直到图形执行在逻辑边界处正常停止,例如,当所有内部调度的图形执行都完成时。
参数
[in]graph-引用图形以停止流式执行模式。
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
VX_FAILURE-图形未在流执行模式下启动。
VX_ERROR_INVALID_REFERENCE-图形不是有效的引用。
3.3. 事件处理
数据结构
vx_event_graph_parameter_consumed
vx_event_graph_completed
vx_event_node_completed
vx_event_user_event
vx_event_t
vx_event_info_t
枚举
功能
本节列出了事件驱动图执行所需的API
3.3.1. 数据结构
vx_event_graph_parameter_consumed
返回的参数结构带有VX_event_GRAPH_Parameter_CONSUMED类型的事件。
_vx_event_graph_parameter_consumed {
vx_graph graph;
vx_uint32 graph_parameter_index;
} vx_event_graph_parameter_consumed;
graph-生成此事件的图形
graph_parameter_index-生成此事件的图形参数索引
vx_event_graph_completed
返回的参数结构带有VX_event_GRAPH_COLLTED类型的事件。
_vx_event_graph_completed {
vx_graph graph;
} vx_event_graph_completed;
graph-生成此事件的图形
vx_event_node_completed
返回的参数结构带有VX_event_NODE_COMPLETED类型的事件。
_vx_event_node_completed {
vx_graph graph;
vx_node node;
} vx_event_node_completed;
graph-生成此事件的图形
node—生成此事件的节点
vx_event_user_event
返回的参数结构带有VX_event_USER_event类型的事件。
_vx_event_user_event {
vx_uint32 user_event_id;
* user_event_parameter;
} vx_event_user_event;
user_event_id-与此事件关联的用户事件id
user_event_parameter—用户定义的参数值。这用于通过用户事件传递其他用户定义的参数。
vx_event_info_t
与事件关联的参数结构。取决于事件的类型。
_vx_event_info_t {
vx_event_graph_parameter_consumed graph_parameter_consumed;
vx_event_graph_completed graph_completed;
vx_event_node_completed node_completed;
vx_event_user_event user_event;
} vx_event_info_t;
graph_parameter_consumed-VX_event_graph_parameter_consumed类型的事件信息
graph_completed-VX_event_graph_completed类型的事件信息
node_completed-VX_event_NOTE_completed类型的事件信息
user_event-VX_event_user类型的事件信息
vx_event_t
保存事件信息的数据结构。
_vx_event_t {
vx_enum type;
vx_uint64 timestamp;
vx_event_info_t event_info;
} vx_event_t;
类型-请参阅事件类型vx_event_type_e
timestamp—生成此事件的时间,单位为纳秒
event_info—与事件相关联的参数结构。取决于事件的类型
3.3.2. 枚举
vx_event_enum_e
额外枚举。
enum vx_event_enum_e {
VX_ENUM_EVENT_TYPE =
,
};
枚举器
VX_ENUM_EVENT_TYPE-事件类型枚举。
vx_event_type_e
可以在系统执行期间生成的事件的类型。
enum vx_event_type_e {
VX_EVENT_GRAPH_PARAMETER_CONSUMED = ((( VX_ID_KHRONOS ) <<
) | ( VX_ENUM_EVENT_TYPE <<
)) +
,
VX_EVENT_GRAPH_COMPLETED = ((( VX_ID_KHRONOS ) <<
) | ( VX_ENUM_EVENT_TYPE <<
)) +
,
VX_EVENT_NODE_COMPLETED = ((( VX_ID_KHRONOS ) <<
) | ( VX_ENUM_EVENT_TYPE <<
)) +
,
VX_EVENT_USER = ((( VX_ID_KHRONOS ) <<
) | ( VX_ENUM_EVENT_TYPE <<
)) +
,
};
枚举器
VX_EVENT_GRAPH_PARAMETER_CONSUMED-图形参数消耗事件。
此事件是在图形执行过程中消耗图形参数处的数据引用时生成的。它用于指示给定的数据引用不再被图使用,并且可以被应用程序出列和访问。
笔记
对于不使用此数据引用的图的其余部分,图执行可能仍在“进行中”。
VX_EVENT_GRAPH_COCOMPLETED-图形完成事件。
每次图形执行完成时都会生成此事件。图形完成事件是为成功执行图形或放弃执行图形而生成的。
VX_EVENT_NOTE_COMPLETED-节点完成事件。
每当图中的节点完成执行时,都会生成此事件。
VX_EVENT_USER-用户定义的事件。
此事件由OpenVX框架之外的用户应用程序使用vxSendUserEvent API生成。用户事件允许应用程序有一个集中的“等待”循环来处理框架生成的事件和用户生成的事件。
3.3.3. 功能
vxWaitEvent
等待单个事件。
vx_status vxWaitEvent(
vx_context context,
vx_event_t * event,
vx_bool do_not_block);
调用vxDisableEvents后,如果调用vxWaitEvent(.., .., vx_false_e),则vxWaitEvents将保持阻止状态,直到使用vxEnableEvents重新启用事件并接收到新事件为止。
如果在vxWaitEvent上阻止应用程序时调用vxReleaseContext,则OpenVX不会定义该行为。
如果从多个线程/任务上下文同时调用vxWaitEvent,则OpenVX不会定义其行为。
参数
[in]上下文-OpenVX上下文
[out]event-保存接收到的事件信息的数据结构
[in]do_not_block-当值为vx_true_e时,API不阻止,只检查条件
返回:vx_status_e枚举。
返回值
VX_SUCCESS-接收到的事件和事件中可用的事件信息
VX_FAILURE-未接收到任何事件
vxEnableEvents
启用事件生成。
vx_status vxEnableEvents(
vx_context context);
参数
[in]上下文-OpenVX上下文
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
vxDisableEvents
禁用事件生成。
vx_status vxDisableEvents(
vx_context context);
禁用事件时,调用此API之前生成的任何事件仍将通过vxWaitEvent API返回。但是,在事件再次启用之前,不会通过vxWaitEvent API返回其他事件。
参数
[in]上下文-OpenVX上下文
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
vxSendUserEvent
生成用户定义的事件。
vx_status vxSendUserEvent(
vx_context context,
vx_uint32 id,
* parameter);
参数
[in]上下文-OpenVX上下文
[in]user_event_id-用户定义的事件id
[in]user_event_parameter—用户定义的事件参数。未被实施使用。作为部件vx_event_t.user_event_parameter字段返回给用户
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
vxRegisterEvent
注册要生成的事件。
vx_status vxRegisterEvent(
vx_reference ref,
vx_event_type_e type,
vx_uint32 param);
事件的生成可能需要额外的资源和实现开销。因此,只有当应用程序真正需要时,才应该为引用注册事件。
此API可以在图形、节点或图形参数上调用。在为该图形执行vxVerifyGraph之前,必须调用此API。
参数
[in]ref-将生成事件的引用
[in]type-生成事件的类型或条件
[in]param-当类型为VX_EVENT_graph_parameter_CONSUMED时指定图形参数索引
返回:vx_status_e枚举。
返回值
VX_SUCCESS-无错误;任何其他值表示失败。
VX_ERROR_INVALID_REFERENCE-ref不是有效的VX_REFERENCE引用。
VX_ERROR_NOT_SUPPORTED-类型对提供的引用无效。
参考文献链接
https://registry.khronos.org/OpenVX/extensions/vx_khr_pipelining/1.0.1/vx_khr_pipelining_1_0_1.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-06-16 EDA技术杂谈
2021-06-16 薄膜产品技术亮点
2021-06-16 点云与高精地图
2020-06-16 人工智能AI智能加速卡技术
2020-06-16 神经网络AI加速器技术
2020-06-16 OpenCV读写视频文件解析(二)
2020-06-16 OpenCV读写图像文件解析