步骤 3:确定需要最优化的循环 - 2023.2 简体中文

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

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

此时,开发者已经创建了一个数据流架构,其中包含数据运动和处理函数,旨在维持内核的吞吐量目标。下一步是确保每个处理函数的实现方式均能提供期望的吞吐量。

如前所述,函数吞吐量的测量方式是将处理的数量除以函数的时延或运行时间。

T = max(VINPUT, VOUTPUT) / 时延

在本方法论中所述的“由外到内”分解过程的该阶段,函数所耗用和生成的数据量和目标吞吐量都应已知。这样,开发者即可轻松得到每个函数的时延目标。

Vitis HLS 编译器生成有关函数和循环的吞吐量和时延的详细报告。确定目标时延后,HLS 报告即可用于确定哪些函数和循环不满足其时延目标且需要注意,如 HLS 综合报告 中所述。

循环的时延可按如下方式计算:

LatencyLoop = (Steps + II x (TripCount – 1)) x ClockPeriod

其中:

Steps
单循环迭代的持续时间,以时钟周期数来度量
TripCount
循环中的迭代次数。
II
启动时间间隔,两次连续迭代开始之间的时钟周期数。当循环未流水打拍时,其 II 等于步数 (Steps)。

假设时钟周期已给定,有三种方法可以减少循环的时延,从而提高函数的吞吐量:

  • 减少循环中的步数(缩短每次迭代的执行时间)。
  • 减少循环次数,以便减少循环执行的迭代数量。
  • 缩短启动时间间隔,以便提升循环迭代启动频率。

假设循环次数远大于步数,将 II 或循环次数减半可足以使循环的吞吐量加倍。

了解此信息是最优化循环并使时延超过其目标的关键。默认情况下,Vitis HLS 编译器将尝试以尽可能低的 II 生成循环实现。首先看看如何通过减少循环次数或步数来改善时延。