自由运行的 AI 引擎内核 - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文

使用 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) 启动,或者也可以在加载后自动启动。