日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ

連載目錄

一、Vitis 2019.2 軟件平臺發(fā)行說明

1.1 Vitis 軟件平臺中的內(nèi)容

1.1.1 硬件加速的應(yīng)用程序開發(fā)流程

1.2 改變行為

1.2.1 從SDAccel遷移

1.2.2 從SDSoC遷移

1.3 支持平臺

1.3.1 數(shù)據(jù)中心加速卡

1.3.2 嵌入式平臺

二、安裝

三、Vitis 加速環(huán)境簡介

3.1 簡介與概述

3.2 FPGA加速

3.3 執(zhí)行模型

3.4 建立過程

3.4.1 主機程序構(gòu)建過程

3.4.2 FPGA二進制構(gòu)建過程

3.5 建立目標

3.5.1 軟件仿真

3.5.2 硬件仿真

3.5.3 系統(tǒng)

3.6 使用Vitis軟件平臺加速應(yīng)用程序的方法論

3.6.1 文件受眾和范圍

3.6.2 加速:工業(yè)類比

3.6.3 設(shè)計設(shè)備加速應(yīng)用程序的方法

3.6.4 開發(fā)C / C ++內(nèi)核的方法論

四、開發(fā)應(yīng)用程序

4.1 程序設(shè)計模型

4.2 主機申請

4.2.1 設(shè)置OpenCL環(huán)境

4.2.2 在FPGA中執(zhí)行命令

4.2.3 后處理和FPGA清理

4.2.4 摘要

4.3 RTL內(nèi)核

4.3.1 RTL內(nèi)核的要求

4.3.2 RTL內(nèi)核開發(fā)流程

4.3.2.1 將RTL代碼打包為Vivado IP

4.3.2.2 創(chuàng)建內(nèi)核描述XML文件

4.3.2.3 從RTL內(nèi)核創(chuàng)建XO文件

4.3.3 RTL內(nèi)核向?qū)?/span>

4.3.4 摘要

五、構(gòu)建和運行程序

5.1 設(shè)置Vitis環(huán)境

5.2 建立目標

5.2.1 軟件仿真

5.2.2 硬件仿真

5.2.3 系統(tǒng)硬件目標

5.3 構(gòu)建主機程序

5.4 構(gòu)建FPGA二進制文件

5.4.1 在Vivado HLS中創(chuàng)建內(nèi)核

六、對應(yīng)用程序進行性能分析,優(yōu)化和調(diào)試

七、使用Vitis分析儀

7.1 處理報告

7.2 了解葡萄分析儀

7.3 創(chuàng)建運行配置

7.4 配置葡萄分析儀

八、使用Vitis IDE

8.1 Vitis命令選項

8.2 創(chuàng)建Vitis IDE項目

8.2??.1 啟動Vitis IDE工作區(qū)??

8.2.2 創(chuàng)建一個應(yīng)用程序項目

8.2.3 管理平臺和存儲庫

8.2.4 了解Vitis IDE

8.2.5 添加源

8.2.5.1 添加源文件

8.2.5.2 創(chuàng)建和編輯新的源文件

8.2.5.3 在項目編輯器視圖中工作

8.2.5.4 在助理視圖中工作

8.3 建立系統(tǒng)

8.3.1 Vitis IDE指導(dǎo)視圖

8.3.2 從Vitis IDE使用Vivado工具

8.4 Vitis IDE調(diào)試流程

8.5 配置Vitis IDE

8.5.1 Vitis項目設(shè)置

8.5.2 Vitis Build配置設(shè)置

8.5.3 Vitis運行配置設(shè)置

8.5.4 Vitis二進制容器設(shè)置

8.5.5 Vitis硬件功能設(shè)置

8.5.6 Vitis工具鏈設(shè)置

8.5.6.1 Vitis內(nèi)核編譯器和鏈接器選項

8.5.6.2 emconfigutil設(shè)置

8.5.6.3 G ++主機編譯器和鏈接器設(shè)置

8.6 項目進出口

8.6.1 導(dǎo)出Vitis項目

8.6.2 導(dǎo)入葡萄項目



正文

一 Vitis 2019.2軟件平臺發(fā)行說明

1.1 Vitis軟件平臺中的內(nèi)容

1.1.1 硬件加速的應(yīng)用程序開發(fā)流程

對于基于FPGA的加速,Vitis核心開發(fā)工具包允許使用API構(gòu)建軟件應(yīng)用程序,比如建立一個軟件應(yīng)用程序的OpenCL? API,運行硬件(HW)內(nèi)核上加速卡,如賽靈思 Alveo數(shù)據(jù)中心加速卡。所述葡萄核心開發(fā)套件還支持運行運行Linux,如嵌入式處理器平臺上的軟件應(yīng)用ZYNQ的UltraScale +片上多核設(shè)備。對于嵌入式處理器平臺,Vitis核心開發(fā)套件執(zhí)行模型還使用OpenCL API和基于Linux的Xilinx 運行時(XRT),用于調(diào)度硬件內(nèi)核并控制數(shù)據(jù)移動。

VItis具包可支持Alove 200,U250,U280和數(shù)據(jù)中心加速卡,還有zcu102_base,zcu104_base,zc702_base和zc706_base嵌入式處理器平臺。除了這些現(xiàn)成的平臺以外,還支持自定義平臺。

通過Vitis軟件平臺,您可以將數(shù)據(jù)中心應(yīng)用程序遷移到嵌入式平臺。所述Vitis核心開發(fā)工具包括在V++臺上的硬件內(nèi)核編譯器,g++編譯器用于編譯在x86主機上運行的應(yīng)用,以及ARM®用于交叉編譯應(yīng)用程序到的嵌入式處理器上運行的編譯器的Xilinx設(shè)備。

1.2 改變行為

1.2.1 從SDAccel遷移

下表列出了SDAccel開發(fā)環(huán)境和Vitis軟件平臺之間的差異。

1.2.2 從SDSoC遷移

  • 總覽

該葡萄的核心開發(fā)工具包是仿照SDAccel?編程和執(zhí)行模型。Vitis環(huán)境的一項優(yōu)勢是它對數(shù)據(jù)中心和邊緣應(yīng)用程序的支持。這意味著您可以在標準數(shù)據(jù)中心平臺(例如Alveo?數(shù)據(jù)中心U200加速卡)上對應(yīng)用程序進行原型設(shè)計,然后在可用時將應(yīng)用程序重定向到邊緣平臺。有關(guān)更多信息,請參閱構(gòu)建主機程序。

在Vitis環(huán)境中,您需要調(diào)用Arm交叉編譯器以構(gòu)建主應(yīng)用程序代碼,并調(diào)用Vitis編譯器以構(gòu)建硬件內(nèi)核。您為主機(.elf)創(chuàng)建一個可執(zhí)行文件,為硬件內(nèi)核(.xclbin)創(chuàng)建一個映像。您將使用OpenCL API和基于Linux的Xilinx運行時(XRT)來控制主應(yīng)用程序和內(nèi)核之間的數(shù)據(jù)移動,并計劃任務(wù)的執(zhí)行。

對于嵌入式處理器平臺(或項目),Vitis環(huán)境僅支持運行Linux主機操作系統(tǒng)且平臺已將XRT和ZOCL驅(qū)動程序添加到根文件系統(tǒng)的平臺。平臺創(chuàng)建者需要提供一個sysroot,以便通過OpenCL包含文件和庫交叉編譯到Arm 核心。在主機編譯期間,您將需要使用適當(dāng)?shù)臉祟^。

要從SDSoC環(huán)境遷移到Vitis環(huán)境,您將必須修改構(gòu)建腳本和源代碼。本節(jié)討論遷移步驟,包括命令行示例,這些示例使用sysroot中的文件,使用Vitis編譯器編譯硬件內(nèi)核,并使用Arm cross編譯器編譯主機應(yīng)用程序。提供的代碼示例僅用于教育目的,不應(yīng)用于您的設(shè)計。

基本遷移步驟如下:

  • 遷移主機應(yīng)用程序
    • 更新所需的#include文件
    • 根據(jù)需要編輯主要功能以及任何其他軟件的僅特定功能
  • 遷移硬件功能
    • 使用編譯指示定義內(nèi)核接口
  • 建立系統(tǒng)
    • 構(gòu)建和鏈接內(nèi)核
    • 編譯和鏈接應(yīng)用程序
  • 遷移主機應(yīng)用程序

在本節(jié)中,您將回顧具有和加速功能的簡單SDSoC?程序,main()以識別必須更改的元素。要開始將應(yīng)用程序和硬件功能遷移到Vitis環(huán)境平臺和工具的過程,請檢查您的主要功能和硬件功能代碼。此處提供的代碼是mmult示例應(yīng)用程序。

以下代碼段是main()原始開發(fā)應(yīng)用程序項目中的示例函數(shù)。

#include  #include #include "mmult.h" #include "sds_lib.h" #define NUM_TESTS 5 void printMatrix(int *mat, int col, int row) { for (int i = 0; i < col; i++) { for (int j = 0; j < row; j++) {
 std::cout << mat[i*row+j] << "\t";
 }
 std::cout << std::endl;
 }
 std::cout << std::endl;
}

int main() {
 int col = BUFFER_SIZE;
 int row = BUFFER_SIZE;
 int *matA = (int*)sds_alloc(col*row*sizeof(int));
 int *matB = (int*)sds_alloc(col*row*sizeof(int));
 int *matC = (int*)sds_alloc(col*row*sizeof(int));

 std::cout << "Mat A" << std::endl;
 printMatrix(matA, col, row);

 std::cout << "Mat B" << std::endl;
 printMatrix(matB, col, row);

 //Run the hardware function multiple times for(int i = 0; i < NUM_TESTS; i++) {
 std::cout << "Test #: " << i << std::endl;
 // Populate matA and matB
 srand(time(NULL)); for (int i = 0; i < col*row; i++) {
 matA[i] = rand()%10;
 matB[i] = rand()%10;
 }

 std::cout << "MatA * MatB" << std::endl;
 mmult(matA, matB, matC, col, row);

 }
 printMatrix(matC, col, row); return 0;

該代碼為存儲為一維數(shù)組的三個不同的二維矩陣分配內(nèi)存matA,matB使用隨機數(shù)填充和 ,然后相乘matA并matB計算 matC。結(jié)果打印到屏幕上,測試運行十次。

轉(zhuǎn)到Vitis環(huán)境sds++時,需要由應(yīng)用程序開發(fā)人員顯式管理由編譯器和運行時隱式處理的一些任務(wù)。

  • 遷移硬件功能

從SDSoC?環(huán)境遷移硬件功能以用于Vitis環(huán)境時,需要記住的內(nèi)容很少。

為了在PL中執(zhí)行,現(xiàn)在將硬件功能單獨編譯為.xo文件,因此它不包含在main()函數(shù)中,并且不需要像SDSoC環(huán)境中那樣的用于函數(shù)定義的特定頭文件。在丟棄頭文件之前,必須將BUFFER_SIZE聲明復(fù)制 到mmult函數(shù)中。您還可以評論或刪除該 #include語句。

  • 建立系統(tǒng)

在SDSoC?環(huán)境中,sds++編譯器同時構(gòu)建主應(yīng)用程序(.elf)和硬件加速功能(PL區(qū)域的位流)。在簡單的示例中,用于編譯main()函數(shù)和mmult硬件函數(shù)的命令行如下:

sds++ -Wall -O0 -g -I"../src" -c -fmessage-length=0 -MT"src/mmult.o" -MMD \
-MP -MF"src/mmult.d" -MT"src/mmult.o" -o "src/mmult.o" "../src/mmult.cpp" \
-sds-hw mmult mmult.cpp -sds-end -sds-sys-config a53_linux -sds-proc      \
a53_linux -sds-pf "zcu102" 

從該單個命令中,該sds++命令處理該sds-hw塊以編譯mmult函數(shù),然后再鏈接main.o對象文件以構(gòu)建目標應(yīng)用程序main.elf。最后,它將生成sd_card文件夾,其中包含啟動和運行應(yīng)用程序所需的適當(dāng)文件。

在Vitis環(huán)境中,硬件內(nèi)核和主要應(yīng)用程序的編譯由兩個單獨的編譯器執(zhí)行。

  • 高級主題:多個計算單元和內(nèi)核流

1.3 支持平臺

1.3.1 數(shù)據(jù)中心加速卡

Xilinx提供了幾種可用于數(shù)據(jù)中心的加速卡:

  • Alveo U50數(shù)據(jù)中心加速卡
  • Alveo U200數(shù)據(jù)中心加速卡
  • Alveo U250數(shù)據(jù)中心加速卡
  • Alveo U280數(shù)據(jù)中心加速卡

有關(guān)每個加速卡和可用目標平臺的規(guī)格,請參閱數(shù)據(jù)中心加速卡。

1.3.2 嵌入式平臺

不支持 Artix®-7,Kintex®-7,Virtex®-7以及裸機和RTOS平臺進行加速。對于基于非加速的設(shè)計,請參見《Vitis Unified軟件平臺文檔:嵌入式軟件開發(fā)(UG1400)》。

下面列出了可與Vitis核心開發(fā)套件一起使用的嵌入式平臺,可以在Xilinx官網(wǎng)上找到它們。

  • zcu102_base:基于ZCU102 Zynq UltraScale + MPSoC和XRT。
  • zcu104_base:基于ZCU104 Zynq UltraScale + MPSoC和XRT。
  • zc702_base:基于ZC702Zynq®- 7000SoC 和XRT。
  • zc706_base:基于ZC706Zynq®- 7000SoC 和XRT。

二、安裝

三、Vitis 加速環(huán)境簡介

3.1 簡介與概述

Vitis unified 軟件是一個將Xilinx軟件開發(fā)的各個方面結(jié)合到一個統(tǒng)一環(huán)境中的新工具。Vitis軟件平臺既支持Vitis嵌入式軟件開發(fā)流程,也支持Vitis應(yīng)用程序加速開發(fā)流程,Vitis嵌入式軟件開發(fā)流程是為希望使用下一代技術(shù)的Xilinx軟件開發(fā)工具包(SDK)用戶設(shè)計的,Vitis應(yīng)用程序加速開發(fā)流程是為希望使用最新的Xilinx FPGA軟件加速開發(fā)流程的軟件開發(fā)人員設(shè)計的。該內(nèi)容主要涉及應(yīng)用程序加速流,以及Vitis核心開發(fā)工具包和Xilinx運行時(XRT)的使用。

Vitis應(yīng)用程序加速開發(fā)流程為使用軟件和硬件組件的標準編程語言開發(fā)和交付FPGA加速應(yīng)用程序提供了一個框架。軟件組件或主機程序是使用C/ c++開發(fā)的,可以在x86或嵌入式處理器上運行,并使用OpenCL API調(diào)用來管理與加速器的運行時交互。可以使用C/ c++、OpenCL C或RTL開發(fā)硬件組件或內(nèi)核。Vitis軟件平臺支持各種方法,允許您從開發(fā)應(yīng)用程序或內(nèi)核開始。

下圖是Vitis軟件平臺示意圖。如圖所示,Vitis 統(tǒng)一軟件平臺包含以下功能和元素:

  • Vitis技術(shù)的目標是加速硬件平臺,例如Alveo?數(shù)據(jù)中心加速器卡或Zynq®UltraScale +?MPSoC和基于Zynq®-7000SoC的嵌入式處理器平臺。
  • XRT為您的宿主程序提供了API和驅(qū)動程序,以使其與目標平臺連接,并處理宿主程序和加速內(nèi)核之間的事務(wù)。
  • Vitis核心開發(fā)套件提供了軟件開發(fā)工具堆棧(例如編譯器和交叉編譯器),用于構(gòu)建主機程序和內(nèi)核代碼;分析器(可讓您分析和分析應(yīng)用程序的性能);調(diào)試器(可幫助您定位和修復(fù)任何問題)您的應(yīng)用程序中的問題。
  • Vitis加速庫通過最少的代碼更改即可提供性能優(yōu)化的FPGA加速,而無需重新實現(xiàn)算法即可利用Xilinx自適應(yīng)計算的優(yōu)勢。Vitis加速庫可用于數(shù)學(xué),統(tǒng)計,線性代數(shù)和DSP的常用功能,也可用于特定領(lǐng)域的應(yīng)用程序,例如視覺和圖像處理,定量財務(wù),數(shù)據(jù)庫,數(shù)據(jù)分析和數(shù)據(jù)壓縮。有關(guān)Vitis加速庫的更多信息,請參見Xilinx github庫,https://xilinx.github.io/Vitis_Libraries/。

3.2 FPGA加速

與傳統(tǒng)的CPU / GPU加速相比,Xilinx FPGA具有許多優(yōu)勢,包括能夠?qū)崿F(xiàn)可在處理器上運行的任何功能的自定義架構(gòu),從而以較低的功耗實現(xiàn)了更好的性能。與處理器體系結(jié)構(gòu)相比,在Xilinx器件中包含可編程邏輯(PL)架構(gòu)的結(jié)構(gòu)在應(yīng)用程序執(zhí)行中實現(xiàn)了高度的并行性。

為了在Xilinx器件上實現(xiàn)軟件加速的優(yōu)勢,可以考慮在硬件中加速應(yīng)用程序的大型計算密集型部分。在自定義硬件中實現(xiàn)這些功能可以使您在性能和功耗之間達到理想的平衡。

有關(guān)如何構(gòu)建具有最佳性能的應(yīng)用程序以及其他推薦設(shè)計技術(shù)的更多信息,請查看使用Vitis軟件平臺加速應(yīng)用程序的方法。

3.3 執(zhí)行模型

在Vitis核心開發(fā)套件中,應(yīng)用程序在主機應(yīng)用程序和硬件加速的內(nèi)核之間分割,并在它們之間建立通信通道。使用C / C ++編寫并使用API抽象(例如OpenCL)的主機程序在主機處理器(例如x86服務(wù)器或 用于嵌入式平臺的Arm處理器)上運行,而硬件加速的內(nèi)核則在主機的可編程邏輯(PL)區(qū)域內(nèi)運行。一個賽靈思設(shè)備。

由XRT管理的API調(diào)用用于處理主機程序和硬件加速器之間的事務(wù)。主機和內(nèi)核之間的通信(包括控制和數(shù)據(jù)傳輸)通過PCIe®總線或嵌入式平臺的AXI總線進行。當(dāng)控制信息在硬件中的特定內(nèi)存位置之間傳輸時,全局內(nèi)存用于在主機程序和內(nèi)核之間傳輸數(shù)據(jù)。主機處理器和硬件加速器均可訪問全局內(nèi)存,而主機應(yīng)用程序只能訪問主機內(nèi)存。

例如,在典型的應(yīng)用程序中,主機首先將要由內(nèi)核操作的數(shù)據(jù)從主機內(nèi)存?zhèn)鬏數(shù)饺謨?nèi)存。內(nèi)核隨后對數(shù)據(jù)進行操作,將結(jié)果存儲回全局內(nèi)存中。內(nèi)核完成后,主機將結(jié)果傳輸回主機內(nèi)存。主機和全局內(nèi)存之間的數(shù)據(jù)傳輸會引入延遲,這可能會給整個應(yīng)用程序帶來巨大的成本。為了在實際系統(tǒng)中實現(xiàn)加速,硬件加速內(nèi)核所獲得的好處必須超過數(shù)據(jù)傳輸所增加的延遲。

Vitis核心開發(fā)套件應(yīng)用程序的體系結(jié)構(gòu)

目標平臺包含F(xiàn)PGA加速內(nèi)核,全局存儲器以及用于存儲器傳輸?shù)闹苯哟鎯ζ髟L問(DMA)。內(nèi)核可以具有一個或多個全局存儲器接口,并且是可編程的。該葡萄的核心開發(fā)工具包執(zhí)行模型可以分解為以下步驟:

  • 1.主機程序通過Alveo數(shù)據(jù)中心加速器卡上的PCIe接口,或通過嵌入式平臺上的AXI總線,將內(nèi)核所需的數(shù)據(jù)寫入連接的設(shè)備的全局存儲器中。
  • 12.主機程序使用其輸入?yún)?shù)設(shè)置內(nèi)核。
  • 13.主機程序觸發(fā)FPGA上內(nèi)核功能的執(zhí)行。
  • 14.內(nèi)核根據(jù)需要執(zhí)行所需的計算,同時從全局內(nèi)存中讀取數(shù)據(jù)。
  • 15.內(nèi)核將數(shù)據(jù)寫回到全局內(nèi)存,并通知主機它已完成任務(wù)。
  • 16.主機程序?qū)?shù)據(jù)從全局存儲器讀回主機存儲器,并根據(jù)需要繼續(xù)處理。

FPGA可以在加速器上容納多個內(nèi)核實例,不同類型的內(nèi)核以及同一內(nèi)核的多個實例。XRT透明地協(xié)調(diào)了主機程序和加速器中內(nèi)核之間的交互。Xilinx Github存儲庫上提供了XRT體系結(jié)構(gòu)文檔,https://xilinx.github.io/XRT/。

3.4 建立過程

Vitis的核心開發(fā)工具包提供了所有標準的軟件開發(fā)環(huán)境的特點:

  • 在x86或Arm®處理器上運行的主機應(yīng)用程序的編譯器或交叉編譯器。
  • 交叉編譯器,用于構(gòu)建FPGA二進制文件。
  • 調(diào)試環(huán)境可幫助識別和解決代碼中的問題。
  • 性能分析器可識別瓶頸并幫助您優(yōu)化應(yīng)用程序。

構(gòu)建過程遵循主機程序和內(nèi)核代碼的標準編譯和鏈接過程。如下圖所示,主機程序是使用GNU C ++編譯器(g++)或GNU C ++ Arm交叉編譯器為基于MPSoC的設(shè)備構(gòu)建的。FPGA二進制文件是使用Vitis編譯器構(gòu)建的。

3.4.1 主機程序構(gòu)建過程

主應(yīng)用程序g++通過以下兩步過程進行編譯并與編譯器鏈接:

  • 1.將任何所需的代碼編譯到目標文件(.o)中。
  • 2.將對象文件(.o)與XRT共享庫鏈接以創(chuàng)建可執(zhí)行文件。

3.4.2 FPGA二進制構(gòu)建過程

內(nèi)核可以用C / C ++或OpenCL C代碼描述,也可以從打包的RTL設(shè)計中創(chuàng)建。如上圖所示,每個硬件內(nèi)核都獨立編譯為Xilinx目標(.xo)文件。

Xilinx對象(.xo)文件與硬件平臺鏈接,以創(chuàng)建FPGA二進制文件(.xclbin),該文件已加載到目標平臺上的Xilinx設(shè)備中。

構(gòu)建FPGA二進制文件的關(guān)鍵是確定要生成的構(gòu)建目標。有關(guān)更多信息,請參閱構(gòu)建目標。

有關(guān)構(gòu)建過程的詳細說明,請參見構(gòu)建FPGA二進制文件。

3.5 建立目標

Vitis編譯器生成過程生成主機程序可執(zhí)行文件和FPGA二進制(.xclbin)。FPGA二進制文件的性質(zhì)由構(gòu)建目標確定。

  • 當(dāng)構(gòu)建目標是軟件或硬件仿真時,Vitis編譯器會生成FPGA二進制文件中內(nèi)核的仿真模型。這些仿真目標使您可以在相對較快的周期內(nèi)構(gòu)建,運行和迭代設(shè)計。調(diào)試應(yīng)用程序并評估性能。
  • 當(dāng)構(gòu)建目標是硬件系統(tǒng)時,Vitis編譯器使用Vivado Design Suite運行綜合和實現(xiàn),從而為硬件加速器生成.xclbin 。它使用這些工具進行預(yù)定義的設(shè)置,這些設(shè)置被證明可以提供良好的結(jié)果質(zhì)量。使用Vitis核心開發(fā)套件不需要這些工具的知識。但是,精通硬件的開發(fā)人員可以充分利用這些工具,并使用所有可用功能來實現(xiàn)內(nèi)核。

Vitis編譯器提供了三種不同的構(gòu)建目標,用于調(diào)試和驗證目的的兩個仿真目標,用來產(chǎn)生實際的FPGA二進制文件的默認硬件目標:

  • 軟件仿真(sw_emu)

主機應(yīng)用程序代碼和內(nèi)核代碼都被編譯為在主機處理器上運行。這樣可以通過快速的構(gòu)建和運行循環(huán)來優(yōu)化迭代算法。該目標對于識別語法錯誤,對與應(yīng)用程序一起運行的內(nèi)核代碼執(zhí)行源代碼級調(diào)試以及驗證系統(tǒng)的行為很有用。

  • 硬件仿真(hw_emu)

內(nèi)核代碼被編譯成硬件模型(RTL),該模型在專用模擬器中運行。這種構(gòu)建和運行循環(huán)需要更長的時間,但可以提供詳細的,周期精確的內(nèi)核活動視圖。該目標對于測試將在FPGA中使用的邏輯功能以及獲得初始性能估計非常有用。

  • 系統(tǒng)(hw)

內(nèi)核代碼被編譯成硬件模型(RTL),然后在FPGA上實現(xiàn),從而產(chǎn)生可以在實際FPGA上運行的二進制文件。

3.6 使用Vitis軟件平臺加速應(yīng)用程序的方法論

3.6.1 文件受眾和范圍

本指南的目的是使系統(tǒng)設(shè)計師和軟件開發(fā)人員熟悉以下內(nèi)容:

  • 架構(gòu)設(shè)備加速應(yīng)用程序的方法
  • 開發(fā)C / C ++內(nèi)核的方法

3.6.2 加速:工業(yè)類比

CPU,GPU和可編程設(shè)備之間存在明顯差異。了解這些差異是有效開發(fā)每種設(shè)備的應(yīng)用程序并實現(xiàn)最佳加速的關(guān)鍵。

CPU和GPU均具有預(yù)定義的體系結(jié)構(gòu),具有固定數(shù)量的內(nèi)核,固定指令集和剛性內(nèi)存體系結(jié)構(gòu)。GPU通過內(nèi)核數(shù)量和采用SIMD / SIMT并行性來擴展性能。相反,可編程設(shè)備是完全可定制的體系結(jié)構(gòu)。開發(fā)人員創(chuàng)建針對應(yīng)用程序需求進行了優(yōu)化的計算單元。通過創(chuàng)建深度流水線化的數(shù)據(jù)路徑來實現(xiàn)性能,而不是乘以計算單元的數(shù)量。

可以將CPU視為一組研討會,每個研討會都雇用一名非常熟練的工人。這些工人可以使用通用工具,使他們可以構(gòu)建幾乎所有東西。每個工人一次制作一件商品,先后使用不同的工具將原材料變成成品。此順序轉(zhuǎn)換過程可能需要許多步驟,具體取決于任務(wù)的性質(zhì)。講習(xí)班是獨立的,工人都可以完成不同的任務(wù),而不會分散注意力或出現(xiàn)協(xié)調(diào)問題。

GPU也有車間和工人,但其中有很多,工人也更專業(yè)。他們只能訪問特定的工具,只能做更少的事情,但是他們做得非常有效。當(dāng)GPU工人重復(fù)執(zhí)行相同的幾個任務(wù),并且所有人都同時執(zhí)行相同的事情時,它們的功能最佳。畢竟,在有這么多不同的工人的情況下,給他們所有相同的訂單會更有效率。

可編程設(shè)備使這個車間類似于工業(yè)時代。如果CPU和GPU是一組單獨的工人,并采取順序步驟將輸入轉(zhuǎn)換為輸出,則可編程設(shè)備是具有裝配線和傳送帶的工廠。沿組裝線分派的工人將原材料逐步轉(zhuǎn)變?yōu)橹瞥善?。每個工人重復(fù)執(zhí)行相同的任務(wù),并且部分成品在傳送帶上從一個工人轉(zhuǎn)移到另一個工人。這導(dǎo)致更高的生產(chǎn)吞吐量。

可編程設(shè)備的另一個主要區(qū)別是工廠和裝配線不存在,這與CPU和GPU的車間和工人不同。為了完善我們的類比,可編程設(shè)備就像是一批待開發(fā)的空批。這意味著設(shè)備開發(fā)人員可以建立工廠,裝配線和工作站,然后針對所需任務(wù)自定義它們,而不必使用通用工具。就像批量一樣,設(shè)備的房地產(chǎn)也不是無限的,這限制了可以在設(shè)備中建立工廠的數(shù)量和規(guī)模。因此,正確設(shè)計和配置這些工廠是設(shè)備編程過程的關(guān)鍵部分。

傳統(tǒng)的軟件開發(fā)是關(guān)于在預(yù)定義的體系結(jié)構(gòu)上進行編程的功能??删幊淘O(shè)備開發(fā)是關(guān)于對體系結(jié)構(gòu)進行編程以實現(xiàn)所需功能。

3.6.3 設(shè)計設(shè)備加速應(yīng)用程序的方法

在開始開發(fā)加速應(yīng)用程序之前,正確地架構(gòu)它很重要。在此階段,開發(fā)人員將對應(yīng)用程序的體系結(jié)構(gòu)做出關(guān)鍵決策,并確定諸如應(yīng)將哪些軟件功能映射到設(shè)備內(nèi)核,需要多少并行性以及如何交付并行化等因素。

  • 步驟1:建立基準應(yīng)用程序性能并建立目標
  • 步驟2:確定要加速的功能
  • 步驟3:確定設(shè)備并行化需求
  • 步驟4:確定軟件應(yīng)用程序并行化需求
  • 步驟5:細化建筑細節(jié)

3.6.4 開發(fā)C / C ++內(nèi)核的方法論

Vitis軟件平臺支持建模內(nèi)核用C / C ++或RTL(的Verilog,VHDL,系統(tǒng)的Verilog)。本方法指南適用于C / C ++內(nèi)核。有關(guān)開發(fā)RTL內(nèi)核的詳細信息,請參見RTL內(nèi)核。

關(guān)于高級綜合編譯器

在開始內(nèi)核開發(fā)過程之前,開發(fā)人員應(yīng)該熟悉高級綜合(HLS)概念。HLS編譯器將C / C ++代碼轉(zhuǎn)換為RTL設(shè)計,然后將其映射到設(shè)備結(jié)構(gòu)上。

HLS編譯器比標準軟件編譯器更具限制性。例如,存在不支持的構(gòu)造,包括:系統(tǒng)函數(shù)調(diào)用,動態(tài)內(nèi)存分配和遞歸函數(shù)。有關(guān)更多信息,請參見《Vivado Design Suite用戶指南:高級綜合(UG902)》中的“不受支持的C構(gòu)造” 。

更重要的是,請始終牢記C / C ++源代碼的結(jié)構(gòu)會對所生成的硬件實現(xiàn)的性能產(chǎn)生重大影響。該方法指南將幫助您構(gòu)建代碼,以滿足應(yīng)用程序吞吐量的目標。有關(guān)編程內(nèi)核的特定信息,請參見C / C ++內(nèi)核。

  • 步驟1:將代碼劃分為負載計算-存儲模式
  • 步驟2:將計算塊劃分為較小的函數(shù)
  • 步驟3:確定需要優(yōu)化的循環(huán)
  • 步驟4:改善循環(huán)延遲
  • 步驟5:提高環(huán)路吞吐量
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉