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

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

5.2.2. 展开循环(Unroll Loop)

展开循环后,循环的每个迭代都会在硬件中被复制,并且如果是独立迭代,则将同时执行。展开循环以增加FPGA中的使用面积来减少组件中的延迟。
以如下具有3个阶段3次迭代的基础循环为例。其中每个循环阶段代表一个时钟周期内循环中发生的操作。
图 31. 具有3个阶段和3次迭代的基础循环


如果该循环的每个阶段需要一个时钟周期来执行,则该循环的延迟为9个周期。
下图显示从具有三个阶段和三次迭代的基础循环来的循环展开三次。
图 32. 通过三个阶段和三次迭代展开的循环


现在仅需要三个时钟周期即可完成循环的三次迭代,但却需要三倍的硬件资源。

可使用#pragma unroll指令控制编译器如何展开循环,仅当编译器事先知道循环的跳变数或指定了展开因子时,此命令才有效。除了复制硬件之外,编译器还会重新安排电路时间,以使每个操作在准备好输入后立即运行。

有关使用#pragma unroll指令的实例,请参阅 best_practices/resource_sharing_filter教程。