以下计算图控制 API 显示了如何使用计算图 API 来初始化、运行、等待和终止计算图并进行指定次数的迭代。计算图对象 mygraph
是使用名为 simpleGraph
的预定义计算图类来声明的。随后,在 main
应用中,即可初始化并运行此计算图对象。init()
方法用于将计算图加载到位于预先指定的 AI 引擎 tile(拼块)处的 AI 引擎阵列中。这包括为每个 AI 引擎加载 ELF 二进制文件、配置串流开关用于布线,以及配置 DMA 用于 I/O。它将处理器保留处于禁用状态。run()
方法通过启用处理器来启动计算图执行。计算图可通过 run
API 在运行时提供正整数实参来执行指定次数的迭代。这种形式对于计算图执行的调试很有用。
#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
相同的阻塞效果,但前者允许重新运行计算图,而无需对其进行重新初始化。如果连续调用 run
且中间不插入 wait
来完成运行,则可能导致不可预测的效果,因为 run
API 会修改计算图的活动处理器的循环边界。
计算图迭代
每个计算图均可包含多个内核、输入端口和输出端口。所谓计算图的连接,指的是在内核之间、内核与输入端口之间或者内核与输出端口之间的连接(等同于数据流计算图中的信号线),并且可作为连接来加以配置。如果计算图所耗用的数据样本数量与计算图中内核所期望的数据缓冲器或数据串流相等,并且所生成的数据样本数量与计算图中所有内核的输出时所期望的数据缓冲器或数据串流相同,即表示计算图完成一轮迭代运行。