基本迭代 graph 执行 - 2022.1 简体中文

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

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

以下 graph 控制 API 显示了如何使用 graph API 来初始化、运行、等待和终止 graph 并进行指定次数的迭代。graph 对象 mygraph 是使用名为 simpleGraph 的预定义 graph 类来声明的。随后,在 main 应用中,即可初始化并运行此 graph 对象。init() 方法用于将 graph 加载到位于预先指定的 AI 引擎 tile(拼块)处的 AI 引擎阵列中。这包括为每个 AI 引擎加载 ELF 二进制文件、配置串流交换机用于布线,以及配置 DMA 用于 I/O。它将处理器保留处于禁用状态。run() 方法通过启用处理器来启动 graph 执行。graph 可通过 run API 在运行时提供正整数实参来执行指定次数的迭代。这种形式对于 graph 执行的调试很有用。

#include "project.h" 
simpleGraph mygraph; 

int main(void) { 
  mygraph.init(); 
  mygraph.run(3); // run 3 iterations 
  mygraph.wait(); // wait for 3 iterations to finish 
  mygraph.run(10); // run 10 iterations 
  mygraph.end(); // wait for 10 iterations to finish 
  return 0; 
}

API wait() 用于等待首次运行完成,而后再开始第二次运行。wait 具有与 end 相同的阻塞效果,但前者允许重新运行 graph,而无需对其进行重新初始化。如果连续调用 run 且中间不插入 wait 来完成运行,则可能导致不可预测的效果,因为 run API 会修改 graph 的活动处理器的循环边界。

graph 迭代

每个 graph 均可包含多个内核、输入端口和输出端口。所谓 graph 的连接,指的是在内核之间、内核与输入端口之间或者内核与输出端口之间的连接(等同于数据流 graph 中的信号线),并且可作为连接来加以配置。如果 graph 所耗用的数据样本数量与 graph 中内核所期望的数据窗口或数据串流相等,并且所生成的数据样本数量与 graph 中所有内核的输出时所期望的数据窗口或数据串流相同,即表示 graph 完成一轮迭代运行。