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

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

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

關(guān)于pipeline 以及 unroll 指令的介紹

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-09 09:53 ? 次閱讀

本文轉(zhuǎn)載自: XILINX開發(fā)者社區(qū)微信公眾號(hào)

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

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

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

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

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

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

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)展開,而使用展開指令的循環(huán)并沒有給定對(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)展開的層次也越高,最終會(huì)導(dǎo)致使用更大面積的資源去實(shí)現(xiàn),同時(shí)并行性也更高。

pIYBAGAJe8GAUqsaAAOfRydUAUE307.png

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

在循環(huán)流水線優(yōu)化的過程中,有一個(gè)完美循環(huán),半完美循環(huán)和非完美循環(huán)的代碼風(fēng)格概念,只有當(dāng)流水線循環(huán)完美或半完美時(shí),才可以將嵌套循環(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)的各個(gè)層次或內(nèi)層循環(huán)的邊界是變量。

pIYBAGAJfAOAJQTrAAO0fO_yjLU263.png

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

o4YBAGAJfEGAEP37AABWikWhzdc769.png

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

本文關(guān)于pipeline 以及 unroll 指令的介紹到此結(jié)束,下篇文章我們將著重介紹 daraflow 指令。

審核編輯:何安

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

    關(guān)注

    1

    文章

    606

    瀏覽量

    35617
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    plc基本指令的應(yīng)用有哪些

    控制、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算、比較操作、程序控制以及基本的輸入輸出操作等多個(gè)方面。 一、邏輯運(yùn)算指令 邏輯運(yùn)算指令是PLC編程中最常用的指令之一,它們用于實(shí)現(xiàn)基本的邏輯運(yùn)算功能,包括邏
    的頭像 發(fā)表于 10-21 17:16 ?287次閱讀

    微處理器的指令集架構(gòu)介紹

    微處理器的指令集架構(gòu)(Instruction Set Architecture,ISA)是計(jì)算機(jī)體系結(jié)構(gòu)中至關(guān)重要的部分,它定義了微處理器能夠執(zhí)行的操作和指令的集合,以及這些指令如何被
    的頭像 發(fā)表于 08-22 10:53 ?848次閱讀

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard錄音沒有聲音怎么解決?

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard錄音沒有聲音,SD卡中有文件,但是沒有聲音怎么解決啊
    發(fā)表于 06-28 06:43

    三菱plc累加指令怎么用

    中,累加指令通常使用ADD指令來實(shí)現(xiàn)。以下是關(guān)于三菱PLC累加指令的詳細(xì)介紹。 累加指令的基本概
    的頭像 發(fā)表于 06-20 11:34 ?3157次閱讀

    三菱plc trd指令詳解介紹

    為“Transfer Data”。本文將詳細(xì)介紹TRD指令的基本概念、語法結(jié)構(gòu)、功能特點(diǎn)以及應(yīng)用實(shí)例。 一、TRD指令的基本概念 1.1 TRD指令
    的頭像 發(fā)表于 06-20 11:29 ?2591次閱讀

    西門子S7-1200 PLC的指令介紹

    了最新的技術(shù),為用戶提供了更為高效、靈活的控制方案。本文將詳細(xì)介紹S7-1200 PLC的指令系統(tǒng),包括其指令分類、具體指令功能以及在實(shí)際應(yīng)
    的頭像 發(fā)表于 06-18 14:52 ?2254次閱讀

    plc控制伺服電機(jī)的指令有哪些

    PLC(可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的控制設(shè)備。伺服電機(jī)作為執(zhí)行元件,可以通過PLC進(jìn)行精確控制。以下是關(guān)于PLC控制伺服電機(jī)的指令的詳細(xì)介紹。 概述 PLC控制伺服電機(jī)
    的頭像 發(fā)表于 06-12 11:39 ?1869次閱讀

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

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

    藍(lán)牙雙模音頻模塊支持串口AT指令控制介紹

    藍(lán)牙音頻模塊支持串口AT指令控制介紹,這里推薦BT401藍(lán)牙模塊,功能簡(jiǎn)介如下: BT401模塊是一款支持藍(lán)牙、U盤、TF卡播放的5合1的解決方案。模組的亮點(diǎn)在支持無損音樂的播放,以及簡(jiǎn)單明了的串口控制功能,支持BLE透?jìng)鳎?/div>
    的頭像 發(fā)表于 03-28 11:27 ?670次閱讀
    藍(lán)牙雙模音頻模塊支持串口AT<b class='flag-5'>指令</b>控制<b class='flag-5'>介紹</b>

    淺析SpinalHDL中Pipeline中的復(fù)位定制

    之前有系列文章介紹了SpinalHDL中Pipeline的使用,最近在一個(gè)功能模塊中真實(shí)的使用了這個(gè)lib。
    的頭像 發(fā)表于 03-17 17:31 ?973次閱讀
    淺析SpinalHDL中<b class='flag-5'>Pipeline</b>中的復(fù)位定制

    什么是pipeline?Go中構(gòu)建流數(shù)據(jù)pipeline的技術(shù)

    本文介紹了在 Go 中構(gòu)建流數(shù)據(jù)pipeline的技術(shù)。 處理此類pipeline中的故障很棘手,因?yàn)?b class='flag-5'>pipeline中的每個(gè)階段可能會(huì)阻止嘗試向下游發(fā)送值,并且下游階段可能不再關(guān)心傳
    的頭像 發(fā)表于 03-11 10:16 ?535次閱讀

    AMD-Xilinx的Vitis-HLS編譯指示小結(jié)

    流水線指令 pragma HLS pipeline 通過流水線提高性能是計(jì)算機(jī)架構(gòu)設(shè)計(jì)的8個(gè)偉大思想之一,不管是硬件設(shè)計(jì)還是軟件設(shè)計(jì),流水線設(shè)計(jì)(pipeline)都能夠用更多的資源來實(shí)現(xiàn)高速
    發(fā)表于 12-31 21:20

    如何在zcu102板卡上創(chuàng)建pipeline呢?

    DisplayPort 1.4 Tx Subsystem core的最簡(jiǎn)pipeline就是如它的linux driver wiki page里的figure-4那樣,framebuffer_read+DP+video_phy。
    的頭像 發(fā)表于 12-29 10:09 ?489次閱讀

    【愛芯派 Pro 開發(fā)板試用體驗(yàn)】ax650使用ax-pipeline進(jìn)行推理

    ax650使用ax-pipeline進(jìn)行推理 搭建交叉編譯環(huán)境 拉取ax-pipeline源碼及子模塊 git clone --recursive https://github.com
    發(fā)表于 12-19 17:36

    PLC常見的傳送指令介紹

    單一數(shù)據(jù)傳送指令用于傳送一個(gè)數(shù)據(jù),根據(jù)傳送數(shù)據(jù)的字長(zhǎng)不同,可分為字節(jié)、字、雙字和實(shí)數(shù)傳送指令。單一數(shù)據(jù)傳送指令的功能是在EN端有輸入(即EN=1)時(shí),將IN端指定單元中的數(shù)據(jù)送入OUT端指定的單元中。
    發(fā)表于 12-07 09:46 ?2543次閱讀
    PLC常見的傳送<b class='flag-5'>指令</b><b class='flag-5'>介紹</b>