文档目录

6.4. 循环展开(unroll预处理指令)

Intel® HLS Compiler支持使用unroll预处理指令展开循环的多个副本。

实例 代码

#pragma unroll <N>
for (int i = 0; i < M; ++i) {
    // Some useful work
}

在此实例中,<N>指定展开因子,即HLS编译器生成的循环的副本数。如果没有指定展开因子,那么在编译过程中知道循环迭代的次数后,HLS编译器会将循环完全展开。

在展开循环时的编译器生成的代码类型实例,请参考以下代码片段,其中指定展开因子为3:
hls_register float data[N];

#pragma unroll 3
for (int i = 0; i < N; i++)
{
    data[i] = function(i, a);
}
通过展开因子3展开的循环使得编译器将代码片段转换为类似以下代码的内容:
hls_register float data[N];

for (int i = 0; i < N; i += 3)
{
    data[i + 0] = function(i + 0, a);
    if (i + 1 < N)
    {
        data[i + 1] = function(i + 1, a);
    }
    if (i + 2 < N)
    {
        data[i + 2] = function(i + 2, a);
    }
}

您可以在高级设计报告(report.html)中找到每个循环的展开状态。