0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HLS優(yōu)化設計的最關鍵指令

YCqV_FPGA_EETre ? 來源:FPGA開發(fā)圈 ? 作者:FPGA開發(fā)圈 ? 2021-01-14 09:41 ? 次閱讀

HLS 優(yōu)化設計的最關鍵指令有兩個:一個是流水線 (pipeline)指令,一個是數據流(dataflow)指令。正確地使用好這兩個指令能夠增強算法地并行性,提升吞吐量,降低延遲但是需要遵循一定的代碼風格。展開 (unroll) 指令是只針對 for 循環(huán)的展開指令,和流水線指令關系密切,所以我們放在一起首先我們來看一下這三個指令在 Xilinx 官方指南中的定義:

Unroll:Unroll for-loops to create multiple instances of the loopbody and its instructions that can then be scheduled independently.

Pipeline:Reduces the initiation interval by allowing theoverlapped execution of operations within a loop or function.

Dataflow:Enables task level pipelining, allowing functions andloops to execute concurrently. Used to optimize through output and/or latency.

Unroll 指令在 for 循環(huán)的代碼區(qū)域進行優(yōu)化,這個指令不包含流水線執(zhí)行的概念,單純地將循環(huán)體展開使用更多地硬件資源實現(xiàn),保證并行循環(huán)體在調度地過程中是彼此獨立的。

Pipeline 指令在循環(huán)和函數兩個層級都可以使用,通過增加重復的操作指令(如增加資源使用量等等)來減小初始化間隔。

Dataflow 指令是一個任務級別的流水線指令,從更高的任務層次使得循環(huán)或函數可以并行執(zhí)行,目的在于減小延遲增加吞吐量。

Unroll 和 Pipeline 指令相互重合的關系在于,當對函數進行流水線處理時,以下層次結構中的所有循環(huán)都會自動展開,而使用展開指令的循環(huán)并沒有給定對II的約束。在最新版本的 Vitis HLS 工具中,工具會自動分析數據之間的流水線操作關系,以II=1為目標優(yōu)化,但是還是會受限于設計本身的算法和代碼風格。下圖非常清晰地闡明了Unroll 和 Pipeline 指令的關系,Pipeline 指令放置的循環(huán)層次越高,循環(huán)展開的層次也越高,最終會導致使用更大面積的資源去實現(xiàn),同時并行性也更高。

7728e698-51a7-11eb-8b86-12bb97331649.png

這里如果循環(huán)的邊界是變量的話,則無法展開。這將組織函數被流水線化,可以通過添加tripcount 等指令,指定循環(huán)在綜合時大概的最大最小邊界。

在循環(huán)流水線優(yōu)化的過程中,有一個完美循環(huán),半完美循環(huán)和非完美循環(huán)的代碼風格概念,只有當流水線循環(huán)完美或半完美時,才可以將嵌套循環(huán)徹底并行展開。

完美循環(huán):只有最里面的循環(huán)才具有主體內容,在循環(huán)語句之間沒有指定邏輯,循環(huán)界限是恒定的。

半完美循環(huán):只有最里面的循環(huán)才具有主體 (內容), 在循環(huán)語句之間沒有指定邏輯,只有最外面的循環(huán)邊界可以是可變的。

非完美循環(huán):循環(huán)的主體內容分布在循環(huán)的各個層次或內層循環(huán)的邊界是變量。

779a5dc8-51a7-11eb-8b86-12bb97331649.png

當我們要爭去最大流水線循環(huán)的成功執(zhí)行,就需要將非完美循環(huán)手動修改成完美或半完美循環(huán)。以下代碼例子給出了完美循環(huán)(左邊)和非完美循環(huán)(右邊)在Vitis HLS 中的執(zhí)行結果。

Perfect_loop

#include "loop_perfect.h"

void loop_perfect (din_t A[N], dout_t B[N]) {

int i,j;

dint_t acc;

LOOP_I:for (i=0; i < 20; i++) {?

LOOP_J: for (j=0; j < 20; j++) {?

if(j==0) acc = 0;

acc += A[j] * j;

if(j==19) {

if (i%2 == 0)

B[i] = acc / 20;

else

B[i] = 0;

}

}

}

}

void loop_imperfect (din_t A[N], dout_t B[N]) {

int i,j;

dint_t acc;

LOOP_I:for(i=0; i < 20; i++){?

acc = 0;

LOOP_J: for (j=0; j < 20; j++) {?

acc += A[j] * j;

}

if (i%2 == 0)

B[i] = acc / 20;

else

B[i] = 0;

}

}

77d756e2-51a7-11eb-8b86-12bb97331649.png

78f8c790-51a7-11eb-8b86-12bb97331649.png

792ca6d2-51a7-11eb-8b86-12bb97331649.png

7962a03e-51a7-11eb-8b86-12bb97331649.png

綜合完畢后,我們可以在分析窗口和綜合報告中都很清晰的看出,完美循環(huán)在執(zhí)行的時候,工具自動將內層循環(huán)LOOP_J和外層循環(huán)LOOP_I合并為一整個大循環(huán),并實現(xiàn)了整個大循環(huán)的流水線操作,延遲的周期數為: (400-1) *1+8-1 =406個周期數,延遲大約為 408*2.5 = 1,020 ns

非完美循環(huán)中,內層和外層循環(huán)沒有合并,只有內層循環(huán)LOOP_J 實現(xiàn)了流水線執(zhí)行,進出內循環(huán)的浪費的時鐘周期增加了整個循環(huán)的時鐘周期,同時還有一些命令行沒有辦法跨越循環(huán)的層級實現(xiàn)調度上的優(yōu)化,這些因素都導致了設計的延遲的增加。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4613

    瀏覽量

    92956
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62666
  • 數據流
    +關注

    關注

    0

    文章

    119

    瀏覽量

    14363
收藏 人收藏

    評論

    相關推薦

    數字化車間——有哪些關鍵指標?

    數字化車間是智能制造的核心引擎,通過數字化技術和信息化手段,實現(xiàn)生產數據的實時采集、傳輸、分析和應用,提高生產效率和管理水平,增強競爭力。影響其性能的關鍵指標包括設備綜合效率(OEE)、時間開動率、性能開動率、合格品率等。
    的頭像 發(fā)表于 12-23 11:01 ?170次閱讀
    數字化車間——有哪些<b class='flag-5'>關鍵指</b>標?

    低噪聲運算放大器的關鍵指標特點、優(yōu)勢和應用場景

    低噪聲運算放大器的關鍵指標特點、優(yōu)勢和應用場景。 1 低噪聲 應用場景1: 在大部分高精度放大的應用中,都需要外部增加一款運放進行電流采樣放大,而在電路應用系統(tǒng)中一般輸入信號幅值比較小,這樣就要求運放自身的噪聲要遠
    的頭像 發(fā)表于 12-23 10:13 ?331次閱讀
    低噪聲運算放大器的<b class='flag-5'>關鍵指</b>標特點、優(yōu)勢和應用場景

    單臂螺旋天線:優(yōu)化通信性能的關鍵組件

    深圳探測器|單臂螺旋天線:優(yōu)化通信性能的關鍵組件
    的頭像 發(fā)表于 12-17 09:03 ?123次閱讀

    如何優(yōu)化 Llama 3 的輸入提示

    優(yōu)化輸入提示(prompt engineering)是提高人工智能模型輸出質量的關鍵步驟。對于Llama 3這樣的模型,優(yōu)化輸入提示可以幫助模型更準確地理解用戶的意圖,從而生成更相關和高質量的內容
    的頭像 發(fā)表于 10-27 14:39 ?413次閱讀

    在選擇SD-WAN提供商時,需要關注哪些關鍵指標?

    在選擇SD-WAN提供商時,應該關注以下關鍵指標: 1、帶寬利用率:SD-WAN應能有效利用可用帶寬,確保數據傳輸的高效與穩(wěn)定。 2、路徑選擇與負載均衡:SD-WAN需要能夠智能選擇最佳路徑并實現(xiàn)
    的頭像 發(fā)表于 09-30 12:24 ?246次閱讀

    高頻電路設計中的關鍵指

    為了確保高頻電路的高效運行和可靠性,一系列性能指標被提出并嚴格遵循。這些性能指標涵蓋了增益、通頻帶、選擇性、噪聲系數和穩(wěn)定性等多個方面,下面將逐一探討這些關鍵指標及其在高頻電路設計中的重要性。 增益
    的頭像 發(fā)表于 09-20 16:31 ?569次閱讀

    您想了解的數據采集DAQ關鍵指標都在這里了

    數據采集DAQ關鍵指標有哪些
    的頭像 發(fā)表于 09-03 13:52 ?410次閱讀
    您想了解的數據采集DAQ<b class='flag-5'>關鍵指</b>標都在這里了

    優(yōu)化 FPGA HLS 設計

    優(yōu)化 FPGA HLS 設計 用工具用 C 生成 RTL 的代碼基本不可讀。以下是如何在不更改任何 RTL 的情況下提高設計性能。 介紹 高級設計能夠以簡潔的方式捕獲設計,從而
    發(fā)表于 08-16 19:56

    一種在HLS中插入HDL代碼的方式

    很多人都比較反感用C/C++開發(fā)(HLS)FPGA,大家第一拒絕的理由就是耗費資源太多。但是HLS也有自己的優(yōu)點,除了快速構建算法外,還有一個就是接口的生成,尤其對于AXI類接口,按照標準語法就可以很方便地生成相關接口。
    的頭像 發(fā)表于 07-16 18:01 ?746次閱讀
    一種在<b class='flag-5'>HLS</b>中插入HDL代碼的方式

    電源濾波器選擇關鍵指標解析

    在電子設備日益普及的今天,電源濾波器作為保障電源質量、抑制電磁干擾的重要器件,其選擇和應用顯得尤為重要。本文維愛普電源濾波器小編將為您詳細介紹電源濾波器選擇時需要考慮的關鍵指標,幫助您更好地理解和應用電源濾波器。
    的頭像 發(fā)表于 06-18 10:46 ?454次閱讀
    電源濾波器選擇<b class='flag-5'>關鍵指</b>標解析

    部分TIA集成指令處理的方法介紹

    對于優(yōu)化的DB塊,可使用FILL_BLK指令或創(chuàng)建相同的UDT結構類型的DB塊,使用MOVE指令清零DB塊數據。
    發(fā)表于 04-15 09:34 ?1223次閱讀
    部分TIA集成<b class='flag-5'>指令</b>處理的方法介紹

    如何優(yōu)化HLS仿真腳本運行時間

    需求:由于自己目前一個 HLS 仿真腳本需要運行 1個多小時,先打算通過打印時間戳的方式找出最耗時的部分,然后想辦法優(yōu)化。
    的頭像 發(fā)表于 02-23 09:29 ?703次閱讀

    TVS選型四個關鍵指標及選型

    TVS選型四個關鍵指關鍵詞:TVS選型、工作電壓、瞬態(tài)電流、箝位電壓、電容值1.工作電壓(Vrwm)要選擇合適的TVS,工作電壓是首要考慮的指標。根據電路的最高電壓,選擇工作電壓稍高于最高電壓
    的頭像 發(fā)表于 01-26 08:03 ?1222次閱讀
    TVS選型四個<b class='flag-5'>關鍵指</b>標及選型

    TVS選型四個關鍵指標及選型

    可靠保護電路。 # 2. 箝位電壓(Vc) 箝位電壓是TVS開始工作并穩(wěn)定電壓范圍的關鍵。根據需要抑制的過電壓范圍,選擇合適的箝位電壓,確保TVS有效抑制過電壓。 TVS選型四個關鍵指標的大小選擇 關鍵詞:TVS選型、工作電壓、
    的頭像 發(fā)表于 01-24 15:39 ?866次閱讀
    TVS選型四個<b class='flag-5'>關鍵指</b>標及選型

    示波器的三大關鍵指標有哪些?

    示波器的三大關鍵指標有哪些? 示波器是一種用來觀察和測量電信號的儀器。它通過顯示電壓隨時間變化的圖形,使我們能夠觀察信號的振幅、頻率、相位和波形等特征。在選擇和使用示波器時,有三個關鍵指標需要我們
    的頭像 發(fā)表于 01-17 15:14 ?1431次閱讀