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

AI 引擎内核编码 最佳实践指南 (UG1079)

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

AI 引擎内核可使用 graph::run(-1) 来始终保持运行。这样在最后一次迭代后,内核将自动重新启动。

注释: 无实参的 graph::run() 会按先前指定的迭代次数来运行 AI 引擎内核,在无任何实参的前提下运行 graph 时,默认迭代次数无限。如果 graph 按有限次数的迭代来运行,例如,mygraph.run(3); mygraph.run();,那么第二轮调用也会运行 3 次迭代。

但它要求输入缓冲器和输出缓冲器全部就绪之后才能开始。因此,在内核执行迭代之间存在少量开销。本节描述的方法可用于构造一种具有零开销且永续运行的内核。它称为自由运行的 AI 引擎内核。

自由运行的内核只能包含串流接口。含无限迭代的循环可位于内核内部。例如:

void free_running_aie(input_stream_cint16 * in, 
			output_stream_cint16 * out) {
	while(true){ //This can be syntax supported by C++, for example: for(;;)
		writeincr(out, readincr(in));
	}
}

自由运行的内核必须定义其自己的 graph。此 graph 不得包含任何其它非自由运行内核,因为此 graph 永不停止,但非自由运行的内核将在启动后失去控制。包含自由运行的内核的 graph 必须为顶层 graph,可以连接到其它 graph,或者可以连接到 PLIO 或 GMIO。以下显示了自由运行的 graph 与其它 graph 之间的连接样本。

simpleGraph mygraph; //normal graph
freeGraph mygraph_free; //graph with free running kernel
simulation::platform<1,1> platform("data/input.txt", "data/output.txt");
connect<> net0(platform.src[0], mygraph.in);
connect<> net1(mygraph.sout,mygraph_free.in);
connect<> net2(mygraph_free.out,mygraph.sin);
connect<> net3(mygraph.out, platform.sink[0]);
图 1. 自由运行的 graph 连接

自由运行的 graph 可使用 mygraph_free.run(-1) 启动,或者也可以在加载后自动启动。