Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio

在描述graph.h文件中,我们需用对每个kernel设置runtime ratio,如下图所示代码第26行和第27行。通常这个值介于01之间,表征了相应kernel占用的单个AIE处理时间的百分比。例如,runtime ratio0.2,意味着这个kernel占用了单个AIE 20%的处理时间。根据每个kernelruntime ratio,工具会将一个或多个kernel映射到一个AIE上。

 

图片[1]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

如何计算Runtime ratio

 

对于指定kernelruntime ratio可由下述公式计算:

runtime ratio = 运行kernel所需周期数 / 预算周期数     

其中预算周期数可表示为:

预算周期数 = 一次迭代处理的数据量×(AIE时钟频率 / 输入数据采样率) 

例如,一次迭代需用处理128个数据,输入数据采样率为245.76MHzAIE时钟频率为1GHz,那么可得预算周期数为128*(1000/245.76) = 520

 

Runtime ratio对性能和资源的影响

 

AIE系列文章之《AIE(2)—理解AIE编程中的graph》(AIE(2)—理解AIE编程中的graph)中,我们可以看到每个kernelruntime ratio0.1,在《AIE(6)—用Vitis Analyzer查看AIE编译结果》(AIE(6)—用Vitis Analyzer查看AIE编译结果)这篇文章中,我们可以看到这两个kernel运行在同一个AIEAIE tile[25,0],故这两个kernel是顺序执行的。同时,在《AIE(5)—针对AI Engine进行编译》(AIE(5)—针对AI Engine进行编译)这篇文章中,我们可以看到第一次迭代输出的最后一个结果对应的时间点是1235.2ns,同时,第二次迭代第一个输出数据位于1568ns。现在我们把每个kernelruntime ratio改为0.4,并重新进行编译仿真。从输入报告中可以看到,仍然只消耗了一个AIE Core,如下图所示。

 

图片[2]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Vitis Analyzergraph视图中也可以看到这两个kernel位于同一个AIEAIE tile[25,0]

 

图片[3]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

从仿真结果来看,第一次迭代的最后一个输出数据位于1235.2ns,第二次迭代的第一个输出数据位于1568ns,与runtime ratio0.1时保持一致。
图片[4]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

接下来,我们将每个kernelruntime ratio均改为0.6,重新进行编译仿真。从编译输出结果看,此时会使用两个AIE Core,分别位于AIE tile[24,0]AIE tile[25,0],如下图所示。进一步打开Vitis Analyzer,在graph视图(by tile)中可以看到同样的结果。同时注意到两个kernel之间的buffer由单个buffer变为乒乓bufferbuf1buf1d)。

图片[5]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

图片[6]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug
从仿真结果来看,第一次迭代的最后一个输出结果位于1228.8ns,第二次迭代的第一个输出数据位于1356.8,相比于runtime ratio0.1时,第二次迭代的第一个输出数据已经提前。这和这两个kernel之间使用了乒乓buffer有关。
 

图片[7]-Xilinx FPGA AI开发工具 AIE(7)—理解Runtime Ratio-Xilinx-AMD社区-FPGA CPLD-ChipDebug

此时,这两个kernel运行在两个不同的AIE Core上,故可并行执行,从而增加了graph的吞吐率。因此,我们可以看到,增加runtime ratio是有可能提升graph性能的。
 
结论:
 
增加runtime ratio使得每个kernel运行在不同的AIE Core上有可能提升graph吞吐率,但也增加了AIE的利用率。
降低runtime ratio有可能会降低AIE的利用率。这是因为只有当多个kernel确实可以运行在同一个AIE上时,工具才会将其映射到同一个AIE Core上。
请登录后发表评论

    没有回复内容