PS 主机应用编程 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

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

创建数据流 graph(包含内核) 中,主要围绕非常简单的 AI 引擎 graph 应用进行了探讨。其中通过顶层应用来对 graph 进行了初始化、运行和终止。但对于实际 AI 引擎 graph 应用,主机代码所做的远不止于这些简单的任务。 Cortex®-A72 上运行的顶层 PS 应用能够控制 graph 和 PL 内核:管理 graph 的数据输入、处理 graph 的数据输出以及控制搭配 graph 工作的任何 PL 内核。

此外,AI 引擎 graph 应用可在 Linux 操作系统或裸机系统上运行。这两种系统中的编程要求存在显著差异,如下列主题中所述。赛灵思提供的驱动程序可供主机程序中的 API 调用用于基于操作系统来控制 graph 和 PL 内核。在 Linux 中,这是由 libadf_api_xrt 库提供的,在裸机中,AI 引擎内核是使用 graph API 来控制的,PL 内核则是使用 libUIO 驱动程序调用来控制的。

防止执行多个 graph

如果您的 graph 是在基于 PS 的主机应用中实现的,那么您必须为自己的 graph.cpp 代码定义有条件的编译指示 (#ifdef),以确保 graph 仅初始化一次或者仅运行一次。以下代码示例是 创建数据流 graph(包含内核) 中定义的简单应用,其中具有额外的守卫宏 (guard macro) __AIESIM____X86SIM__

#include "project.h"

simpleGraph mygraph;


#if defined(__AIESIM__) || defined(__X86SIM__)

int main(void) {
  mygraph.init();
  mygraph.run(<number_of_iterations>);
  mygraph.end();
  return 0;
}
#endif

此有条件指令将该应用编译为仅供 AI 引擎仿真器使用。它会阻止从 graph 和 PS 主机应用多次初始化或多次运行该 graph。该指令允许在系统设计的仿真或硬件仿真中运行 graph.cpp,使其同样可在 AI 引擎仿真器和 x86 仿真器中运行。但在硬件中运行时,会从 PS 应用而不是 graph.cpp 来初始化和运行此 graph。