HLS(High-Level Synthesis)详解——循环体并行优化

   日期:2020-09-30     浏览:220    评论:0    
核心提示:HLS高级综合能够实现软体代码的硬件加速,主要是因为其对代码中的循环体(for,while)等进行了并行性优化,采用流水,展开,合并,嵌套,数据流等方法,将软体中需要一步步执行的循环体,在硬件电路中实现并行化处理,从而大幅提高计算速度,正好应对当下这种高计算量的需求。本博客讲解一下循环体优化的一些方法,以及一些特殊循环体的优化(嵌套for循环,变量边界循环体),参考b站赛灵思官方HLS介绍视频。参数指标综合报告参考的指标参数,较为重要,如下图:Loop Trip Count:循环总次数

HLS高级综合能够实现软体代码的硬件加速,主要是因为其对代码中的循环体(for,while)等进行了并行性优化,采用流水,展开,合并,嵌套,数据流等方法,将软体中需要一步步执行的循环体,在硬件电路中实现并行化处理,从而大幅提高计算速度,正好应对当下这种高计算量的需求。

本博客讲解一下循环体优化的一些方法,以及一些特殊循环体的优化(嵌套for循环,变量边界循环体),参考b站赛灵思官方HLS介绍视频。

参数指标

综合报告参考的指标参数,较为重要,如下图:

Loop Trip Count:循环总次数

Loop Iteration Latency:每次循环占用时钟周期

Loop Iteration Interval(Loop II):两次循环之间的间隔

Loop Latency:整个循环的时钟周期

Function Latency:函数的时钟周期

Function Iteration Interval:函数总共占用时钟周期

 

优化方法

1. Pipeline:

不同次数的循环进行流水线操作提高并行性改善Latency和Interval,流水操作的前提是不同循环次数之间没有数据依赖。

 

2. Unroll:

展开真个循环体,等于复制循环,同步进行以增加并行性

3. for循环的合并

  • 边界都为常数的两个循环合并取最大的边界
  • 当for循环合并的两个循环边界一个是常数,另一个无法确定的时候无法合并。
  • 上述两个边界都是不确定边界时可以把边界范围大的拆分,使其一部分边界相等

4.嵌套for循环

通过代码优化将后两种嵌套转化成前两种

  1. 对上级循环pipeline会将下级所有循环unroll(资源利用率成倍(循环展开后的总次数)增加)。
  2. 建议对内部嵌套循环展开,达到时延和资源的中和。

5.  其他优化

①rewind:缩短循环多次执行的间隔,仅适用单循环

②循环边界是变量的问题:

    1.使用tripcount directive:手动设定循环边界的最大值最小值。

    2.把循环边界的数据类型声明成ap_int<W>。

    3.使用assert macro。

上述三种方法优化效果比较:

 

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服