在 8 月 3 日舉行的針對(duì)如何利用 AMD Vitis HLS 提高任務(wù)級(jí)并行性的網(wǎng)絡(luò)研討會(huì)中,我們深入探討了任務(wù)級(jí)并行性的相關(guān)優(yōu)勢(shì)和使用方法。本次研討會(huì)中我們收到了來自廣大用戶和網(wǎng)友的熱情提問,針對(duì)代表性較強(qiáng)的問題,專家在線進(jìn)行了集中答疑,研討會(huì)后我們另精選出部分高頻問題在本文中做出進(jìn)一步解答。
1. 所謂多任務(wù),在 C/C++ 代碼編寫方面是否有新的規(guī)則或要求?或是會(huì)自動(dòng)進(jìn)行多任務(wù)的切分?
需要手工在 C++ 代碼里明確指定可并行執(zhí)行的任務(wù)(用 task,添加頭文件 hls_task.h),同時(shí)可并行執(zhí)行的 task 接口(對(duì)應(yīng) C++ 函數(shù)的形參)必須是 stream 或 stream_of_blocks。
2. 數(shù)據(jù)驅(qū)動(dòng)型設(shè)計(jì)要求反饋指的是什么呢?可以舉個(gè)例子嗎?
數(shù)據(jù)驅(qū)動(dòng)型支持反饋不是要求反饋,例如:funcA 輸出給 funcB, funcB 輸出給 funcC,funcC 的有一個(gè)輸出給到 funcA 構(gòu)成反饋支路。簡(jiǎn)單地說,數(shù)據(jù)流向不是單一向前的。
3. 具體代碼應(yīng)用中怎么快速識(shí)別出那兩種并行任務(wù)的區(qū)別在哪里?
要從數(shù)據(jù)流的角度考慮,例如,數(shù)據(jù)流單一流動(dòng)且后續(xù)用到的數(shù)據(jù)依賴于之前函數(shù)的輸出,這種情況下是控制驅(qū)動(dòng)型。funcA -> funcB -> funcC -> funD
如果數(shù)據(jù)流形成分支,但仍有依賴關(guān)系,比如 funcA -> funcB1,同時(shí) funcA -> funcB2,那么 funcB1 和 funcB2 就是并行執(zhí)行的兩個(gè)任務(wù),這就是數(shù)據(jù)驅(qū)動(dòng)型。
4. 我們?cè)谑褂?C/C++ 描述算法時(shí),只需關(guān)注算法本身就可以了,但是 FPGA 好像不是這樣,比如 C/C++ 沒有時(shí)序的概念, HLS 如何解決這個(gè)問題?
HLS 工作原理主要有兩大內(nèi)容:Schedule,這個(gè)過程是提取狀態(tài)控制的過程,判斷什么時(shí)候執(zhí)行什么操作;Binding,這個(gè)過程是指定這些操作用 FPGA 內(nèi)的什么資源來實(shí)現(xiàn)。前者管理時(shí)序,后者管理資源。
5. 請(qǐng)問在直播講解的示例中,Data_TLP 為什么能帶來這么大的性能提升?示例中任務(wù)不是多么復(fù)雜,為什么 DATAFLOW 的延遲和 II 會(huì)那么高?
因?yàn)?DATA_TLP 是多個(gè)任務(wù)并行執(zhí)行,而 DATAFLOW 盡管相比于原始已經(jīng)有了并行性,但是一種流水的方式,所以延遲和II 都會(huì)比純粹的并行多任務(wù)要大。
6. Stream 如果是 fifo,可以通過 pragma 指定深度嗎?
可以不用 pragma 指定,在定義 stream 時(shí)就可以指定,例如:hls_stream,當(dāng)然也可以通過 pragma STREAM 指定。
7. HLS 是否對(duì)硬件有特殊要求?
使用 Vitis HLS,只要芯片型號(hào)是 AMD Xilinx 7 系列 FPGA 到 Versal Adaptive SoC 芯片就可以。
8. Task 這個(gè)語法,在 2023 之前的版本里支持嗎?
從 Vitis HLS 2022.2 版本開始支持。
9. HLS 能編寫成一個(gè) IP,用于流片嗎?
這個(gè)需要先了解 HLS 的本質(zhì):它是把高層次語言比如 C++/C 描述的算法轉(zhuǎn)換成傳統(tǒng)的硬件語言,最終在 FPGA 上實(shí)現(xiàn)。采用 AMD Vitis HLS 時(shí),選擇的目標(biāo)芯片只能是 AMD 的 FPGA。但從廣義上來講,如果生成的 RTL 代碼不受具體 FPGA 芯片型號(hào)的限制,可以封裝成 IP 使用,但到流片還有很大一段距離。
10. 請(qǐng)問 HLS 在做協(xié)議組幀方面,與 Verilog 相比是否更有優(yōu)勢(shì)?
HLS 在復(fù)雜算法方面的實(shí)現(xiàn)上更有優(yōu)勢(shì),像這種協(xié)議組幀更適合用 HDL 比如 Verilog 或 VHDL 描述。
11. HLS 設(shè)計(jì)的驗(yàn)證如何保證充分性?
這個(gè)要從 C++ 測(cè)試平臺(tái)的代碼覆蓋率角度考慮,要專門的工具來測(cè)試代碼覆蓋率,所以要保證驗(yàn)證的重復(fù)性就要保證代碼覆蓋率為 100%。
12. 要用好 HLS 有沒有學(xué)習(xí) Verilog 的必要?
如果你是軟件工程師,沒有 FPGA 背景知識(shí),那么學(xué)習(xí) HLS 需要先了解一下 FPGA 的內(nèi)部結(jié)構(gòu)和工作機(jī)制,沒有多大必要專門學(xué)習(xí) Verilog。
13. 如何對(duì) HLS 工程進(jìn)行時(shí)鐘頻率的提升優(yōu)化?
首先,要從算法本身考慮,結(jié)合數(shù)據(jù)流進(jìn)行算法分割。此外還有兩個(gè)方面要考慮:一是代碼風(fēng)格,盡可能保證 C++ 代碼風(fēng)格遵循 HLS 的規(guī)范,二是如何使用 pragma,通過 pragma 來改善性能。
14. HLS 的線性代數(shù)庫(kù)被移除后,還有什么庫(kù)函數(shù)可以方便地實(shí)現(xiàn)矩陣乘法嗎?
HLS 線性代數(shù)庫(kù)并沒有被移除,而是統(tǒng)一放到了 Vitis Library 里了。
這里既有矩陣乘也有矩陣分解。
15. HLS 封裝的 IP 能像 Verilog 那樣做參數(shù)化選擇嗎?
所謂 HLS 封裝 IP 是指 Vitis HLS 把最終生成的 RTL 代碼封裝為 IP 供 Vivado 使用,這時(shí)已經(jīng)完成了 C/C++ 到 RTL 代碼的轉(zhuǎn)換,所以封裝的 IP 是無法參數(shù)化的。
16. 本來模塊單獨(dú)沒有時(shí)序問題,加上 DATAFLOW 后時(shí)序問題就出現(xiàn)了,而且定位不到問題點(diǎn),DATAFLOW 是否會(huì)影響時(shí)序?
DATAFLOW 會(huì)增加 Memory 的開銷,也就增加了資源利用率,間接影響時(shí)序。但你要先具體看一下時(shí)序問題出現(xiàn)在哪里。
審核編輯:湯梓紅
-
amd
+關(guān)注
關(guān)注
25文章
5645瀏覽量
138968 -
Verilog
+關(guān)注
關(guān)注
30文章
1370瀏覽量
114076 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4405瀏覽量
66792 -
C++
+關(guān)注
關(guān)注
22文章
2121瀏覽量
76684 -
Vitis
+關(guān)注
關(guān)注
0文章
154瀏覽量
8253
原文標(biāo)題:Vitis HLS 研討會(huì)精彩回放及問答詳解
文章出處:【微信號(hào):gh_2d1c7e2d540e,微信公眾號(hào):XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用AMD Vitis HLS創(chuàng)建HLS IP
使用AMD Vitis Unified IDE創(chuàng)建HLS組件
FPGA高層次綜合HLS之Vitis HLS知識(shí)庫(kù)簡(jiǎn)析
使用Vitis HLS創(chuàng)建屬于自己的IP相關(guān)資料分享
Vivado HLS和Vitis HLS 兩者之間有什么區(qū)別
基于Vitis HLS的加速圖像處理
Vitis HLS工具簡(jiǎn)介及設(shè)計(jì)流程
Vitis HLS如何添加HLS導(dǎo)出的.xo文件
Vitis HLS前端現(xiàn)已全面開源
Vitis HLS知識(shí)庫(kù)總結(jié)
理解Vitis HLS默認(rèn)行為
AMD全新Vitis HLS資源現(xiàn)已推出
如何在Vitis HLS GUI中使用庫(kù)函數(shù)?
Vitis HLS:使用任務(wù)級(jí)并行性的高性能設(shè)計(jì)

Vitis HLS相關(guān)問答詳解
評(píng)論