HLS:for循环优化

文章目录

    • 1. 基本性能指标
    • 2.performance matrics
      • pipeline
      • unrolling
    • 3.循环合并
    • 4.数据流
      • A simple example
    • 5.嵌套的for循环
      • three types of nested loop
    • 6.其他优化方法
      • the issue regarding loop parallelism
        • merge
        • 把for循环封装成函数
        • make functions run in parallel
      • loop pipeline with rewind option
      • some approaches to code with variable loop bounds

1. 基本性能指标

HLS:for循环优化_第1张图片

2.performance matrics

loop trip count :循环执行了几次
loop interation latency :循环一次用了几个cycle
loop interation latency(Loop II) :两次循环直接间隔了几个cycle
loop latency:整个for循环的latency
function latency
function initial interval(II)
HLS:for循环优化_第2张图片
HLS:for循环优化_第3张图片

pipeline

HLS:for循环优化_第4张图片
流水线为什么是这样,为什么不能完全并行呢?
因为memory端口只有一个?

HLS:for循环优化_第5张图片

unrolling

默认用同一套电路,分时复用
unroll就是 对电路进行复制,复制几份是可以选择的在这里插入图片描述
在这里插入图片描述
HLS:for循环优化_第6张图片
HLS:for循环优化_第7张图片

HLS:for循环优化_第8张图片

3.循环合并

HLS:for循环优化_第9张图片
HLS:for循环优化_第10张图片
HLS:for循环优化_第11张图片
HLS:for循环优化_第12张图片
HLS:for循环优化_第13张图片
HLS:for循环优化_第14张图片
HLS:for循环优化_第15张图片
HLS:for循环优化_第16张图片
HLS:for循环优化_第17张图片
HLS:for循环优化_第18张图片

4.数据流

A simple example

HLS:for循环优化_第19张图片
有依赖关系,不能合并
dataflow
HLS:for循环优化_第20张图片
HLS:for循环优化_第21张图片
默认是pingpongram
dataflow的限制
HLS:for循环优化_第22张图片
HLS:for循环优化_第23张图片
HLS:for循环优化_第24张图片
变量一定是在一个for循环中被使用
在这里插入图片描述
HLS:for循环优化_第25张图片
HLS:for循环优化_第26张图片
HLS:for循环优化_第27张图片
HLS:for循环优化_第28张图片
HLS:for循环优化_第29张图片

5.嵌套的for循环

three types of nested loop

perfect loop :循环边界是固定常数,循环体只会在最内层出现
HLS:for循环优化_第30张图片
semi-perfect loop nest
外循环为变量,内循环为常数,循环体在内循环中
HLS:for循环优化_第31张图片
imperfect loop有两种类型
HLS:for循环优化_第32张图片
HLS:for循环优化_第33张图片
在这里插入图片描述
希望通过代码优化将imperfect loop转化成semiperfect loop
A simple example of perfect loop

HLS:for循环优化_第34张图片
对外部for循环做pipeline,外部for循环下面的所有for循环都会被打开
如果对inner loop 做pipeline,会对outer loop进行flattening
HLS:for循环优化_第35张图片
HLS:for循环优化_第36张图片
HLS:for循环优化_第37张图片
HLS:for循环优化_第38张图片
比较
在这里插入图片描述
HLS:for循环优化_第39张图片
HLS:for循环优化_第40张图片
优化后
HLS:for循环优化_第41张图片
HLS:for循环优化_第42张图片

6.其他优化方法

the issue regarding loop parallelism

merge

HLS:for循环优化_第43张图片
注意merge的条件。

把for循环封装成函数

HLS:for循环优化_第44张图片
如图所示,依然是分时复用,节省了资源,但并没有减少latency。
有没有办法实现并行呢?

make functions run in parallel

用allocation 实现并行,accumulator limit=2就是函数复制了两份。
HLS:for循环优化_第45张图片
HLS:for循环优化_第46张图片

loop pipeline with rewind option

HLS:for循环优化_第47张图片
example
HLS:for循环优化_第48张图片
HLS:for循环优化_第49张图片
multiple loops with rewindHLS:for循环优化_第50张图片
包含多个for循环,不能使用rewind
automatic loop pipelining
如何自动对for循环添加pipelining
HLS:for循环优化_第51张图片

some approaches to code with variable loop bounds

HLS:for循环优化_第52张图片
HLS:for循环优化_第53张图片
HLS:for循环优化_第54张图片
HLS:for循环优化_第55张图片
HLS:for循环优化_第56张图片
HLS:for循环优化_第57张图片
HLS:for循环优化_第58张图片
HLS:for循环优化_第59张图片

你可能感兴趣的:(FPGA,vivado,HLS)