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

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

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