国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

HLS優化設計的最關鍵指令

YCqV_FPGA_EETre ? 來源:FPGA開發圈 ? 作者:FPGA開發圈 ? 2021-01-14 09:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HLS 優化設計的最關鍵指令有兩個:一個是流水線 (pipeline)指令,一個是數據流(dataflow)指令。正確地使用好這兩個指令能夠增強算法地并行性,提升吞吐量,降低延遲但是需要遵循一定的代碼風格。展開 (unroll) 指令是只針對 for 循環的展開指令,和流水線指令關系密切,所以我們放在一起首先我們來看一下這三個指令在 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 循環的代碼區域進行優化,這個指令不包含流水線執行的概念,單純地將循環體展開使用更多地硬件資源實現,保證并行循環體在調度地過程中是彼此獨立的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

責任編輯:lq

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

    關注

    23

    文章

    4784

    瀏覽量

    98044
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67502
  • 數據流
    +關注

    關注

    0

    文章

    129

    瀏覽量

    16196
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HLS設計中的BRAM使用優勢

    高層次綜合(HLS)是一種將高級編程語言(如C、C++或SystemC)轉換為硬件描述語言(HDL)的設計方法。在FPGA設計中,設計者可以靈活地利用FPGA內部的資源,如塊RAM(BRAM)。雖然
    的頭像 發表于 01-28 14:36 ?244次閱讀

    通過vivado HLS設計一個FIR低通濾波器

    Vivado HLS是一款強大的高層次綜合工具,可將C/C++代碼轉換為硬件描述語言(HDL),顯著提升FPGA開發效率。
    的頭像 發表于 01-20 16:19 ?305次閱讀
    通過vivado <b class='flag-5'>HLS</b>設計一個FIR低通濾波器

    從硬件設計優化到可靠性的挑戰

    1、指令冗余 在雙字節指令和三字節指令后插入兩個NOP指令,防止拋費程序錯誤執行后續指令。 對關鍵指令
    發表于 11-25 07:20

    請問Keil的優化等級到底該如何選擇?

    能、資源占用和開發效率的關鍵。Keil MDK通常提供以下幾個主要的優化等級選項。 -O0 (無優化 / Optimization Level 0): 目標: 提供最佳的調試體驗。 行為: 編譯器幾乎不
    發表于 11-20 07:51

    詳解示波器的三大關鍵指

    這些問題,很可能是因為你沒有真正理解示波器的三大關鍵指標:帶寬、采樣率和存儲深度。今天,我們就來徹底搞懂這三個參數,讓你的調試工作事半功倍!
    的頭像 發表于 10-29 17:45 ?4019次閱讀
    詳解示波器的三大<b class='flag-5'>關鍵指</b>標

    浮點運算單元的設計和優化

    浮點運算單元的設計和優化可以從以下幾個方面入手: 1.浮點寄存器設計:為了實現浮點運算指令子集(RV32F或者RV32D),需要添加一組專用的浮點寄存器組,總共需要32個通用浮點寄存器。其中
    發表于 10-22 07:04

    淺談合科泰MOS管的優化策略

    在開關電源、電機驅動和新能源逆變器等應用中,MOS管的開關速度和電路效率直接影響整體性能和能耗。而MOS管的開關速度與電路效率,它們之間有著怎樣的關聯,合科泰又是如何通過多項技術創新對MOS管進行優化的呢?提升MOS管的這兩個關鍵指標,助力工程師實現更高能效的設計。
    的頭像 發表于 09-22 11:03 ?918次閱讀

    便攜式礦物地物光譜儀選購指南:關鍵指標與實用技巧揭秘

    選擇和技術參數的考量。因此,了解這些儀器的關鍵指標和實用技巧,能幫助您做出更明智的決策,滿足各類礦物分析需求。 定義與工作原理 便攜式礦物地物光譜儀是一種便于現場使用的設備,主要利用地物光譜技術進行礦物成分分析
    的頭像 發表于 08-19 11:31 ?795次閱讀
    便攜式礦物地物光譜儀選購指南:<b class='flag-5'>關鍵指</b>標與實用技巧揭秘

    利用Arm i8mm指令優化llama.cpp

    本文將為你介紹如何利用 Arm i8mm 指令,具體來說,是通過帶符號 8 位整數矩陣乘加指令 smmla,來優化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。
    的頭像 發表于 07-24 09:51 ?1901次閱讀
    利用Arm i8mm<b class='flag-5'>指令</b><b class='flag-5'>優化</b>llama.cpp

    如何在Unified IDE中創建視覺庫HLS組件

    最近我們分享了開發者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 傳統 IDE)和開發者分享|AMD Vitis HLS 系列 2:AMD
    的頭像 發表于 07-02 10:55 ?1440次閱讀
    如何在Unified IDE中創建視覺庫<b class='flag-5'>HLS</b>組件

    使用AMD Vitis Unified IDE創建HLS組件

    這篇文章在開發者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 傳統 IDE) 的基礎上撰寫,但使用的是 AMD Vitis Unified IDE,而不是之前傳統版本的 Vitis HLS
    的頭像 發表于 06-20 10:06 ?2329次閱讀
    使用AMD Vitis Unified IDE創建<b class='flag-5'>HLS</b>組件

    如何使用AMD Vitis HLS創建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 來創建一個 HLS IP,通過 AXI4 接口從存儲器讀取數據、執行簡單的數學運算,然后將數據寫回存儲器。接著會在 AMD Vivado Design Suite 設計中使用此 HLS
    的頭像 發表于 06-13 09:50 ?1865次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b>創建<b class='flag-5'>HLS</b> IP

    激光器的多樣分類與選型關鍵指標全解析

    理解各類激光器的特點及其關鍵指標,對于確保應用效果至關重要。本文將對此進行全面解析。 激光器的多樣分類 激光器作為現代科技的重要產物,根據不同的分類標準,可以劃分為多個種類。以下是從幾個主要維度對激光器的分
    的頭像 發表于 04-23 06:26 ?1681次閱讀
    激光器的多樣分類與選型<b class='flag-5'>關鍵指</b>標全解析

    Vivado HLS設計流程

    為了盡快把新產品推向市場,數字系統的設計者需要考慮如何加速設計開發的周期。設計加速主要可以從“設計的重用”和“抽象層級的提升”這兩個方面來考慮。Xilinx 推出的 Vivado HLS 工具可以
    的頭像 發表于 04-16 10:43 ?1622次閱讀
    Vivado <b class='flag-5'>HLS</b>設計流程

    Arm解讀Armv9 CPU為何是打造高性能、高能效移動計算的關鍵

    CPU 性能的關鍵指標的重要性。與主要將頻率作為性能指標的做法不同,IPC 衡量的是 CPU 每個時鐘周期內能處理的指令數。對于移動設備而言,電池續航和散熱管理是影響實際應用、用戶體驗和設備處理復雜
    的頭像 發表于 03-14 15:51 ?1573次閱讀