AI 引擎系列 2 - AI 引擎计算图简介 (2022.1 更新)

简介

前文中,我们首先认识了 Vitis™ 2022.1 统一软件平台内适用于 Versal™ AI 引擎 (AIE) 应用。
我们认识了 Vitis IDE 2022.1 AIE 应用工程的结构,还了解了用于计算图初始化、运行和终止的一些 API。在本文中,我们将进一步深入讲解工程内的 AIE 计算图。
在本文中,我们将分析工程内例化和运行的 mygraph 计算图内包含哪些内容。
 

要求

 
下文要求您已通读 AI 引擎系列 1 文章 
 


AI 引擎计算图简介

 
自适应数据流 (Adaptive Data Flow, ADF) 计算图是 AIE 应用的更高层次。这些计算图是以 C++ 编写的,包含节点和边缘,其中节点表示计算内核函数和/或子计算图,边缘表示数据连接。所有 ADF 计算图类定义都是预定义的数据流计算图类 adf::graph 的子类,必须位于头文件内。

在同一个头文件中可包含多个 ADF 计算图定义。该类头文件应包含在 main 应用文件中,在此文件中,实际顶层计算图在文件作用域内声明。

计算图是使用 AI 引擎工具链来编译和执行的,此工具链集成在 Vitis 2022.1 统一软件平台内。
请务必注意,计算图是静态定义、映射和编译的(运行时期间计算图不发生更改)。

请打开来自前文中导入的模板工程的 project.h 文件。

此文件内容如下:


 

AI 引擎系列 2 - AI 引擎计算图简介 (2022.1 更新)_第1张图片



include 头文件(第 2 行到第 3 行)添加了 adf 数据流库 (adf.h) 与内核函数原型 (kernels.h)

从第 7 行到第 13 行:

class simpleGraph : public adf::graph {
   private:
      kernel first;
      kernel second;
   public:
      input_plio  in;
      output_plio out;

 

  • 其中基于计算图类 adf::graph(第 7 行)声明了 1 个计算图。
  • 在此计算图内声明了 2 个具有 private 私有成员访问权限的内核,分别名为 first 和 second(第 8 行到第 10 行)
  • 此计算图调入了 1 个输入端口并调出 1 个输出端口(第 12 行到第 14 行)这些端口的类型为 PLIO,表示将连接到可编程逻辑 (PL)。另一种可用的端口类型是 GMIO,它可将计算图连接到 Versal NoC。

我们基于此来更新 mygraph 计算图视图,如下所示:

 
 

AI 引擎系列 2 - AI 引擎计算图简介 (2022.1 更新)_第2张图片




14 行到第 30 行包含此计算图的构造函数:
 

simpleGraph(){

    in  = input_plio::create(plio_32_bits, "data/input.txt");

    out = output_plio::create(plio_32_bits, "data/output.txt");

 

    first = kernel::create(simple);

    second = kernel::create(simple);

    connect< window<128> > net0 (in, first.in[0]);

    connect< window<128> > net1 (first.out[0], second.in[0]);

    connect< window<128> > net2 (second.out[0], out);

    source(first) = "kernels/kernels.cc";

    source(second) = "kernels/kernels.cc";

 

    runtime(first) = 0.1;

    runtime(second) = 0.1;

 

  }

 

在第 16 行和第 17 行上,定义了 PLIO 端口的大小和文本文件,这些文本文件将用于在仿真中馈送给这些端口。

在第 19 行和第 20 行上,创建了 2 个内核,并将其与名为“simple”的函数相关联。

21 行到第 23 行添加了连接信息:

  • 在第 21 行上,第一个内核的输入 (first.in[0]) 连接到计算图的输入 (in)。此连接称为 net0,其窗口大小为 128 字节(我们将在后文中讲解连接类型)
  • 在第 22 行上,第二个内核的输入 (second.in[0]) 连接到第一个内核的输出 (first.out[0])。此连接称为 net1,其窗口大小为 128 字节。
  • 在第 23 行上,第二个内核的输出 (second.out[0]) 连接到计算图的输出 (out)。此连接称为 net1,其窗口大小为 128 字节。

在第 25 行和第 26 行上,这些内核与包含函数“simple”的源文件相关联,稍后将执行该函数。

最后,对这 2 个内核应用运行时比率 0.1。这表示这 2 个函数预计运行时间将占单个 AI 引擎处理时间的 10%。我们将在后续博文中讲解运行时比率的影响。

我们可以根据以上详细信息来绘制 mygraph 计算图的视图,如下所示:

 

AI 引擎系列 2 - AI 引擎计算图简介 (2022.1 更新)_第3张图片


在下一篇博文中,我们将详细讲解内核。

你可能感兴趣的:(人工智能,Vitis,Vitis,AI,AMD,FPGA)