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