HLS for-loop循环优化
文章目录
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)
pipeline
流水线为什么是这样,为什么不能完全并行呢?
因为memory端口只有一个?
unrolling
默认用同一套电路,分时复用
unroll就是 对电路进行复制,复制几份是可以选择的
3.循环合并
4.数据流
A simple example
有依赖关系,不能合并
dataflow
默认是pingpongram
dataflow的限制
变量一定是在一个for循环中被使用
5.嵌套的for循环
three types of nested loop
perfect loop :循环边界是固定常数,循环体只会在最内层出现
semi-perfect loop nest
外循环为变量,内循环为常数,循环体在内循环中
imperfect loop有两种类型
希望通过代码优化将imperfect loop转化成semiperfect loop
A simple example of perfect loop
对外部for循环做pipeline,外部for循环下面的所有for循环都会被打开
如果对inner loop 做pipeline,会对outer loop进行flattening
比较
优化后
6.其他优化方法
the issue regarding loop parallelism
注意merge的条件。
如图所示,依然是分时复用,节省了资源,但并没有减少latency。
有没有办法实现并行呢?
make functions run in parallel
用allocation 实现并行,accumulator limit=2就是函数复制了两份。
loop pipeline with rewind option
example
multiple loops with rewind
包含多个for循环,不能使用rewind
automatic loop pipelining
如何自动对for循环添加pipelining