在上一篇文章中我们介绍了AIE中的graph。graph通常在一个.h文件中描述,可认为是AIE应用工程的顶层文件,位置仅次于仿真文件,我们也看到了graph里是实例化Kernel并通过构造函数connect将kernel和graph的输入/输出端口连接起来,如下图所示。本篇文章我们将重点介绍Kernel,也就是图中的first和second。通常采用C++描述Kernel,也会用到一些专用的Intrinsics。这些Intrinsics并不神秘,它们仍然是一些预定义的函数,只是针对超长指令字(VLIW:Very long instruction word)向量处理器。aiecompiler负责对Kernel进行编译。该编译器集成于Vitis中,无需单独下载。aiecompiler对Kernel编译后会生成ELF文件。需用注意的是多个Kernel可运行在同一个AIE上,但是一个Kernel不能运行在多个AIE上,这就要求设计者对函数进行合理的分割,以保证每个Kernel至多仅占用一个AIE。我们来看这个Kernel函数,如下图所示。首先kernels.cc位于src/kernels目录下。代码第3行与graph一样要声明头文件adf.h。代码第4行的头文件include.h是因为其中包含了参数NUM_SAMPLES,代码第8行会用到,其值为32。代码第6行定义函数simple。该函数无返回值(返回void),AIE要求所有的Kernel都是void。