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

基于Vitis HLS的加速圖像處理

Vitis HLS工具簡介及設(shè)計流程
Vitis HLS如何添加HLS導(dǎo)出的.xo文件

Vitis HLS前端現(xiàn)已全面開源
Vitis HLS知識庫總結(jié)
理解Vitis HLS默認(rèn)行為
AMD全新Vitis HLS資源現(xiàn)已推出

如何在Vitis HLS GUI中使用庫函數(shù)?

Vitis HLS:使用任務(wù)級并行性的高性能設(shè)計

評論