解读时间线轨迹 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

“Timeline Trace”(时间线轨迹)窗口可在公用时间线上显示主机和器件事件。此信息可帮助您了解应用程序执行的详细信息并确定潜在可改进之处。“Timeline Trace”报告具有 2 个主要部分:“Host”(主机)和“Device”(器件)。“Host”部分显示的是源自主机侧的所有活动的追踪轨迹。“Device”显示的则是 FPGA 上的 CU 活动。

此报告具有如下结构:

  • Host(主机)
    OpenCL API Calls(OpenCL API 调用)
    在此追踪所有 OpenCL API 调用。从主机透视图角度测量活动时间。
    General(常规)
    在此追踪所有常规 OpenCL API 调例,如 clCreateProgramWithBinaryclCreateContextclCreateCommandQueue
    Queue(队列)
    在此追踪与特定命令队列相关联的 OpenCL API 调用。包括诸如 clEnqueueMigrateMemObjectsclEnqueueNDRangeKernel 等命令。如果用户应用创建了多个命令队列,则此部分会显示所有队列和活动。
    Data Transfer(数据传输)
    在此处追踪从主机到器件存储器的 DMA 传输。有多个 DMA 线程在 OpenCL 运行时实现,通常有相同数量的 DMA 通道。DMA 传输由用户应用通过调用 OpenCL API(例如,clEnqueueMigrateMemObjects)来进行初始化。这些 DMA 请求将被转发至运行时,随后被委派至其中一个线程。从主机到器件的数据传输显示在Write下,因为这些传输由主机写入,而从器件到主机的传输则显示在Read下。
    Kernel Enqueues(内核排队)
    此处显示的是由主机程序排队的内核。此处的内核不应与器件上的内核或 CU 混淆。此处的内核表示 NDRangeKernels 以及由 OpenCLclEnqueueNDRangeKernelsclEnqueueTask 命令创建的任务。这些内核是根据从主机视角测量所得时间来绘制的。您可将多个内核调度为同时执行,并且可从调度运行的时间点开始追踪,直至内核执行结束为止。这就是存在多个输入的原因。行数取决于重叠的内核执行数。
    注释: 内核的重叠并非表示在器件上实际并行执行,因为进程可能尚未准备好立即执行。
  • Device "name"(器件名称)
    Binary Container "name"(二进制容器名称)
    二进制容器名称。
    Compute Unit "name"(计算单元名称)
    FPGA 上计算单元的名称。
    User Functions(用户函数)
    对于 Vitis HLS 工具内核而言,在此追踪作为数据流进程执行的函数。这些函数的追踪会显示当前正在并行执行的函数的活动实例数。当启用波形时,会在硬件仿真中生成这些名称。
    注释: 函数级别活动仅在硬件仿真中才可能出现。
    • Function: "name a"(函数名称 a)
    • Function: "name b"(函数名称 b)
    Read(读取)
    CU 通过 AXI-MM 端口从 DDR 中读取。此处显示由 CU 读取的数据的轨迹。活动显示为传输事务,每个传输事务的工具提示都会显示有关此 AXI 传输事务的更多详情。当为 CU 指定 --profile.data 时,就会生成这些名称。
    Write(写入)
    CU 通过 AXI-MM 端口写入 DDR。此处显示由 CU 写入的数据的轨迹。活动显示为传输事务,每个传输事务的工具提示都会显示有关此 AXI 传输事务的更多详情。当为 CU 指定 --profile.data 时,就会生成此信息。