Vitis Acceleration Lab
全流程加速
嵌入式視頻處理通常會涉及到幾個部分:視頻采集、數(shù)據(jù)處理、視頻顯示;在一個機器學(xué)習(xí)的應(yīng)用中,數(shù)據(jù)處理一般又分為前處理(比如縮放、調(diào)整白平衡等)、學(xué)習(xí)推理、對結(jié)果作后處理等幾個步驟。
在這個實驗中,我們用 Vitis 一個工具完成了以上所有任務(wù),所有的數(shù)據(jù)處理都在 FPGA 側(cè)完成加速,以保證最佳的實時性;ARM 在整個系統(tǒng)中負(fù)責(zé)任務(wù)管理,而不進行具體計算。視頻輸入輸出的功能由 Vitis Platform 負(fù)責(zé);視頻前處理通過調(diào)用 Vitis Vision Library 實現(xiàn);學(xué)習(xí)推理通過在 Vitis 中調(diào)用 DPU 實現(xiàn)。最終結(jié)果可以達(dá)到1080P60,單幀Latency。
Vitis Acceleration Lab
硬件加速設(shè)計流程
這個 Lab 通過三個小實驗介紹了使用 Vitis 進行硬件加速設(shè)計的工作流程與常用工具。
第一個 Lab:
Vector Addition。
向量加法是硬件加速界的 Hello World。這個實驗通過分別介紹使用圖形界面的方法和使用命令行的方法,來完成一個向量加法設(shè)計的功能仿真。
第二個 Lab:
Wide Vector Addition。
這個實驗在第一個實驗的基礎(chǔ)上,添加一系列優(yōu)化性能的方法,比如增加向量加法器本身的位寬、獨占 DDR 等方式,完成一個向量加法的硬件級仿真。這些優(yōu)化方法都是日常設(shè)計中常用的方法。在本實驗中,還特別指出了怎樣使用 Vitis Analyzer 來觀察加速器運行狀態(tài)和性能的方法,它可以幫助我們分析設(shè)計的效果是否達(dá)到預(yù)期。
第三個 Lab:
使用 Vision Library 來進行圖像處理。
Xilinx 提供了很多常用的硬件加速庫 (Vitis_Libraries) 供用戶使用。本實驗介紹了使用他們的基本方法。用戶可以使用 Vision 庫中的 resize 和 blur 功能,將使用軟件計算比較耗時的部分轉(zhuǎn)移到邏輯中做加速。
Vitis Acceleration Lab
代碼優(yōu)化
使用 Vitis 進行加速設(shè)計,既牽涉到加速器(Kernel)的開發(fā),又涉及到主機(Host)的開發(fā)。兩者都對最終運行效率有影響。除了基礎(chǔ)實驗中的簡介流程,如果要得到最優(yōu)性能,還需要在編程語言層面對編譯器以及最終的電路實現(xiàn)有所理解。這組實驗就介紹了幾個可能影響性能的幾個方面。
第一個實驗討論了關(guān)于申請內(nèi)存的不同方法導(dǎo)致的性能差別。
第二個實驗提供了一種方法,來盡可能保證每個加速器Kernel都有盡可能高的利用率,而不是在等待。
第三個實驗介紹了怎樣使用 Streaming 接口,在兩個 Kernel 之前傳輸數(shù)據(jù),保證最有效率的數(shù)據(jù)傳遞。