在描述graph的.h文件中,我们需用对每个kernel设置runtime ratio,如下图所示代码第26行和第27行。通常这个值介于0和1之间,表征了相应kernel占用的单个AIE处理时间的百分比。例如,runtime ratio为0.2,意味着这个kernel占用了单个AIE 20%的处理时间。根据每个kernel的runtime ratio,工具会将一个或多个kernel映射到一个AIE上。
如何计算Runtime ratio?
对于指定kernel,runtime ratio可由下述公式计算:
runtime ratio = 运行kernel所需周期数 / 预算周期数
其中预算周期数可表示为:
预算周期数 = 一次迭代处理的数据量×(AIE时钟频率 / 输入数据采样率)
例如,一次迭代需用处理128个数据,输入数据采样率为245.76MHz,AIE时钟频率为1GHz,那么可得预算周期数为128*(1000/245.76) = 520。
Runtime ratio对性能和资源的影响
在AIE系列文章之《AIE(2)—理解AIE编程中的graph》(AIE(2)—理解AIE编程中的graph)中,我们可以看到每个kernel的runtime ratio为0.1,在《AIE(6)—用Vitis Analyzer查看AIE编译结果》(AIE(6)—用Vitis Analyzer查看AIE编译结果)这篇文章中,我们可以看到这两个kernel运行在同一个AIE上AIE tile[25,0],故这两个kernel是顺序执行的。同时,在《AIE(5)—针对AI Engine进行编译》(AIE(5)—针对AI Engine进行编译)这篇文章中,我们可以看到第一次迭代输出的最后一个结果对应的时间点是1235.2ns,同时,第二次迭代第一个输出数据位于1568ns。现在我们把每个kernel的runtime ratio改为0.4,并重新进行编译仿真。从输入报告中可以看到,仍然只消耗了一个AIE Core,如下图所示。
在Vitis Analyzer的graph视图中也可以看到这两个kernel位于同一个AIE上AIE tile[25,0]。
接下来,我们将每个kernel的runtime ratio均改为0.6,重新进行编译仿真。从编译输出结果看,此时会使用两个AIE Core,分别位于AIE tile[24,0]和AIE tile[25,0],如下图所示。进一步打开Vitis Analyzer,在graph视图(by tile)中可以看到同样的结果。同时注意到两个kernel之间的buffer由单个buffer变为乒乓buffer(buf1和buf1d)。
没有回复内容