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回圈
通過代碼優化將后兩種嵌套轉化成前兩種

- 對上級回圈pipeline會將下級所有回圈unroll(資源利用率成倍(回圈展開后的總次數)增加),
- 建議對內部嵌套回圈展開,達到時延和資源的中和,
5. 其他優化
①rewind:縮短回圈多次執行的間隔,僅適用單回圈

②回圈邊界是變數的問題:
1.使用tripcount directive:手動設定回圈邊界的最大值最小值,

2.把回圈邊界的資料型別宣告成ap_int<W>,

3.使用assert macro,

上述三種方法優化效果比較:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/144139.html
標籤:AI
上一篇:走進音視頻的世界——音視頻解碼
