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

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

3天內(nèi)不再提示

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

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

HLS 優(yōu)化設計的最關鍵指令有兩個:一個是流水線 (pipeline)指令,一個是數(shù)據(jù)流(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)體在調(diào)度地過程中是彼此獨立的。

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

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

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

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

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

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

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

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

非完美循環(huán):循環(huán)的主體內(nèi)容分布在循環(huán)的各個層次或內(nèi)層循環(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í)行的時候,工具自動將內(nèi)層循環(huán)LOOP_J和外層循環(huán)LOOP_I合并為一整個大循環(huán),并實現(xiàn)了整個大循環(huán)的流水線操作,延遲的周期數(shù)為: (400-1) *1+8-1 =406個周期數(shù),延遲大約為 408*2.5 = 1,020 ns

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

責任編輯:lq

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

    關注

    23

    文章

    4592

    瀏覽量

    92527
  • 函數(shù)
    +關注

    關注

    3

    文章

    4286

    瀏覽量

    62337
  • 數(shù)據(jù)流

    關注

    0

    文章

    119

    瀏覽量

    14321
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    高頻電路設計中的關鍵指

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

    您想了解的數(shù)據(jù)采集DAQ關鍵指標都在這里了

    數(shù)據(jù)采集DAQ關鍵指標有哪些
    的頭像 發(fā)表于 09-03 13:52 ?293次閱讀
    您想了解的數(shù)據(jù)采集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 ?641次閱讀
    一種在<b class='flag-5'>HLS</b>中插入HDL代碼的方式

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

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

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

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

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

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

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

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

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

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

    AMD-Xilinx的Vitis-HLS編譯指示小結

    。 含多個退出條件的循環(huán) 由于篇幅原因,這里就不細講了,詳情可以參考Vitis高層次綜合用戶指南 (UG1399) 陣列優(yōu)化指令 pragma HLS array_partition
    發(fā)表于 12-31 21:20

    研討會:利用編譯器指令提升AMD Vitis? HLS 設計性能

    /C++ 代碼為 AMD 設備上可編程邏輯的 RTL 代碼加速 IP 創(chuàng)建。 在 Vitis HLS 中,優(yōu)化指令脫穎而出成為最強大的工具之一,使設計人員能夠從相同底層 C 模型出發(fā),探索各種架構
    的頭像 發(fā)表于 12-05 09:10 ?505次閱讀
    研討會:利用編譯器<b class='flag-5'>指令</b>提升AMD Vitis? <b class='flag-5'>HLS</b> 設計性能

    CAN XL的關鍵指標和應用場景

    目前汽車行業(yè)正處于電子電氣架構從分散式、嵌入式向集中式、集成式方向發(fā)展的關鍵階段,車內(nèi)應用豐富多樣,通信速率需求差異較大。
    的頭像 發(fā)表于 11-17 10:53 ?1433次閱讀
    CAN XL的<b class='flag-5'>關鍵指</b>標和應用場景

    使用Vivado高層次綜合(HLS)進行FPGA設計的簡介

    電子發(fā)燒友網(wǎng)站提供《使用Vivado高層次綜合(HLS)進行FPGA設計的簡介.pdf》資料免費下載
    發(fā)表于 11-16 09:33 ?0次下載
    使用Vivado高層次綜合(<b class='flag-5'>HLS</b>)進行FPGA設計的簡介