仅对英特尔可见 — GUID: xct1506087469426
Ixiasoft
5.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