应用循环展开 - 2023.2 简体中文

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

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

循环展开可解开循环,允许循环的多次迭代一起执行,从而减少循环的总循环次数。

以工业生产做个类比,工厂是内核,组装线是数据流水线,而工作站是计算函数。展开创建的工作站可以处理输送带上同时到达的多个对象,从而提高性能。

图 1. 循环展开

循环展开能够按相应比例拓宽生成的数据路径。随着并行处理的样本数量增加,带宽要求通常也会增加。这有两个含义:

  • 函数 I/O 的宽度必须与数据路径的宽度匹配,反之亦然。
  • 当 I/O 要求超出内核端口的最大大小(512 位 / 64 字节)后,循环展开和数据路径拓宽将无法再带来更多益处。

以下准则有助于最优化循环展开的使用:

  • 从循环嵌套中的最内层循环开始。
  • 评估哪个展开因子将消除所有循环附有的依赖关系。
  • 为了获得更有效的结果,请展开具有固定循环次数的循环。
  • 如果在展开的循环中存在函数调用,那么内联这些函数可以改善结果,原因是资源共享方式更有效,但代价是综合时间更长。另请注意,互连可能会变得越来越复杂,后续会导致布线问题。
  • 不要盲目地展开循环。在展开循环时,脑中应始终牢记明确的目标。