本文介紹如何在f2執行個體上使用OpenCL(Open Computing Language)製作鏡像檔案,並燒寫到FPGA晶片中。
說明:
- 本文所述所有操作都必須由同一個帳號在同一地域裡執行。
- 強烈建議您使用RAM使用者操作FaaS執行個體。為了防止意外操作,您需要讓RAM使用者僅執行必要的操作。您需要為FaaS管理帳號建立一個角色,並授予臨時許可權,讓FaaS管理帳號能訪問指定的OSS Bucket。
前提條件
建立f2執行個體,確保執行個體能訪問公網,並且執行個體所在安全性群組中已經添加規則放行SSH(22)通信埠的訪問。
說明:f2執行個體只能使用我們共用給您的鏡像。詳細資料,請參見 建立f2執行個體。
登入ECS管理主控台,在f2執行個體的詳情頁上,獲取執行個體ID。
使用RAM使用者操作FPGA,必須完成以下操作:
操作步驟
按以下步驟在f2執行個體上使用OpenCL製作鏡像檔案,並燒寫到FPGA晶片中。
步驟 1. 配置環境
按以下步驟配置環境:
使用
vim
修改/root/xbinst_oem/setup.sh:在第5行前加一個#
,注釋掉unset XILINX_SDX
,再保存退出。運行以下命令安裝Screen,用於後續的持續連結。
yum install screen -y
運行以下命令進入Screen。
screen -S f2opencl
運行以下命令配置安全燒寫環境。
source /root/xbinst_oem/F2_env_setup.sh
步驟 2. 編譯二進位檔案
按以下步驟編譯二進位檔案:
進入命令目錄 。
cd /opt/Xilinx/SDx/2017.2/examples/vadd
運行命令
cat sdaccel.mk | grep "XDEVICE"
,查看XDEVICE
配置是否為xilinx:aliyun-ku115-f2:4ddr-xpr:4.2
。如果不是,必須改為這個配置。使用
vim
修改common.mk
檔案。vim ../common/common.mk
將第 63 行代碼(參數可能在 60-62 行,由您的檔案確定)
CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS}
修改為
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檔案。運行以下命令編譯器。
export XILINX_SDX=/opt/Xilinx/SDx/2017.2
make -f sdaccel.mk xbin_hw
如果您看到如下介面,說明二進位檔案編譯已經開始。編譯過程可能會持續數個小時,請您耐心等待。
步驟 3. 檢查打包指令碼或直譯式程式
運行以下命令檢查打包指令碼或直譯式程式是否存在。
file /root/xbinst_oem/sdaccel_package.sh
說明:如果返回結果中包含
cannot open (No such file or directory)
,說明不存在該檔案,您需要手動下載打包指令碼或直譯式程式。
wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh
步驟 4. 製作鏡像
按以下步驟製作鏡像檔案。
- 運行命令配置OSS環境。
# 將此處的hereIsMySecretId、hereIsMySecretKey、hereIsMyBucket分別替換為您的AccessKeyID、AccessKeySecret和Bucket名稱
faascmd config --id=hereIsMySecretId --key=hereIsMySecretKey
faascmd auth --bucket=hereIsMyBucket
運行
ls
,獲取檔案名。打包二進位檔案。
/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
。運行命令將打包好的檔案上傳到您指定的OSS Bucket中。
# 將檔案名改為打包好的檔案名,您需要根據您的 ls 命令修改
faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
運行如下命令製作鏡像。
# bit.tar.gz、hereIsFPGAImageName、hereIsFPGAImageTag分別替換為剛建立的壓縮包檔案名、鏡像名和鏡像的tag
faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=20171121
返回結果樣本如下圖所示。如果出現
"State":"queued"
,說明這個任務已經排入佇列,開始製作鏡像。說明:製作鏡像比較耗時。等待一段時間後,運行以下命令,查看鏡像狀態。
faascmd list_images
返回結果裡,如果出現
"State":"success"
,說明鏡製作成功。記錄返回結果中的FPGAImageUUID。
步驟 5. 燒寫鏡像
按以下步驟將鏡像燒寫入FPGA晶片。
運行以下命令獲取FpgaUUID。
# 將hereIsYourInstanceId替換為你的FPGA雲端服務器的執行個體ID
faascmd list_instances --instanceId=hereIsYourInstanceId
返回結果如下圖所示。
說明:記錄返回結果中的FpgaUUID。
運行以下命令下載鏡像。
# 將hereIsYourInstanceID替換為這個f2執行個體的ID,將hereIsFpgaUUID替換為您記錄的FpgaUUID,將hereIsImageUUID替換為您記錄的FpgaImageUUID
faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=20171121
在返回結果裡,如果看到
"State":"committed"
,說明鏡像下載成功。說明:您也可以運行以下命令查看鏡像是否下載成功。
# 將 hereIsYourInstanceID 替換為這個 f2 執行個體的 ID,將 hereIsFpgaUUID 替換為您記錄的 FpgaUUID
faascmd fpga_status --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID
返回結果裡,如果看到
"TaskStatus":"valid"
,而且FpgaImageUUID和下載鏡像時的FpgaImageUUID一致,說明鏡像下載正常。
步驟 6. 運行Host程式
執行以下命令運行Host程式。
make -f sdaccel.mk host
unset XILINX_SDX
./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環境。