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

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

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

对于 XRT 管理的内核,XRT API 提供了内核类 (xrt::kernel),用于访问 .xclbin 文件中包含的内核。内核对象会识别 XRT 管理的内核,这些内核已加载到赛灵思器件内的 .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()。由于针对标量实参并未创建缓冲器,因此您将向每个内核缓冲器实参分配一个缓冲器对象。