91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

HLS優(yōu)化設(shè)計(jì)的最關(guān)鍵指令

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

掃碼添加小助手

加入工程師交流群

HLS 優(yōu)化設(shè)計(jì)的最關(guān)鍵指令有兩個(gè):一個(gè)是流水線 (pipeline)指令,一個(gè)是數(shù)據(jù)流(dataflow)指令。正確地使用好這兩個(gè)指令能夠增強(qiáng)算法地并行性,提升吞吐量,降低延遲但是需要遵循一定的代碼風(fēng)格。展開(kāi) (unroll) 指令是只針對(duì) for 循環(huán)的展開(kāi)指令,和流水線指令關(guān)系密切,所以我們放在一起首先我們來(lái)看一下這三個(gè)指令在 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ū)域進(jìn)行優(yōu)化,這個(gè)指令不包含流水線執(zhí)行的概念,單純地將循環(huán)體展開(kāi)使用更多地硬件資源實(shí)現(xiàn),保證并行循環(huán)體在調(diào)度地過(guò)程中是彼此獨(dú)立的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

責(zé)任編輯:lq

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

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98053
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67507
  • 數(shù)據(jù)流
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HLS設(shè)計(jì)中的BRAM使用優(yōu)勢(shì)

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

    通過(guò)vivado HLS設(shè)計(jì)一個(gè)FIR低通濾波器

    Vivado HLS是一款強(qiáng)大的高層次綜合工具,可將C/C++代碼轉(zhuǎn)換為硬件描述語(yǔ)言(HDL),顯著提升FPGA開(kāi)發(fā)效率。
    的頭像 發(fā)表于 01-20 16:19 ?310次閱讀
    通過(guò)vivado <b class='flag-5'>HLS</b>設(shè)計(jì)一個(gè)FIR低通濾波器

    從硬件設(shè)計(jì)優(yōu)化到可靠性的挑戰(zhàn)

    1、指令冗余 在雙字節(jié)指令和三字節(jié)指令后插入兩個(gè)NOP指令,防止拋費(fèi)程序錯(cuò)誤執(zhí)行后續(xù)指令。 對(duì)關(guān)鍵指令
    發(fā)表于 11-25 07:20

    請(qǐng)問(wèn)Keil的優(yōu)化等級(jí)到底該如何選擇?

    能、資源占用和開(kāi)發(fā)效率的關(guān)鍵。Keil MDK通常提供以下幾個(gè)主要的優(yōu)化等級(jí)選項(xiàng)。 -O0 (無(wú)優(yōu)化 / Optimization Level 0): 目標(biāo): 提供最佳的調(diào)試體驗(yàn)。 行為: 編譯器幾乎不
    發(fā)表于 11-20 07:51

    詳解示波器的三大關(guān)鍵指標(biāo)

    這些問(wèn)題,很可能是因?yàn)槟銢](méi)有真正理解示波器的三大關(guān)鍵指標(biāo):帶寬、采樣率和存儲(chǔ)深度。今天,我們就來(lái)徹底搞懂這三個(gè)參數(shù),讓你的調(diào)試工作事半功倍!
    的頭像 發(fā)表于 10-29 17:45 ?4025次閱讀
    詳解示波器的三大<b class='flag-5'>關(guān)鍵指</b>標(biāo)

    浮點(diǎn)運(yùn)算單元的設(shè)計(jì)和優(yōu)化

    浮點(diǎn)運(yùn)算單元的設(shè)計(jì)和優(yōu)化可以從以下幾個(gè)方面入手: 1.浮點(diǎn)寄存器設(shè)計(jì):為了實(shí)現(xiàn)浮點(diǎn)運(yùn)算指令子集(RV32F或者RV32D),需要添加一組專用的浮點(diǎn)寄存器組,總共需要32個(gè)通用浮點(diǎn)寄存器。其中
    發(fā)表于 10-22 07:04

    淺談合科泰MOS管的優(yōu)化策略

    在開(kāi)關(guān)電源、電機(jī)驅(qū)動(dòng)和新能源逆變器等應(yīng)用中,MOS管的開(kāi)關(guān)速度和電路效率直接影響整體性能和能耗。而MOS管的開(kāi)關(guān)速度與電路效率,它們之間有著怎樣的關(guān)聯(lián),合科泰又是如何通過(guò)多項(xiàng)技術(shù)創(chuàng)新對(duì)MOS管進(jìn)行優(yōu)化的呢?提升MOS管的這兩個(gè)關(guān)鍵指標(biāo),助力工程師實(shí)現(xiàn)更高能效的設(shè)計(jì)。
    的頭像 發(fā)表于 09-22 11:03 ?923次閱讀

    便攜式礦物地物光譜儀選購(gòu)指南:關(guān)鍵指標(biāo)與實(shí)用技巧揭秘

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

    利用Arm i8mm指令優(yōu)化llama.cpp

    本文將為你介紹如何利用 Arm i8mm 指令,具體來(lái)說(shuō),是通過(guò)帶符號(hào) 8 位整數(shù)矩陣乘加指令 smmla,來(lái)優(yōu)化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。
    的頭像 發(fā)表于 07-24 09:51 ?1908次閱讀
    利用Arm i8mm<b class='flag-5'>指令</b><b class='flag-5'>優(yōu)化</b>llama.cpp

    如何在Unified IDE中創(chuàng)建視覺(jué)庫(kù)HLS組件

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

    使用AMD Vitis Unified IDE創(chuàng)建HLS組件

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

    如何使用AMD Vitis HLS創(chuàng)建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 來(lái)創(chuàng)建一個(gè) HLS IP,通過(guò) AXI4 接口從存儲(chǔ)器讀取數(shù)據(jù)、執(zhí)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,然后將數(shù)據(jù)寫回存儲(chǔ)器。接著會(huì)在 AMD Vivado Design Suite 設(shè)計(jì)中使用此 HLS
    的頭像 發(fā)表于 06-13 09:50 ?1869次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b>創(chuàng)建<b class='flag-5'>HLS</b> IP

    激光器的多樣分類與選型關(guān)鍵指標(biāo)全解析

    理解各類激光器的特點(diǎn)及其關(guān)鍵指標(biāo),對(duì)于確保應(yīng)用效果至關(guān)重要。本文將對(duì)此進(jìn)行全面解析。 激光器的多樣分類 激光器作為現(xiàn)代科技的重要產(chǎn)物,根據(jù)不同的分類標(biāo)準(zhǔn),可以劃分為多個(gè)種類。以下是從幾個(gè)主要維度對(duì)激光器的分
    的頭像 發(fā)表于 04-23 06:26 ?1685次閱讀
    激光器的多樣分類與選型<b class='flag-5'>關(guān)鍵指</b>標(biāo)全解析

    Vivado HLS設(shè)計(jì)流程

    為了盡快把新產(chǎn)品推向市場(chǎng),數(shù)字系統(tǒng)的設(shè)計(jì)者需要考慮如何加速設(shè)計(jì)開(kāi)發(fā)的周期。設(shè)計(jì)加速主要可以從“設(shè)計(jì)的重用”和“抽象層級(jí)的提升”這兩個(gè)方面來(lái)考慮。Xilinx 推出的 Vivado HLS 工具可以
    的頭像 發(fā)表于 04-16 10:43 ?1624次閱讀
    Vivado <b class='flag-5'>HLS</b>設(shè)計(jì)流程

    Arm解讀Armv9 CPU為何是打造高性能、高能效移動(dòng)計(jì)算的關(guān)鍵

    CPU 性能的關(guān)鍵指標(biāo)的重要性。與主要將頻率作為性能指標(biāo)的做法不同,IPC 衡量的是 CPU 每個(gè)時(shí)鐘周期內(nèi)能處理的指令數(shù)。對(duì)于移動(dòng)設(shè)備而言,電池續(xù)航和散熱管理是影響實(shí)際應(yīng)用、用戶體驗(yàn)和設(shè)備處理復(fù)雜
    的頭像 發(fā)表于 03-14 15:51 ?1578次閱讀