Execution Path of Graph.

I read in one post that openvx will choose the best target available to execute each node of graph.Does it mean that once the graph is ready, OpenVX will check the best target for each node? Say I have cpu and a gpu,some node will run efficiently in cpu,some in gpu,Does openvx will find the execution path(eg. node1 in cpu,node2 in gpu etc.)based on per node basis or will it find the execution path for the entire graph,keeping the cpu <-> gpu data transfer time into consideration.

When an application creates an OpenVX graph, it provides all information the OpenVX implementation needs to perform the kind of optimization you mention. In particular, since the graph provides ahead-of-time the dataflow relationships between nodes, the OpenVX graph manager may perform a global scheduling that takes into account the data transfers time for a heterogeneous architecture. But if the OpenVX API gives all these optimization opportunities, the optimization choice stays in the hands of the OpenVX implementation and different implementations may optimize differently.

I have one more query.Does openvx utilize all the available resources. Eg. in case of data parallel operation, does a node run on more than just one target in parallel by dividing the data efficiently across different targets or it runs one among the all available targets?

Any particular architecture/algorithm combination may have different optimization strategies. Sometimes splitting a node across all or some targets approach is faster, sometimes it isn’t. This API is not about making each particular node faster, but instead, making the entire graph faster. There might be a tradeoffs that the vendor may make to allow an overall fast compute for the graph, but a specific node isn’t done as fast as possible. There’s lots of considerations here that the vendor has to balance (other operations, clock speeds, power, bus bandwidth, etc) but the vendor has access to all this information for their platform.

Thanks for the information.