展开循环会更改函数的 I/O 要求和数据访问模式。如果循环进行阵列访问(几乎总是如此),请确保生成的数据路径可以并行访问所需的所有数据。
如果展开循环不能实现期望的性能提升效果,最常见的原因是存在存储器访问瓶颈。
默认情况下,Vitis HLS 编译器将大型阵列映射到存储器资源,其字宽等于一个阵列元素的大小。在大多数情况下,应用循环展开时需要更改此默认映射。
HLS 编译器支持各种编译指示来分区和重塑阵列。在循环展开时,请考虑使用这些编译指示来创建支持所期望的并行访问级别的存储器结构。
展开和分区阵列足以满足目标循环的时延和吞吐量目标。如果满足目标,即可转移到下一个感兴趣的循环。否则,请考虑采用其他最优化方法来提高吞吐量。