CoreFlow 1.0.0
A modern orchestration and execution runtime
Loading...
Searching...
No Matches
Extension: Pipelining and Batch Processing API

The Pipelining and Batch Processing Extension. More...

Classes

struct  vx_graph_parameter_queue_params_t
 Queueing parameters for a specific graph parameter. More...
 

Macros

#define VX_LIBRARY_KHR_PIPELINING_EXTENSION   (0x1)
 The Pipelining, Streaming and Batch Processing Extension Library Set.
 

Enumerations

enum  vx_graph_schedule_mode_enum_e { VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE = 0x21 }
 Extra enums. More...
 
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
}
 Type of graph scheduling mode. More...
 
enum  vx_graph_attribute_pipelining_e { VX_GRAPH_SCHEDULE_MODE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_GRAPH) + 0x5 }
 The graph attributes added by this extension. More...
 

Functions

VX_API_ENTRY vx_status VX_API_CALL vxSetGraphScheduleConfig (vx_graph graph, vx_enum graph_schedule_mode, vx_uint32 graph_parameters_list_size, const vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[])
 Sets the graph scheduler config.
 
VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterEnqueueReadyRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_reference *refs, vx_uint32 num_refs)
 Enqueues new references into a graph parameter for processing.
 
VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterDequeueDoneRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_reference *refs, vx_uint32 max_refs, vx_uint32 *num_refs)
 Dequeues 'consumed' references from a graph parameter.
 
VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterCheckDoneRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_uint32 *num_refs)
 Checks and returns the number of references that are ready for dequeue.
 

Detailed Description

The Pipelining and Batch Processing Extension.

Macro Definition Documentation

◆ VX_LIBRARY_KHR_PIPELINING_EXTENSION

#define VX_LIBRARY_KHR_PIPELINING_EXTENSION   (0x1)

#include <vx_khr_pipelining.h>

The Pipelining, Streaming and Batch Processing Extension Library Set.

Enumeration Type Documentation

◆ vx_graph_attribute_pipelining_e

#include <vx_khr_pipelining.h>

The graph attributes added by this extension.

Enumerator
VX_GRAPH_SCHEDULE_MODE 

Returns the schedule mode of a graph. Read-only. Use a vx_enum parameter. See vx_graph_schedule_mode_type_e enum.

◆ vx_graph_schedule_mode_enum_e

#include <vx_khr_pipelining.h>

Extra enums.

Enumerator
VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE 

Graph schedule mode type enumeration.

◆ vx_graph_schedule_mode_type_e

#include <vx_khr_pipelining.h>

Type of graph scheduling mode.

See vxSetGraphScheduleConfig and vxGraphParameterEnqueueReadyRef for details about each mode.

Enumerator
VX_GRAPH_SCHEDULE_MODE_NORMAL 

Schedule graph in non-queueing mode.

VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO 

Schedule graph in queueing mode with auto scheduling.

VX_GRAPH_SCHEDULE_MODE_QUEUE_MANUAL 

Schedule graph in queueing mode with manual scheduling.

Function Documentation

◆ vxGraphParameterCheckDoneRef()

VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterCheckDoneRef ( vx_graph graph,
vx_uint32 graph_parameter_index,
vx_uint32 * num_refs )

#include <vx_khr_pipelining.h>

Checks and returns the number of references that are ready for dequeue.

This function checks the number of references that can be dequeued and returns the value to the application.

See also vxGraphParameterDequeueDoneRef.

Parameters
[in]graphGraph reference
[in]graph_parameter_indexGraph parameter index
[out]num_refsNumber of references that can be dequeued using vxGraphParameterDequeueDoneRef
Returns
A vx_status_e enumeration.
Return values
VX_SUCCESSNo errors.
VX_ERROR_INVALID_REFERENCEgraph is not a valid reference
VX_ERROR_INVALID_PARAMETERSgraph_parameter_index is NOT a valid graph parameter index
VX_FAILUREAny other failure.

◆ vxGraphParameterDequeueDoneRef()

VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterDequeueDoneRef ( vx_graph graph,
vx_uint32 graph_parameter_index,
vx_reference * refs,
vx_uint32 max_refs,
vx_uint32 * num_refs )

#include <vx_khr_pipelining.h>

Dequeues 'consumed' references from a graph parameter.

This function dequeues references from a graph parameter of a graph. The reference that is dequeued is a reference that had been previously enqueued into a graph, and after subsequent graph execution is considered as processed or consumed by the graph. This function essentially transfers ownership of the reference from the graph to the application.

IMPORTANT : This API will block until at least one reference is dequeued.

In case of a graph parameter which is input to a graph, this function provides a 'consumed' buffer to the application so that new input data can filled and later enqueued to the graph. In case of a graph parameter which is not input to a graph, this function provides a reference filled with new data based on graph execution. User can then use this newly generated data with their application. Typically when this new data is consumed by the application the 'empty' reference is again enqueued to the graph.

This API returns an array of references up to a maximum of 'max_refs'. Application MUST ensure the array pointer ('refs') passed as input can hold 'max_refs'. 'num_refs' is actual number of references returned and will be <= 'max_refs'.

Parameters
[in]graphGraph reference
[in]graph_parameter_indexGraph parameter index
[out]refsDequeued references filled in the array
[in]max_refsMax number of references to dequeue
[out]num_refsActual number of references dequeued.
Returns
A vx_status_e enumeration.
Return values
VX_SUCCESSNo errors.
VX_ERROR_INVALID_REFERENCEgraph is not a valid reference
VX_ERROR_INVALID_PARAMETERSgraph_parameter_index is NOT a valid graph parameter index
VX_FAILUREReference could not be dequeued.

◆ vxGraphParameterEnqueueReadyRef()

VX_API_ENTRY vx_status VX_API_CALL vxGraphParameterEnqueueReadyRef ( vx_graph graph,
vx_uint32 graph_parameter_index,
vx_reference * refs,
vx_uint32 num_refs )

#include <vx_khr_pipelining.h>

Enqueues new references into a graph parameter for processing.

This new reference will take effect on the next graph schedule.

In case of a graph parameter which is input to a graph, this function provides a data reference with new input data to the graph. In case of a graph parameter which is not input to a graph, this function provides a 'empty' reference into which a graph execution can write new data into.

This function essentially transfers ownership of the reference from the application to the graph.

User MUST use vxGraphParameterDequeueDoneRef to get back the processed or consumed references.

The references that are enqueued MUST be the references listed during vxSetGraphScheduleConfig. If a reference outside this list is provided then behaviour is undefined.

Parameters
[in]graphGraph reference
[in]graph_parameter_indexGraph parameter index
[in]refsThe array of references to enqueue into the graph parameter
[in]num_refsNumber of references to enqueue
Returns
A vx_status_e enumeration.
Return values
VX_SUCCESSNo errors.
VX_ERROR_INVALID_REFERENCEgraph is not a valid reference OR reference is not a valid reference
VX_ERROR_INVALID_PARAMETERSgraph_parameter_index is NOT a valid graph parameter index
VX_FAILUREReference could not be enqueued.

◆ vxSetGraphScheduleConfig()

VX_API_ENTRY vx_status VX_API_CALL vxSetGraphScheduleConfig ( vx_graph graph,
vx_enum graph_schedule_mode,
vx_uint32 graph_parameters_list_size,
const vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[] )

#include <vx_khr_pipelining.h>

Sets the graph scheduler config.

This API is used to set the graph scheduler config to allow user to schedule multiple instances of a graph for execution.

For legacy applications that don't need graph pipelining or batch processing, this API need not be used.

Using this API, the application specifies the graph schedule mode, as well as queueing parameters for all graph parameters that need to allow enqueueing of references. A single monolithic API is provided instead of discrete APIs, since this allows the implementation to get all information related to scheduling in one shot and then optimize the subsequent graph scheduling based on this information. This API MUST be called before graph verify since in this case it allows implementations the opportunity to optimize resources based on information provided by the application.

'graph_schedule_mode' selects how input and output references are provided to a graph and how the next graph schedule is triggered by an implementation.

Below scheduling modes are supported:

When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO:

  • Application needs to explicitly call vxVerifyGraph before enqueing data references
  • Application should not call vxScheduleGraph or vxProcessGraph
  • When enough references are enqueued at various graph parameters, the implementation could trigger the next graph schedule.
  • Here, not all graph parameters need to have enqueued references for a graph schedule to begin. An implementation is expected to execute the graph as much as possible until a enqueued reference is not available at which time it will stall the graph until the reference becomes available. This allows application to schedule a graph even when all parameters references are not yet available, i.e do a 'late' enqueue. However, exact behaviour is implementation specific.

When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_QUEUE_MANUAL:

When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_NORMAL:

  • 'graph_parameters_list_size' MUST be 0 and
  • 'graph_parameters_queue_params_list' MUST be NULL
  • This mode is equivalent to non-queueing scheduling mode as defined by OpenVX v1.2 and earlier.

By default all graphs are in VX_GRAPH_SCHEDULE_MODE_NORMAL mode until this API is called.

'graph_parameters_queue_params_list' allows to specify below information:

  • For the graph parameter index that is specified, it enables queueing mode of operation
  • Further it allows the application to specify the list of references that it could later enqueue at this graph parameter.

For graph parameters listed in 'graph_parameters_queue_params_list', application MUST use vxGraphParameterEnqueueReadyRef to set references at the graph parameter. Using other data access API's on these parameters or corresponding data objects will return an error. For graph parameters not listed in 'graph_parameters_queue_params_list' application MUST use the vxSetGraphParameterByIndex to set the reference at the graph parameter. Using other data access API's on these parameters or corresponding data objects will return an error.

This API also allows application to provide a list of references which could be later enqueued at the graph parameter. This allows implementation to do meta-data checking up front rather than during each reference enqueue.

When this API is called before vxVerifyGraph, the 'refs_list' field can be NULL, if the reference handles are not available yet at the application. However 'refs_list_size' MUST always be specified by the application. Application can call vxSetGraphScheduleConfig again after verify graph with all parameters remaining the same except with 'refs_list' field providing the list of references that can be enqueued at the graph parameter.

Parameters
[in]graphGraph reference
[in]graph_schedule_modeGraph schedule mode. See vx_graph_schedule_mode_type_e
[in]graph_parameters_list_sizeNumber of elements in graph_parameters_queue_params_list
[in]graph_parameters_queue_params_listArray containing queuing properties at graph parameters that need to support queueing.
Returns
A vx_status_e enumeration.
Return values
VX_SUCCESSNo errors.
VX_ERROR_INVALID_REFERENCEgraph is not a valid reference
VX_ERROR_INVALID_PARAMETERSInvalid graph parameter queueing parameters
VX_FAILUREAny other failure.