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