使用突发数据传输 - 2022.1 简体中文

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

以突发方式传输数据可隐藏存储器访问时延,并提高存储器控制器的带宽使用率和效率。同时,请检查 HLS 报告以获取突发信息。

如果出现突发数据传输,详细的内核追踪将把较高的突发速率反映为较大的突发长度数字:

图 1. 带详细内核追踪的突发数据传输

在上图中,还可以观察到 AXI Interconnect 后的存储器数据传输实际上是以不同方式实现的(传输事务时间更短)。悬停于这些传输事务上时,可以看到 AXI Interconnect 已将 16 x 4 字节的传输事务封装到 1 个 1 x 64 字节的封装传输事务中。这样可以有效使用 AXI4 带宽,这种方法更有利。下一节将更加详细地讨论此最优化技术。

突发推断在很大程度上依赖于编码样式和访问模式。但是,您可以通过隔离数据传输和计算来方便突发检测和提升性能,如以下代码片段所示:

void kernel(T in[1024], T out[1024]) {
    T tmpIn[1024];
    T tmpOu[1024];
    read(in, tmpIn);
    process(tmpIn, tmpOut);
    write(tmpOut, out);
}

总之,read 函数负责从 AXI 输入读取到内部变量 (tmpIn)。计算由 process 函数来实现,该函数负责处理内部变量 tmpIntmpOutwrite 函数会获取产生的输出并写入 AXI 输出。如需了解有关突发的更多信息,请参阅 Vitis HLS 用户指南(UG1399) 中的 AXI 突发传输

将读写函数与计算隔离可带来:

  • 读取/写入函数中的简单控制结构(循环),使突发检测更简单。
  • 计算函数与 AXI 接口隔离,可简化潜在的内核最优化。如需了解更多信息,请参阅 最优化 C/C++ 内核
  • 内部变量将映射到片上存储器,相比 AXI 传输事务,这样访问速度更快。Vitis 核开发套件中支持的加速平台可具有多达 10 MB 的片上存储器,可用作管道、本地存储器和专用存储器。有效使用这些资源可极大地提升应用的效率和性能。