Vitis AI provides a C++ DpuRunner class with the following interfaces:
std::pair<uint32_t, int> execute_async(
const std::vector<TensorBuffer*>& input,
const std::vector<TensorBuffer*>& output);
Note: For historical
reasons, this function is actually a blocking function, not an asynchronous non-blocking
function.
- Submit input tensors for execution and output tensors to store
results. The host pointer is passed using the TensorBuffer object. This function
returns a job ID and the status of the function
call.
int wait(int jobid, int timeout);
The job ID returned by execute_async is passed to
wait()
to block until the job is complete and the results are ready.TensorFormat get_tensor_format()
- Query the DpuRunner for the tensor format it expects.
Returns DpuRunner::TensorFormat::NCHW or DpuRunner::TensorFormat::NHWC
std::vector<Tensor*> get_input_tensors()
- Query the DpuRunner for the shape and name of the output tensors it
expects for its loaded Vitis AI
model.
std::vector<Tensor*> get_output_tensors()
- To create a DpuRunner object call the
following:
create_runner(const xir::Subgraph* subgraph, const std::string& mode = "")
It returns the following:
std::unique_ptr<Runner>
The input to create_runner is a XIR subgraph generated by the Vitis AI compiler.
Tip: To enable
multi-threading with VART, create a runner for each thread.