Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

5. 循环的最佳实践

Intel® High Level Synthesis Compiler通过流水线方式进行循环以提高吞吐量。反复查阅这些循环的最佳实践可了解优化循环的技术从而促进组件性能提高。

Intel® HLS Compiler Pro Edition会让您了解是否存在依赖关系(dependencies)阻止其优化循环。尝试消除代码中的这些依赖关系以优化组件性能。使用可用的循环编译指令为编译器提供其他指导。

首先,请尝试以下方法:
  • 可并行执行这些相邻循环体中的指令时,请手动熔断这些相邻循环体。这些熔断的循环可以流水线方式而非顺序执行。流水线可降低组件延迟并减少组件使用的FPGA面积。
  • 使用#pragma loop_coalesce指令让编译器尝试折叠嵌套循环。结合循环可减少组件中的延迟以及减少嵌套循环所需的FPGA面积开销。
  • 如果您有可并行的两个循环,就可考虑使用任务系统。有关详细信息,请参阅任务系统最佳实践

演示循环最佳实践的教程

Intel® HLS Compiler Pro Edition提供的教程可说明重要的 Intel® HLS Compiler概念并演示良好的编码实践。

查看以下教程了解可能适用于您设计的最佳循环实践:
教程 说明
可在您英特尔 Quartus Prime系统中的如下位置找到这些教程:
<quartus_installdir>/hls/examples/tutorials
best_practices/ divergent_loops 演示有关使用发散式循环的设计的源极优化
best_practices/ loop_coalesce 演示在嵌套循环上使用loop_coalesce编译指令后的性能和资源利用率提高。
best_practices/ loop_fusion 演示循环熔断后的延迟性和资源利用率提高。
best_practices/ loop_memory_dependency 演示使用ivdep编译指令切断循环附带的依赖关系。
loop_controls/ max_interleavin
演示在符合如下条件的循环中降低面积使用率:
  • 循环中有一个II > 1
  • 该循环包含于流水线式循环中
  • 该循环串行运行于流水线式循环的调用中。
best_practices/ optimize_ii_using_ hls_register 演示如何使用hls_register属性减少循环II,以及如何使用hls_max_concurrency提高组件吞吐量
best_practices/ parallelize_array_operation 演示如何通过更正循环中数组上执行操作时出现的瓶颈来提高fMAX
best_practices/ relax_reduction_dependency

演示减少包含浮点计算器的循环中的II,或减少其他无法在单个时钟周期中以高速进行计算的操作。

best_practices/ remove_loop_carried_dependency 演示如何通过删除对嵌套循环中同一变量的访问来提高循环的性能。
best_practices/ resource_sharing_filter 演示32抽头有限脉冲响应(FIR)滤波器设计的版本如下:
  • 针对吞吐量优化的实例
  • 针对面积优化的实例
best_practices/ speculated_iterations 演示使用推测的迭代时如何使用#pragma speculated_iterations进行控制。
best_practices/ triangular_loop 演示对带有依赖关系的三角循环码型进行说明的方法。