HLS任務(wù)級(jí)編程第一篇文章可看這里:
HLS之任務(wù)級(jí)并行編程
HLS的任務(wù)級(jí)并行性(Task-level Parallelism)分為兩種:一種是控制驅(qū)動(dòng)型;一種是數(shù)據(jù)驅(qū)動(dòng)型。對(duì)于控制驅(qū)動(dòng)型,用戶要手工添加DATAFLOWpragma,工具會(huì)在該pragma指定的區(qū)域內(nèi)判別任務(wù)之間的并行性,生成各進(jìn)程之間的模塊級(jí)控制信號(hào)。對(duì)于數(shù)據(jù)驅(qū)動(dòng)型,用于需要明確指定可并行執(zhí)行的任務(wù)。
從描述手段來看,控制驅(qū)動(dòng)型本質(zhì)上是由工具判定各任務(wù)能否并行執(zhí)行。用戶在對(duì)各函數(shù)描述時(shí)只要遵守DATAFLOW的要求即可。例如:讀取輸入數(shù)據(jù)應(yīng)該位于DATAFLOW區(qū)域的起始位置,寫入輸出數(shù)據(jù)應(yīng)位于該區(qū)域的終止位置。DATALOW區(qū)域內(nèi)的所有變量遵循“一次讀一次寫”原則。除非使用hls::stream,否則不支持反饋支路。不支持在指定條件下才執(zhí)行函數(shù)。不支持for在指定條件下退出(使用break語句)。但控制驅(qū)動(dòng)型比較靈活,這是因?yàn)镈ATAFLOW的作用對(duì)象可以是for循環(huán)也可以是函數(shù)。控制驅(qū)動(dòng)器適合于順序執(zhí)行的C函數(shù)。控制驅(qū)動(dòng)型模型帶來的好處包括:當(dāng)前函數(shù)在結(jié)束執(zhí)行之前后續(xù)函數(shù)可以開始執(zhí)行;函數(shù)在結(jié)束執(zhí)行之前可以重新開始執(zhí)行;兩個(gè)或更多順序函數(shù)可以同時(shí)開始執(zhí)行。我們看一個(gè)例子。如下圖所示,頂層函數(shù)diamond調(diào)用了4各函數(shù)funcA~funcD。
在沒有添加DATAFLOW的情況下,工具能自動(dòng)探測(cè)出funcB和funcC的并行性,這可從Schedule視圖中看到,如下圖所示。
添加DATAFLOW之后,對(duì)兩者性能進(jìn)行對(duì)比,如下圖所示(NO_TLP為沒有添加DATAFLOW的solution),從Latency角度看,兩者相當(dāng),但從interval角度看,DATAFLOW帶來的效果還是很明顯的。Interval從457降到了175。
再看數(shù)據(jù)驅(qū)動(dòng)型。數(shù)據(jù)驅(qū)動(dòng)型要求任務(wù)之前以stream作為接口,允許反饋支路。用戶需要明確通過hls::task指定可并行執(zhí)行的任務(wù)。對(duì)于上述函數(shù),我們可以將其改造為數(shù)據(jù)驅(qū)動(dòng)型,如下圖所示。代碼第98行聲明了4個(gè)stream,第99行~第102行通過hls::task指定并行任務(wù)。
將三者放在一起對(duì)比,如下圖所示。可以看到數(shù)據(jù)驅(qū)動(dòng)型無論在性能還是資源上都獲得最佳表現(xiàn)。
那么兩種類型能否混合使用呢?答案是肯定的,但是有限制的,這源于兩者的自身特征。可以在控制驅(qū)動(dòng)型中嵌入數(shù)據(jù)驅(qū)動(dòng)型,但反過來是不允許的。我們將上面的例子改造為控制驅(qū)動(dòng)型嵌入數(shù)據(jù)驅(qū)動(dòng)型的模式,如下圖所示。這里需要注意的是代碼第137行的DATAFLOWpragma,同時(shí)代碼第141行和第142行都設(shè)置了task,task接口為stream。此外也給出了Vitis HLS的Schedule視圖和Dataflow視圖。Dataflow視圖中也顯示了KPN。關(guān)于KPN可參閱這里。
https://en.wikipedia.org/wiki/Kahn_process_networks
責(zé)任編輯:彭菁
-
編程
+關(guān)注
關(guān)注
88文章
3682瀏覽量
94872 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4371瀏覽量
64204 -
HLS
+關(guān)注
關(guān)注
1文章
131瀏覽量
24649
發(fā)布評(píng)論請(qǐng)先 登錄
淺析HLS的任務(wù)級(jí)并行性

UCOSIII之任務(wù)優(yōu)先級(jí)對(duì)任務(wù)搶占的影響
【正點(diǎn)原子FPGA連載】第一章HLS簡(jiǎn)介-領(lǐng)航者ZYNQ之HLS 開發(fā)指南
FPGA高層次綜合HLS之Vitis HLS知識(shí)庫簡(jiǎn)析
HLS-1Hin人工智能訓(xùn)練系統(tǒng)
FPGA并行編程:基于HLS技術(shù)優(yōu)化硬件設(shè)計(jì)
如何在不需要特殊庫或類的情況下實(shí)現(xiàn)C代碼并行性?

Dataflow | 粗粒度并行優(yōu)化的任務(wù)級(jí)流水

基于數(shù)據(jù)驅(qū)動(dòng)的任務(wù)并行多重網(wǎng)格應(yīng)用
hls之xfopencv
FPGA基礎(chǔ)之HLS
研討會(huì):如何利用最新Vitis HLS提高任務(wù)級(jí)并行性?

Vitis HLS相關(guān)問答詳解
Vitis HLS:使用任務(wù)級(jí)并行性的高性能設(shè)計(jì)

評(píng)論