全部產品
Search
文件中心

:f2 執行個體 OpenCL 開發最佳實務

更新時間:Aug 23, 2018

本文介紹如何在f2執行個體上使用OpenCL(Open Computing Language)製作鏡像檔案,並燒寫到FPGA晶片中。

說明

  • 本文所述所有操作都必須由同一個帳號在同一地域裡執行。
  • 強烈建議您使用RAM使用者操作FaaS執行個體。為了防止意外操作,您需要讓RAM使用者僅執行必要的操作。您需要為FaaS管理帳號建立一個角色,並授予臨時許可權,讓FaaS管理帳號能訪問指定的OSS Bucket。

前提條件

操作步驟

按以下步驟在f2執行個體上使用OpenCL製作鏡像檔案,並燒寫到FPGA晶片中。

步驟 1. 配置環境

按以下步驟配置環境:

  1. 遠端連線f2執行個體

  2. 使用 vim 修改/root/xbinst_oem/setup.sh:在第5行前加一個 #,注釋掉 unset XILINX_SDX,再保存退出。

    修改setup.sh檔案

  3. 運行以下命令安裝Screen,用於後續的持續連結。

    1. yum install screen -y
  4. 運行以下命令進入Screen。

    1. screen -S f2opencl
  5. 運行以下命令配置安全燒寫環境。

    1. source /root/xbinst_oem/F2_env_setup.sh

步驟 2. 編譯二進位檔案

按以下步驟編譯二進位檔案:

  1. 進入命令目錄 。

    1. cd /opt/Xilinx/SDx/2017.2/examples/vadd
  2. 運行命令 cat sdaccel.mk | grep "XDEVICE",查看 XDEVICE 配置是否為 xilinx:aliyun-ku115-f2:4ddr-xpr:4.2。如果不是,必須改為這個配置。

  3. 使用 vim 修改 common.mk 檔案。

    1. vim ../common/common.mk

    將第 63 行代碼(參數可能在 60-62 行,由您的檔案確定)

    1. CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS}

    修改為

    1. CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp

    說明:您必須向編譯伺服器提交DCP檔案,而不是bit檔案,所以必須添加編譯參數 --xp param:compiler.acceleratorBinaryContent=dcp,使Xilinx® OpenCL™ Compiler(xocc)編譯生成一個布局布線後的DCP檔案,而不是bit檔案。

  4. 運行以下命令編譯器。

    1. export XILINX_SDX=/opt/Xilinx/SDx/2017.2
    2. make -f sdaccel.mk xbin_hw

    如果您看到如下介面,說明二進位檔案編譯已經開始。編譯過程可能會持續數個小時,請您耐心等待。

    二進位檔案開始編譯

步驟 3. 檢查打包指令碼或直譯式程式

運行以下命令檢查打包指令碼或直譯式程式是否存在。

  1. file /root/xbinst_oem/sdaccel_package.sh

說明:如果返回結果中包含 cannot open (No such file or directory),說明不存在該檔案,您需要手動下載打包指令碼或直譯式程式。

  1. wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh

步驟 4. 製作鏡像

按以下步驟製作鏡像檔案。

  1. 運行命令配置OSS環境。
    1. # 將此處的hereIsMySecretId、hereIsMySecretKey、hereIsMyBucket分別替換為您的AccessKeyID、AccessKeySecret和Bucket名稱
    2. faascmd config --id=hereIsMySecretId --key=hereIsMySecretKey
    3. faascmd auth --bucket=hereIsMyBucket
  2. 運行 ls,獲取檔案名。

    獲取檔案名

  3. 打包二進位檔案。

    1. /root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.2/examples/vadd/bin_vadd_hw.xclbin

    打包完成後,在同一目錄下,您會看到一個打包好的檔案,如本樣本中的 17_10_28-021904_SDAccel_Kernel.tar.gz

    查看打包好的檔案

  4. 運行命令將打包好的檔案上傳到您指定的OSS Bucket中。

    1. # 將檔案名改為打包好的檔案名,您需要根據您的 ls 命令修改
    2. faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
  5. 運行如下命令製作鏡像。

    1. # bit.tar.gz、hereIsFPGAImageName、hereIsFPGAImageTag分別替換為剛建立的壓縮包檔案名、鏡像名和鏡像的tag
    2. faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=20171121

    返回結果樣本如下圖所示。如果出現 "State":"queued",說明這個任務已經排入佇列,開始製作鏡像。

    排入佇列開始製作鏡像

    說明:製作鏡像比較耗時。等待一段時間後,運行以下命令,查看鏡像狀態。

    1. faascmd list_images

    返回結果裡,如果出現"State":"success",說明鏡製作成功。

    查看鏡像狀態

    記錄返回結果中的FPGAImageUUID。

步驟 5. 燒寫鏡像

按以下步驟將鏡像燒寫入FPGA晶片。

  1. 運行以下命令獲取FpgaUUID。

    1. # 將hereIsYourInstanceId替換為你的FPGA雲端服務器的執行個體ID
    2. faascmd list_instances --instanceId=hereIsYourInstanceId

    返回結果如下圖所示。

    獲取FpgaUUID

    說明:記錄返回結果中的FpgaUUID。

  2. 運行以下命令下載鏡像。

    1. # 將hereIsYourInstanceID替換為這個f2執行個體的ID,將hereIsFpgaUUID替換為您記錄的FpgaUUID,將hereIsImageUUID替換為您記錄的FpgaImageUUID
    2. faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=20171121

    在返回結果裡,如果看到 "State":"committed",說明鏡像下載成功。

    鏡像下載成功

    說明:您也可以運行以下命令查看鏡像是否下載成功。

    1. # 將 hereIsYourInstanceID 替換為這個 f2 執行個體的 ID,將 hereIsFpgaUUID 替換為您記錄的 FpgaUUID
    2. faascmd fpga_status --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID

    返回結果裡,如果看到 "TaskStatus":"valid",而且FpgaImageUUID和下載鏡像時的FpgaImageUUID一致,說明鏡像下載正常。

    查看鏡像下載是否正常

步驟 6. 運行Host程式

執行以下命令運行Host程式。

  1. make -f sdaccel.mk host
  2. unset XILINX_SDX
  3. ./vadd bin_vadd_hw.xclbin

如果返回結果中出現 Test Passed,說明測試通過。

其他動作

這裡介紹 FPGA 執行個體部分常用的操作。

任務 命令
查看幫助文檔 make -f ./sdaccel.mk help
軟體模擬 make -f ./sdaccel.mk run_cpu_em
硬體模擬 ake -f ./sdaccel.mk run_hw_em
只編譯 host 代碼 make -f ./sdaccel.mk host
編譯生成可以下載的檔案 make -f sdaccel.mk xbin_hw
清理工作目錄 make -f sdaccel.mk clean
強力清除工作目錄 make -f sdaccel.mk cleanall

說明

  • sdx2017.2在模擬時,device需要用xilinx_aliyun-ku115-f2_4ddr-xpr_4_2。
  • 模擬時只需要按照Xilinx標準流程操作,不需要配置F2_env_setup環境。