链接多个子计算图 - 2023.2 简体中文

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

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

您可链接多个子计算图以创建更大的测试或应用计算图。您可将计算图作为独立于 I/O 的实体来创建,并将这些计算图嵌入其他包含必要的 PLIO 和 GMIO 定义的计算图,以将该计算图连接到外部。这样您即可对自己的计算图进行单独测试,并将其连接到其他计算图以构建更大的应用。

此方法的优势在于您无需知晓子计算图内缓冲器的大小或连接的类型。这样您即可独立开发计算图和计算图中的内核。编译较大的测试或应用计算图时,编译器将以必要的硬件中介层来自动调整各种 I/O 端口类型。例如,只要在测试计算图中指定连接语句,以将计算图的串流 PLIO 输入连接到另一个计算图的缓冲器输入,编译器就会把其中一个计算图的串流 PLIO 输出端口自动连接到另一个计算图的缓冲器输入端口。

class TestMoreComplexGraph: public adf::graph {
public:
  adf::input_plio plin;
  adf::output_plio plout;

  SplitGraph AddedGraph;
  MergeGraph AnotherGraph;
  SimplestGraph Simple;

  TestMoreComplexGraph()
  {
    plin = adf::input_plio::create("input2",adf::plio_64_bits,"data/Input_64.txt",500);
    adf::connect(plin.out[0],AddedGraph.din);

    adf::connect(AddedGraph.dout[0],Simple.din);
    adf::connect(Simple.dout,AnotherGraph.din[0]);
    adf::connect(AddedGraph.dout[1],AnotherGraph.din[1]);

    plout = adf::output_plio::create("output2",adf::plio_64_bits,"data/Output2.txt",500);
    adf::connect(AnotherGraph.dout,plout.in[0]);
  };
};
TestMoreComplexGraph MoreComplexUnitTest;

int main(int argc, char ** argv) {

  MoreComplexUnitTest.init();
  MoreComplexUnitTest.run(NFRAMES*NITERATIONS);
  MoreComplexUnitTest.end();
  return 0;
}
图 1. 计算图视图

只要 Simple 连接到 AddedGraphAnotherGraph,您就无需在其中执行任何更改。如果子计算图数量越来越多,那么出错可能性就会越来越大。为了避免错误,建议可将 SimplestGraph 计算图定义包含在其自己的文件内。对计算图文件执行任何修改豆浆修改 UnitTestMoreComplexUnitTest 的行为。