Programming with VART - 1.3 English

Vitis AI User Guide (UG1414)

Document ID
UG1414
Release Date
2021-02-03
Version
1.3 English

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.
  1. 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()
  2. Query the DpuRunner for the tensor format it expects.

    Returns DpuRunner::TensorFormat::NCHW or DpuRunner::TensorFormat::NHWC

    std::vector<Tensor*> get_input_tensors()
  3. 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()
  4. 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.