设置 XRT 管理的内核与内核实参 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

识别器件并加载程序后,该软件应用应识别在器件上执行的内核,并设置内核实参。在已加载的 .xclbin 文件中定义了与软件应用交互的所有内核,因此应根据其中定义来识别这些内核。

对于 XRT 管理的内核,XRT API 提供了内核类 (xrt::kernel),用于访问 .xclbin 文件中包含的内核。内核对象会识别 XRT 管理的内核,这些内核已加载到 AMD 器件内的 .xclbin 文件中并且可供主机应用运行。

提示:使用用户管理的内核 中所述,您应使用 IP 类 (xrt::ip) 来识别 .xclbin 文件中的用户管理的内核。

使用内核和缓冲器对象需要在源代码中添加以下 include 语句:

#include <xrt/xrt_kernel.h>
#include <xrt/xrt_bo.h>

以下代码示例用于识别已加载到 device 上的程序 (uuid) 中定义的内核 ("vadd"):

auto krnl = xrt::kernel(device, uuid, "vadd");
提示: 您可使用 xclbinutil 命令来检验现有 .xclbin 文件的内容,并确定其中包含的内核。
识别内核或者要运行的内核后,您需要定义缓冲器对象以与内核实参关联,并启用从主机应用到内核实例或计算单元 (CU) 的数据传输:
std::cout << "Allocate Buffer in Global Memory\n";
auto bo0 = xrt::bo(device, vector_size_bytes, krnl.group_id(0));
auto bo1 = xrt::bo(device, vector_size_bytes, krnl.group_id(1));
auto bo_out = xrt::bo(device, vector_size_bytes, krnl.group_id(2));

内核对象 (xrt::kernel) 包含了返回与每个内核实参关联的存储器的方法,即 kernel.group_id()

注释: 标量实参不需要缓冲器。