如何测量测量和理解AMD Versal AI引擎应用程序的延迟
扫描二维码
随时随地手机看文章
在之前的教程中,我们已经看到我们可以从AI引擎模拟中获得循环信息,这是循环近似,因此它给出了我们将在实际硬件上得到的非常接近的估计。我认为从AI引擎模拟器生成的轨迹中测量延迟会很有趣。
注意:本教程是使用AMD Vitis 2025.1创建的。工具流程在其他版本的工具中可能会有所不同。
测量AI引擎图的延迟
在之前的教程中,在运行AIE模拟器之后,我们在模拟生成的输出文件(output.txt)中得到以下输出:
以T开头的行给出了示例的时间戳,如下所示。
第一个,1510400ps意味着第一个样本在1.5104 us之后出现在AI引擎阵列的输出中。因此这大概就是AI引擎数组的初始延迟(从第一个样本输入到第一个样本输出)。
如果我们检查两个连续线路之间的时间戳,我们可以看到每个连续的样本在6.4 ns或156.25 MHz之后到达。
我们可以在查看平台属性时找到类似的数字(打开AI引擎组件设置文件vis -comp)。(点击平台信息)
我们可以看到这个频率与我们平台上的PL时钟的频率相匹配
然后查看从模拟(output.txt)生成的输出文件的第63-65行,我们可以看到以下内容:
TLAST表示下面的样本是图迭代的最后一个样本。这意味着我们的图(带有2个核)需要1.70个函数来完成第一次图迭代。这个时间包括填充输入缓冲区、运行两个内核和输出输出缓冲区的时间。
然后查看output.txt文件的第128-130行:
这显示了图迭代的最后一个样本的时间戳。这意味着第二次迭代在0.9536秒内完成。这比第一次迭代要快得多。其原因是乒乓缓冲区作为图的输入,正如我们在上一教程中看到的那样。
虽然要开始图的第一次迭代,我们必须等待ping缓冲区填满输入数据,但第二次迭代的情况并非如此,因为当内核处理ping缓冲区时,pong缓冲区已经填满了。
为了更好地了解不同阶段引入的延迟,一个好方法是查看可以从模拟中生成的跟踪。
默认情况下不启用跟踪。我们需要在仿真设置文件(launch.json)中启用EnableTraces选项,从而在仿真选项中启用它们。
如果我们再次运行模拟,我们将能够在REPORTS > Trace下看到跟踪。
这是我们从跟踪报告中得到的视图
我们可以看到,AI Engine Tiles组织了各种信息,如功能运行,锁或dma。
浅绿色和浅蓝色的方框表示内核执行。正如我们在之前的文章中看到的那样,图(以及内核)运行了4次,并且在同一个AI引擎贴图上执行的内核一个接一个地执行。
如果我们将游标放在第二个内核第一次运行的末尾,我们可以看到它表示1.460 us,这与我们从模拟文件中的第一个时间戳中获得的初始延迟非常接近。
然后,我们可以首先在内核的第一次和第二次执行开始时添加游标。
两个核(1475 - 524 ns)之间的时间差为951 ns。这也接近我们在测量第二次图执行的时间减去从输出文本文件的时间戳中得到的第一次迭代的最后一个样本的时间时得到的值。
这基本上是我们的图在数据流水线(图不等待数据运行处理)时完成迭代(包括2个内核的执行)所需的时间。
总结
在本文中,我们看到了如何测量AI Engine模拟输出文本文件中的延迟,以及如何启用和分析模拟中的跟踪,以获得更细粒度的图延迟测量。
本文编译自hackster.io





