识别器件并加载程序后,该软件应用应识别在器件上执行的内核,并设置内核实参。在已加载的 .xclbin
文件中定义了与软件应用交互的所有内核,因此应根据其中定义来识别这些内核。
对于 XRT 管理的内核,XRT API 提供了内核类 (xrt::kernel
),用于访问 .xclbin 文件中包含的内核。内核对象会识别 XRT 管理的内核,这些内核已加载到 AMD 器件内的 .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()
。
注释: 标量实参不需要缓冲器。