Is Runtime scheduling to different Hardware possible using OpenVx ?

Hi Sir, Madam,

I have a system which has ISP,GPU and DSP . I have a graph with nodes A->B->C . My requirement is to have runtime scheduling for this grapth for every frame across different targets based on the load . For example

Frame0 : A-> ISP , B-> GPU, C->DSP
Frame1 : A-> GPU, B-> ISP, C->DSP
Frame2 : A-> DSP , B-> ISP, C->GPU

… and so on

I would like to know whether is there any option in the OpenVx framework for this run time scheduling. i.e for every frame , whether the framework intelligently schedules the nodes to the HW based on the load usage of it. I understand that there is a Pipelining extention newly introduced(https://www.khronos.org/registry/OpenVX/extensions/vx_khr_pipelining/OpenVX_Graph_Pipelining_Streaming_and_Batch_Processing_Extension_1_0.pdf) But does not talk about the run time scheduling of the load to differnt hardwares based on the load.

Can you please help ?

Thanks,
Vinith

Vinith,

The OpenVX Pipelining extension specifies the way the user can schedule a graph for each new frame before the completion of previously scheduled frames. How the implementation maps the nodes in the graph is implementation dependent. Your example assumes that at least node A is implemented on the ISP, GPU, and DSP. If this is true in the implementation, then the user can say which node should execute on which core by using the vxSetNodeTarget API, but this is if the user wants to execute that node for a specific target for every instance of the graph execution. If the user does not specify the node target, then this gives the implementation the freedom to schedule a node to whatever target it wants to. Some implementations may have some default static assignment (assuming the user can set the static schedule if they want something different), while other implementation may implement the kind of load balancing scheme you specified. Finally, some other implementations may choose something in between. The API doesn’t restrict this and leaves the decision to the implementation. To know if the implementation supports this kind of automatic load balancing/scheduling, you would need to check with the vendor of your OpenVX implementation.

Best Regards,
Jesse

Hi Vinith,

Like Jesse mentioned, an implementation can take care of using its compute resources efficiently when pipelining extension is used. It may or may not use same target for every frame.

That said, I’ve a question about the example you used.

Frame0 : A->ISP, B->GPU, C->DSP
Frame1 : A->GPU, B->ISP, C->DSP
Frame2 : A->DSP, B->ISP, C->GPU

Are you thinking of explicitly specifying targets for every frame? The only available API for specifying targets is vxSetNodeTarget() and it has to be called before vxVerifyGraph(), but not between two runs of a graph.

Best,
Radha