串流停滞分析 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文

Performance Metrics(性能指标)视图中,您可识别是否需对串流停滞以及导致停滞的拼块进行分析。

以下步骤演示了如何在 Vitis IDE 的Performance Metrics选项卡中开始分析串流停滞。

  1. Performance Metrics视图中,选中Stream Stall Time (%)(串流停滞时间 (%))即可查看所有拼块间的串流停滞。识别要分析的拼块。请注意,Performance Metrics视图中的对象可与Trace(追踪)视图、Graph(计算图)视图和Array(阵列)视图中的对象进行交叉探测。例如,选中Performance Metrics视图中的拼块即可在Trace视图中高亮此拼块,这样有助于快速定位此拼块。

  2. 选择Trace(追踪)视图。

  3. 选择Stream Stalls(串流停滞)视图。在Stalls视图中,串流停滞具有以下信息,单击蓝色对象即可与其他视图进行交叉探测。
    NAME(名称)
    此串流停滞名为 SS_<NUM>。停滞发生时间越早,编号越小。此编号在所有类型的停滞中都是唯一的。
    Stalled Tile(停滞的拼块)
    已停滞的内核所在的 AI 引擎 tile。
    Stalled Kernel(停滞的内核)
    已停滞的内核。此内核名为 <Kernel_function_name>.<Schedule_ID>.<Graph_instance_name>。有时,它显示为 _main,随后,需通过交叉探测来查找实际的内核函数。
    Start (ps)(开始 (ps))
    停滞的开始时间。
    Duration (ps)(持续时间 (ps))
    停滞的持续时间。
    PC
    发生停滞时的程序计数器。
    Stalled Port(停滞的端口)
    已停滞的内核的端口。
    Related Stalls(相关停滞)
    可能导致此停滞的其他停滞。
    Full Destination(目标已满)
    此端口已满,导致已停滞的内核无法写入。
    Empty Source(源端口为空)
    此端口为空,导致已停滞的内核无法从中读取。
  4. 单击Stalls视图中的串流停滞将转至“Trace”视图中此停滞的起始位置。右键单击此停滞,然后按需选择Filter Trace(筛选追踪)。筛选追踪后,与停滞相关的信号都会显示在Trace视图中。不相关的信号则隐藏。如果采用大型设计,那么使用筛选追踪来浏览追踪更清晰。
  5. Stalls视图中的蓝色对象可供点击和交叉探测。例如,单击Stalls视图中的内核将在Trace视图中高亮此内核。
  6. 缩放Trace视图即可浏览停滞。根据停滞的位置、类似停滞发生的频率、停滞和相关停滞(如有)发生前的事件等信息,可以为您提供有关发生停滞的原因的提示。
  7. 要清除先前筛选的追踪,请右键单击并选中Clear All Filters(清除所有筛选)。
  8. Graph视图中显示停滞路径的概览是很有帮助的。选中Graph视图,然后从下拉列表中选中Tile View(拼块视图)。

  9. 选中Stalls视图,然后从下拉列表中选中Stream Stalls
  10. 浏览Stalls视图中的串流停滞。单击“Stalls”视图中的串流停滞即可查看计算图中的停滞概览。红色路径显示的是停滞发生的位置。此路径可能是从已停滞的内核到已满的目标端口,或者从空的源端口到已停滞的内核。
    提示: 如果任一串流多播至多个目标,并且由于此串流没有足够 FIFO 可满足所有目标而导致串流停滞时,高亮的停滞内核与停滞的信号线可能处于未连接状态(分离并显示为红色)。这意味着必须将多播串流的所有目标作为一个整体进行串流停滞分析。下图中显示了Graph视图中的多播串流停滞示例。


  11. 可从Graph视图或Array视图打开计算图源代码或内核源代码。单击Stalls视图中的内核对象或者单击Graph视图中的内核即可选中内核实例。

  12. 右键单击Graph视图中的内核实例,然后选中Goto Graph Source(转至计算图源代码)或Goto Kernel Source(转至内核源代码)。这样将打开计算图源代码或内核源代码。
  13. 将计算图源代码和内核源代码与分析的停滞加以关联,按需编辑源代码。

下表列出了可能导致串流停滞的部分场景以及可能的解决方案。

表 1. 串流停滞场景和解决方案
来源 目标对象 停滞类型 可能的解决方案 注释
串流 串流 串流停滞
  • 增加 FIFO 深度。请参阅 FIFO 深度约束
  • 调整源内核或目标内核中的串流读取和写入指令。
 
串流 多条串流 串流停滞 多播
串流 同一 AI 引擎内存在多个内核的多条串流 串流停滞
  • 将多个内核置于不同 AI 引擎
  • 给内核串流添加足够的 FIFO。
多播
多条串流 多条串流 串流停滞
  • 调整指令,使不同串流间匹配。
  • 增加 FIFO 深度(ssFIFO 或 DMA FIFO)。
 
PLIO 串流 串流停滞
  • 尽可能增大 AI 引擎到 PL 接口带宽。例如,64 位接口,采用最高 PL 频率(1/2 AI 引擎频率)。或者 128 位接口(请注意,这表示对一个 128 位接口使用两条 64 位通道)。请参阅 AI 引擎内核与计算图编程指南 (UG1079) 中的 AI 引擎到 PL 的接口编程
 
串流 PLIO 串流停滞 同上。  
串流(每次迭代 32 位) PLIO 串流停滞 为每个 32 位发送 TLAST。请参阅 AI 引擎内核与计算图编程指南 (UG1079) 中的 AI 引擎到 PL 的接口编程