一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲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

    文章

    4709

    瀏覽量

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

    關(guān)注

    3

    文章

    4379

    瀏覽量

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

    關(guān)注

    0

    文章

    125

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    如何在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 ?474次閱讀
    如何在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 ?955次閱讀
    使用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 ?635次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b>創(chuàng)建<b class='flag-5'>HLS</b> IP

    使用各種TensorFlow模型運(yùn)行模型優(yōu)化器時(shí)遇到錯(cuò)誤非法指令怎么解決?

    使用各種 TensorFlow 模型運(yùn)行模型優(yōu)化器時(shí)遇到 [i]錯(cuò)誤非法指令
    發(fā)表于 03-05 09:56

    大語(yǔ)言模型的解碼策略與關(guān)鍵優(yōu)化總結(jié)

    的技術(shù)參考。主要涵蓋貪婪解碼、束搜索、采樣技術(shù)等核心解碼方法,以及溫度參數(shù)、懲罰機(jī)制等關(guān)鍵優(yōu)化手段。大型語(yǔ)言模型的技術(shù)基礎(chǔ)大型語(yǔ)言模型是當(dāng)代自然語(yǔ)言處理技術(shù)的核心
    的頭像 發(fā)表于 02-18 12:00 ?573次閱讀
    大語(yǔ)言模型的解碼策略與<b class='flag-5'>關(guān)鍵</b><b class='flag-5'>優(yōu)化</b>總結(jié)

    SAR ADC的工作過(guò)程和關(guān)鍵指標(biāo)

    ADC以其低功耗、高精度、小尺寸以及適中的速度和分辨率,在中等至高分辨率應(yīng)用中占據(jù)主導(dǎo)地位。本文將詳細(xì)介紹SAR ADC的概念、工作過(guò)程、關(guān)鍵指標(biāo)以及其在不同領(lǐng)域的應(yīng)用。
    的頭像 發(fā)表于 02-02 13:57 ?1369次閱讀

    前端性能優(yōu)化:提升用戶體驗(yàn)的關(guān)鍵策略

    在互聯(lián)網(wǎng)飛速發(fā)展的今天,用戶對(duì)于網(wǎng)頁(yè)的加載速度和響應(yīng)性能要求越來(lái)越高。前端性能優(yōu)化成為了提升用戶體驗(yàn)、增強(qiáng)網(wǎng)站競(jìng)爭(zhēng)力的關(guān)鍵策略。一個(gè)性能良好的前端應(yīng)用,能夠快速響應(yīng)用戶的操作,減少等待時(shí)間,為用戶
    的頭像 發(fā)表于 01-22 10:08 ?479次閱讀

    數(shù)字化車間——有哪些關(guān)鍵指標(biāo)?

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

    低噪聲運(yùn)算放大器的關(guān)鍵指標(biāo)特點(diǎn)、優(yōu)勢(shì)和應(yīng)用場(chǎng)景

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

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

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

    在選擇SD-WAN提供商時(shí),需要關(guān)注哪些關(guān)鍵指標(biāo)?

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

    高頻電路設(shè)計(jì)中的關(guān)鍵指標(biāo)

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

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

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

    優(yōu)化 FPGA HLS 設(shè)計(jì)

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

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

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