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

ID 683152
日期 6/22/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

4.6. 将嵌套循环转换为单循环

为了最大限度提高性能,请尽可能将嵌套循环组合成单循环。循环的控制流程会增加所需逻辑和FPGA硬件空间布局的开销。将嵌套循环组合成单循环可减少这些方面,并提高组件性能。

以下代码实例显示嵌套循环到单循环的转换:

嵌套循环 转换成单循环
for (i = 0; i < N; i++) { //statements for (j = 0; j < M; j++) {
                        //statements } //statements } 
for (i = 0; i < N*M; i++) { //statements }

还可指定loop_coalesce pragma指令将嵌套循环结合成单循环且不影响循环的功能性。以下简单实例显示,在您指定loop_coalesce pragma指令后,编译器如何将两个循环结合成单个循环。

假设简单嵌套循环写入如下:
#pragma
                loop_coalesce for (int i = 0; i < N; i++) for (int j = 0; j < M; j++)
                sum[i][j] += i+j;
编译器将两个循环组合起来,因此他们如单循环写入如下:
int i = 0; int j = 0; while(i < N){ sum[i][j]
                += i+j; j++; if (j == M){ j = 0; i++; } }

更多有关 loop_coalesce pragma指令的信息,请参阅 Intel® High Level Synthesis Compiler专业版参考手册中的“循环合并(loop_coalesce Pragma)”。

可参阅以下教程: <quartus_installdir>/hls/examples/tutorials/best_practices/loop_coalesce