使用 graph::run(-1)
即可使 AI 引擎内核连续运行。这样在最后一次迭代后,内核将自动重新启动。
注释: 无实参的
graph::run()
会按先前指定的迭代次数来运行 AI 引擎内核,在无任何实参的前提下运行计算图时,默认迭代次数无限。如果计算图按有限次数的迭代来运行,例如,mygraph.run(3); mygraph.run();
,那么第二轮调用也会运行 3 次迭代。但它要求输入缓冲器和输出缓冲器全部就绪之后才能开始。因此,在内核执行迭代之间存在少量开销。本节描述的方法可用于构造一种具有零开销且永续运行的内核。它称为自由运行的 AI 引擎内核。
该自由运行的内核只能包含串流接口。含无限迭代的循环可位于内核内部。例如:
void free_running_aie(input_stream<int32> *in, output_stream<int32> *out) {
while(true){//for(;;) is acceptable for C++
int32 tmp=readincr(in);
chess_separator_scheduler();//make sure stream is flushed
writeincr(out,tmp+1);
chess_separator_scheduler();//make sure stream is flushed
}
}
自由运行的内核必须定义其自己的计算图。此计算图不得包含任何其他非自由运行内核,因为此计算图永不停止,但非自由运行的内核将在启动后失去控制。包含自由运行的内核的计算图必须为顶层计算图,可以连接到其他计算图,或者可以连接到 PLIO 或 GMIO。以下显示了自由运行的计算图与其他计算图之间的连接样本。
passingGraph mygraph;
freeGraph mygraph_free;
connect<> net0(mygraph.out1,mygraph_free.in);
connect<> net1(mygraph_free.out,mygraph.in2);
图 1. 自由运行的计算图连接
自由运行的计算图可使用 mygraph_free.run(-1)
启动,或者也可以在加载后自动启动。