Host Programming - 2022.1 English

Vitis Unified Software Platform Documentation: Application Acceleration Development (UG1393)

Document ID
Release Date
2022.1 English

In the Vitis™ environment, the host application can be written in native C++ using the Xilinx® runtime (XRT) native C++ API or industry standard OpenCL™ API. The XRT native API is described here in brief, with additional details available under XRT Native API on the XRT documentation site. Refer to OpenCL Programming for a discussion on writing the host application using the OpenCL API.

Tip: For examples of host programming using the XRT native API refer to host_xrt in the Vitis_Accel_Examples.

In general, the structure of the host application can be divided into the following steps:

  1. Specifying the accelerator device ID and loading the .xclbin.
  2. Setting up the kernel and kernel arguments.
  3. Transferring data between the host and kernels.
  4. Running the kernel and returning results.
To use the native XRT APIs, the host application must link with the xrt_coreutil library. For example:
g++ -g -std=c++14 -I$XILINX_XRT/include -L$XILINX_XRT/lib -lxrt_coreutil -pthread

Compiling host code with XRT native C++ API requires C++ standard with -std=c++14. On GCC version older than 4.9.0, use -std=c++1y instead because -std=c++14 is introduced to GCC from 4.9.0.

Important: For multithreading the host program, exercise caution when calling a fork() system call from a Vitis core development kit application. The fork() does not duplicate all the runtime threads. Hence, the child process cannot run as a complete application in the Vitis core development kit. It is advisable to use the posix_spawn() system call to launch another process from the Vitis software platform application.