您的位置 首页 kreess

Vitis 加速環境簡介

使用 Vitis 軟件平臺進行加速流程應用開發 Vitis™統一軟件平臺工具將賽靈思軟件開發的方方面面全部組合到統一的環境內。Vitis軟件平臺支持Vitis嵌入式軟件開發

使用 Vitis 軟件平臺進行加速流程應用開發 Vitis™統一軟件平臺工具將賽靈思軟件開發的方方面面全部組合到統一的環境內。Vitis軟件平臺支持Vitis嵌入式軟件開發流程以滿足希望遷移至下一代技術的賽靈思軟件開發套件 (SDK) 用戶的使用需求,也支持 Vitis 應用加速開發流程,以滿足希望使用基於賽靈思 FPGA 的最新軟件加速功能的軟件開發者的需求。此處內容主要與應用加速流程以及Vitis 核開發套件和賽靈思的 Xilinx Runtime (XRT) 的使用有關。 Vitis 應用加速開發流程提供瞭相應的框架,可通過使用標準編程語言來為軟件和硬件組件開發和交付 FPGA 加速應用。軟件組件或主機程序是使用 C/C++ 語言開發的,可在 x86 或嵌入式處理器上運行,借助 OpenCL™ API 調用來管理與加速器的運行時交互。硬件組件或內核則可使用C/C++、OpenCL C或RTL來開發。Vitis軟件平臺有助於促進對異構應用的硬件和軟件元素進行並發開發和測試。

圖 1:Vitis 統一軟件平臺

X23292-082921 如上圖所示,Vitis統一軟件平臺由以下功能特性和元素組成: •以加速硬件平臺為目標的Vitis技術(例如,Alveo™數據中心加速器卡)和基於Versal®或Zynq® UltraScale+™MPSoC 的嵌入式處理器平臺。 • XRT 可提供 API 和驅動程序,以供您的主機程序用於連接到目標平臺,並處理您的主機程序與加速內核之間的傳輸事務。 Vitis 核開發套件可以提供軟件開發工具堆棧(例如,編譯器和交叉編譯器)、分析器以及調試器,開發工具可用於構建主機程序和內核代碼,分析器供您用於對應用性能進行剖析和分析,調試器則可幫助您定位和修復應用中的任何問題。 Vitis 加速庫可提供性能優化的 FPGA 加速,僅需最低限度的代碼更改,且無需重新實現算法即可充分發揮賽靈思自適應計算的所有優勢。Vitis加速庫可用於常用數學、統計數據、線性代數和DSP的常用函數,並且可用於特定領域的應用,例如,視覺和圖像處理、計量金融、數據庫、數據分析以及數據壓縮等。如需瞭解有關 Vitis 加速庫的更多信息,請訪問 https://xilinx.github.io/Vitis_Libraries/。 FPGA 加速 相比傳統 CPU/GPU 加速,賽靈思 FPGA 可提供諸多優勢,包括能夠實現可在處理器上運行的任意功能的定制架構,可以更低的功耗損耗實現更高的性能。相比於處理器架構,賽靈思器件中由可編程邏輯 (PL) 互連結構所構成的結構在應用執行中可支持實現高度並行性。 為瞭在賽靈思器件上實現軟件加速的優勢,您應想方設法將加速目標設定為硬件中的應用程序內存在密集計算的各部分。在定制硬件上實現這些功能即可幫助您在性能與功耗之間達到理想平衡。 如需瞭解有關如何設計硬件架構以實現最優性能的更多信息,以及有關其它設計技巧建議的信息,請回顧 使用 Vitis 軟件平臺加速應用的方法論。 執行模型 在 Vitis 核開發套件中,應用程序被分為主機應用部分和硬件加速內核部分,並在這兩部分之間建立通信通道。以 C/C++語言編寫且使用API抽象(如OpenCL)的主機程序會編譯為在主機處理器(例如,x86服務器或用於嵌入式平臺的 Arm 處理器)上運行的可執行文件,而硬件加速內核則會編譯為在賽靈思器件的可編程邏輯 (PL) 區域內運行的可執行器件二進制文件 (.xclbin)。 由 XRT 管理的 API 調用用於處理主機程序與硬件加速器之間的傳輸事務。主機與內核之間的通信(包括控制和數據傳輸)都會跨 PCIe® 總線或 AXI 總線(針對嵌入式平臺)發生。在硬件中的特定存儲器位置之間傳輸控制信息時,使用全局存儲器在主機程序與內核之間進行數據傳輸。主機處理器和硬件加速器均可訪問全局存儲器,但僅限主機應用才能訪問主機存儲器。 例如,在典型應用中,主機首先將內核要操作的數據從主機存儲器傳輸到全局存儲器中。隨後,內核對此數據進行操作,並將結果存儲回全局存儲器。內核完成操作後,主機會將結果傳回主機存儲器。主機與全局存儲器之間的數據傳輸會引發時延,這可能犧牲總體應用性能。為瞭在真實系統中實現加速,硬件加速內核帶來的優勢必須大於數據傳輸所添加的時延。 目標平臺包含 FPGA 加速內核、全局存儲器和直接存儲器訪問 (DMA) 用於執行存儲器傳輸。內核可以擁有一個或多個全局存儲器接口,並且可編程。Vitis核開發套件執行模型可分解為以下步驟: 1. 主機程序將內核所需的數據寫入已連接的器件的全局存儲器,此器件可通過 Alveo 數據中心加速器卡上的 PCIe 接口或者嵌入式平臺上的 AXI 總線來連接。 2. 主機程序使用其輸入參數來設置內核。 3. 主機程序在 FPGA 上觸發內核函數的執行。 4. 必要時,內核在從全局存儲器中讀取數據時執行所需的計算。 5. 內核將數據寫回全局存儲器並通知主機它已完成任務。 6. 主機程序將數據從全局存儲器讀回主機存儲器,並根據需要繼續處理。 FPGA可以在加速器上容納多個內核實例,包括不同類型的多個內核和相同內核的多個實例。XRT以用戶不可知方式統籌安排加速器內主機程序與內核之間的交互。如需獲取 XRT 架構文檔,請訪問 https://xilinx.github.io/XRT/。 數據中心應用加速開發流程 下圖描述瞭構建和運行應用以供在 Alveo 數據中心加速器卡上使用所需的步驟。這些步驟總結如下,在這整篇文檔中均可找到有關每個步驟的詳細信息。

圖 2:適用於數據中心加速器卡的應用開發流程。

x86 應用編譯:編譯主機應用以供在 x86 處理器上運行,該處理器使用 G++ 編譯器來創建主機可執行文件。該主機程序可與 PL 區域中的內核進行交互。如需瞭解有關寫入主機應用的更多信息,請參閱 第二部分:開發應用。如需瞭解有關編譯主機應用的更多信息,請參閱 構建主機程序。 PL內核編譯和鏈接:PL內核經編譯後即可在目標平臺的PL區域內實現。PL內核可編譯到賽靈思對象格式(XO)文件中,編譯可使用Vitis編譯器(v + +)、Vitis HLS (適用於C/C++內核)或package_xo命令(適用於RTL內核)來執行。如需瞭解有關內核編碼的信息,請參閱 C/C++ 內核 或 RTL 內核。 Vitis編譯器還會將內核XO文件與硬件平臺相鏈接,從而為應用創建器件可執行文件(.xclbin)。如需瞭解更多信息,請參閱 構建器件二進制文件。 賽靈思對象(XO)文件通過v + + –link命令與目標硬件平臺相鏈接,以創建器件二進制文件(.xclbin),此文件將被加載到目標平臺上的賽靈思器件中。 運行應用:對於Alveo數據中心加速器卡,.xclbin文件是運行系統所必需的構建對象。運行應用時,可以運行軟件仿真、硬件仿真或者在實際物理加速器平臺上運行。如需瞭解更多信息,請參閱 運行應用硬件構建。 •當構建目標為軟件或硬件仿真時,emconfigutil命令可構建目標平臺的仿真模型。Vitis編譯器會在器件二進制文件中生成內核的仿真 (simulation) 模型,運行此應用則會運行系統的此模型。如 構建目標 中所述,仿真(emulation) 目標允許您在相對較快的周期內對設計進行構建、運行和迭代,並進行應用調試和性能評估。 •當構建目標為硬件系統時,目標平臺是物理器件。Vitis編譯器會使用Vivado Design Suite生成.xclbin來運行綜合與實現,並解決時序。運行應用會在硬件上運行系統。構建進程將自動執行以生成高質量的結果。但熟悉硬件的開發者可以在其設計進程中充分利用 Vivado 工具。 嵌入式處理器應用加速開發流程 下圖描述瞭使用 Arm® 處理器和內核構建和運行應用所需的步驟,這些處理器和內核在 Versal ACAP、Zynq UltraScale+ MPSoC 和 Zynq-7000 SoC 器件的可編程邏輯區域內運行。這些步驟總結如下,在這整篇文檔中均可找到有關每個步驟的詳細信息。

X24705-082921

PS 應用編譯:編譯主機應用以在 Cortex®-A72 或 Cortex-A53 核處理器上運行,此類處理器使用 GNU Arm 交叉編譯器來創建 ELF 文件。主機程序會與器件的 PL 和 AI 引擎區域中的內核進行交互。如需瞭解有關寫入主機應用的更多信息,請參閱 第二部分:開發應用。如需瞭解有關編譯主機應用的更多信息,請參閱 構建主機程序。

AI 引擎陣列(可選,僅供 Versal AI 引擎 Core 系列使用):部分 Versal ACAP 器件將超長指令字 (VLIW) 處理器的AI引擎陣列與單指令流多數據流⑸MD)矢量單元整合在一起,後者專為計算密集型應用(例如,5G無線和人工智能(AI)應用)而經過高度優化。AI引擎Graph和內核是使用Vitis工具(例如, aiecompiler 和aiesimulator)構建的,可集成到嵌入式加速器應用加速流程中,如《Versal ACAP AI引擎編程環境用戶指南》(UG1076) 中所述。

PL內核編譯和鏈接:PL內核經編譯後即可在目標平臺的PL區域內實現。PL內核可使用Vitis編譯器(v++)、VitisHLS (針對C/C++內核)或package_xo命令(針對RTL內核)編譯為賽靈思對象格式(XO)文件。如需瞭解有關內核編碼的更多信息,請參閱 C/C++ 內核 或 RTL 內核。

Vitis編譯器還會將內核XO文件與硬件平臺相鏈接,從而為應用創建器件可執行文件(.xclbin)。如需瞭解更多信息,請參閱 構建器件二進制文件。

賽靈思對象(XO)文件通過v + + –link命令與目標硬件平臺相鏈接,以創建器件二進制文件(.xclbin),此文件將被加載到目標平臺上的賽靈思器件中。

系統封裝:v++ –package命令可用於收集配置和啟動系統以及加載和運行應用(包括主機應用和PL內核二進制文件)所需的文件。此步驟會構建必要的封裝以運行軟件或硬件仿真和調試,或者創建 SD 卡以在硬件上運行您的應用。如需瞭解更多信息,請參閱 封裝系統。

運行應用:運行應用時,可以運行軟件仿真、硬件仿真或者在實際物理加速器平臺上運行。在嵌入式處理器平臺上運行應用與在數據中心加速器卡上運行應用不同。如需瞭解更多信息,請參閱 運行應用硬件構建。

•當構建目標為軟件或硬件仿真時,QEMU環境會對硬件器件進行建模。Vitis編譯器會在器件二進制文件中生成內核的仿真 (simulation) 模型,運行應用則會在系統的 QEMU 模型中運行。如 構建目標 中所述,仿真(emulation) 目標允許您在相對較快的周期內對設計進行構建、運行和迭代,並進行應用調試和性能評估。

•當構建目標為硬件系統時,目標平臺是物理器件。Vitis編譯器會使用Vivado Design Suite生成.xcibin來運行綜合與實現,並解決時序。運行應用會在硬件上運行系統。構建進程將自動執行以生成高質量的結果,但熟悉硬件的開發者可以在其設計進程中充分利用 Vivado 工具。

構建目標

Vitis編譯器構建進程會生成主機程序可執行文件和FPGA二進制文件(.xclbin)。FPGA二進制文件的性質是由構建目標確定的。

• 當構建目標為軟件或硬件仿真(emulation)時,Vitis編譯器會在FPGA二進制文件中生成內核的仿真(simulation)模型。這些仿真 (emulation) 目標允許您在相對較快的周期內構建、運行和迭代設計、調試應用並評估性能。

• 當構建目標為硬件系統時,Vitis編譯器會為硬件加速器生成.xcibin,並使用Vivado Design Suite來運行綜合與實現。它使用這些工具和預定義、經驗證的設置來提供理想的結果質量。使用 Vitis 核開發套件不需要具備這些工具的知識;但是,熟悉硬件的開發者可以充分利用這些工具並使用所有可用功能特性來實現內核。

Vitis 編譯器提供瞭 3 個不同的構建目標,其中 2 個仿真目標用於調試和確認目的,而默認硬件目標則用於生成實際的FPGA 二進制文件:

• 軟件仿真(sw_emu):主機應用代碼和內核代碼均編譯為在主機處理器上運行。這樣即可通過快速構建並運行(fastbuild-and-run) 循環來實現迭代算法優化。此目標可用於確定語法錯誤、執行與應用程序一起運行的內核代碼的源代碼級調試,以及驗證系統行為。

硬件仿真(hw_emu):內核代碼編譯到硬件模型(RTL)中,此模型在專用仿真器內運行。此構建和運行循環需要更長時間,但是提供詳細的、周期精確的內核活動視圖。此目標用於測試邏輯的功能,該邏輯將引入 FPGA 用於獲取初始性能估算。

硬件(hw):內核代碼編譯到硬件模型(RTL)中,然後在FPGA上實現,從而生成將在實際FPGA上運行的二進制文件。

教程與示例

為幫助您快速開始使用 Vitis 核開發套件,您可在 https://github.com/xilinx/Vitis-Tutorials 上的以下倉庫中查找教程、應用示例以及硬件內核。

• Vitis 應用加速開發流程教程:提供多種教程,通過這些教程可以教授有關工具流程和應用開發的具體概念。

入門路徑教程最適合新用戶入門。

• Vitis 示例:包含許多示例,用於演示良好的設計實踐、編碼指南、常用應用的設計模式以及(最重要的)最優化技巧,從而最大程度提升應用性能。板載示例分為幾種主要類別。每種類別都具有多種關鍵概念,采用適用的OpenCL™ C 和 C/C++ 框架通過各不同示例來展示。所有示例都包含 Makefile 以支持軟硬件仿真並在硬件上運行,還包含 README.md 文件,其中具有示例的詳細解釋。

現在您已掌握瞭 Vitis 核開發套件的各要素,並且已經瞭解瞭如何為加速編寫和構建應用,下一步,讓我們來回顧下解決您的設計問題的最佳方法。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部