ADF API 用于控制顶层应用或主机代码中的 graph 执行,如 AI 引擎编程简介 中所述。例如,以下代码对用于 graph 中的 AI 引擎内核运行时参数进行同步更新:
// ADF API:run and update graph parameters (RTP)
gr.run(4);
gr.update(gr.trigger,10);
gr.update(gr.trigger,10);
gr.update(gr.trigger,100);
gr.update(gr.trigger,100);
gr.end();
提示: 使用
graph.end()
会终止此 graph。调用 end()
后,此 graph 无法恢复。在主机应用 (host.cpp) 中,通过调用 graph.update()
函数即可更新 RTP,调用 graph.run()
即可在 graph 中启动 AI 引擎内核。在硬件仿真流程和硬件流程中,ADF API 会调用 XRT API,而 adf::registerXRT()
则用于管理两者之间的关系。
重要: 必须先调用
adf::registerXRT()
,然后才能调用任何 ADF API 控制 graph 或者与 graph 交互。以下代码示例显示的是 RTP 更新以及 ADF API 的执行过程。
// update graph parameters (RTP) & run
adf::registerXRT(dhdl, uuid);
gr.update(gr.size, 1024);//update RTP
gr.run(16);//start AIE kernel
gr.wait();
在前述示例中,gr.run(16)
指定运行 16 次迭代。
在 graph.wait()
中,应用会等待 AI 引擎内核完成。
此代码示例显示 adf::registerXRT()
需要 XCLBIN 镜像的器件句柄 (dhdl
) 和 UUID
。这些均可使用 XRT API 来获取:
auto dhdl = xrtDeviceOpen(0);//device index=0
xrtDeviceLoadXclbinFile(dhdl,xclbinFilename);
xuid_t uuid;
xrtDeviceGetXclbinUUID(dhdl, uuid);