在 8 月 3 日舉行的針對如何利用 AMD Vitis HLS 提高任務(wù)級并行性的網(wǎng)絡(luò)研討會中,我們深入探討了任務(wù)級并行性的相關(guān)優(yōu)勢和使用方法。本次研討會中我們收到了來自廣大用戶和網(wǎng)友的熱情提問,針對代表性較強(qiá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)的什么資源來實(shí)現(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 上實(shí)現(xiàn)。采用 AMD Vitis HLS 時,選擇的目標(biāo)芯片只能是 AMD 的 FPGA。但從廣義上來講,如果生成的 RTL 代碼不受具體 FPGA 芯片型號的限制,可以封裝成 IP 使用,但到流片還有很大一段距離。
10. 請問 HLS 在做協(xié)議組幀方面,與 Verilog 相比是否更有優(yōu)勢?
HLS 在復(fù)雜算法方面的實(shí)現(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)和工作機(jī)制,沒有多大必要專門學(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ù)可以方便地實(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. 本來模塊單獨(dú)沒有時序問題,加上 DATAFLOW 后時序問題就出現(xiàn)了,而且定位不到問題點(diǎn),DATAFLOW 是否會影響時序?
DATAFLOW 會增加 Memory 的開銷,也就增加了資源利用率,間接影響時序。但你要先具體看一下時序問題出現(xiàn)在哪里。
審核編輯:湯梓紅
-
amd
+關(guān)注
關(guān)注
25文章
5496瀏覽量
134635 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110392 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62971 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73857 -
Vitis
+關(guān)注
關(guān)注
0文章
147瀏覽量
7497
原文標(biāo)題:Vitis HLS 研討會精彩回放及問答詳解
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論