以突发方式传输数据可隐藏存储器访问时延,并提高存储器控制器的带宽使用率和效率。同时,请检查 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
函数来实现,该函数负责处理内部变量 tmpIn
和 tmpOut
。write
函数会获取产生的输出并写入 AXI 输出。如需了解有关突发的更多信息,请参阅
Vitis HLS 用户指南(UG1399) 中的 AXI 突发传输
。
将读写函数与计算隔离可带来:
- 读取/写入函数中的简单控制结构(循环),使突发检测更简单。
- 计算函数与 AXI 接口隔离,可简化潜在的内核最优化。如需了解更多信息,请参阅 最优化 C/C++ 内核。
- 内部变量将映射到片上存储器,相比 AXI 传输事务,这样访问速度更快。Vitis 核开发套件中支持的加速平台可具有多达 10 MB 的片上存储器,可用作管道、本地存储器和专用存储器。有效使用这些资源可极大地提升应用的效率和性能。