简介
在前文中,我们首先认识了 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 文件。
此文件内容如下:

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 计算图视图,如下所示:

第 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<ratio>(first) = 0.1;
runtime<ratio>(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 计算图的视图,如下所示:

在下一篇博文中,我们将详细讲解内核。
本文详细介绍了Vitis™2022.1中用于Versal™的AIE应用的AdaptiveDataFlow(ADF)计算图,包括计算图的组成、节点和边缘的作用,以及如何在工程中实例化和配置mygraph计算图,涉及内核函数、数据连接和运行时比率设置。
1210

被折叠的 条评论
为什么被折叠?



