本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹如何在F3實例上使用OpenCL(Open Computing Language)制作鏡像文件,并燒錄到FPGA芯片中。
前提條件
已創建F3實例。
已在F3實例所在的安全組中添加安全組規則,并放行SSH(22)端口。具體操作,請參見添加安全組規則。
已登錄ECS管理控制臺,并在F3實例的詳情頁上獲取實例ID。
已創建一個OSS Bucket專門用于FaaS服務。若尚未創建OSS Bucket,具體操作,請參見創建一個OSS Bucket。
已獲取命令行工具faasutil。若尚未獲取faasutil工具,具體操作,請參見獲取faasutil。
使用RAM用戶操作FPGA時,必須先完成以下操作:
創建RAM用戶并為RAM用戶授權。具體操作,請參見創建RAM用戶和為RAM用戶授權。
您需要為RAM用戶授予
AliyunOSSFullAccess
權限。獲取AccessKey ID和AccessKey Secret。具體操作,請參見創建AccessKey。
警告僅支持通過RAM用戶的AccessKey使用FaaS服務,可有效降低AccessKey泄露的風險。強烈建議您不要將AccessKey ID和AccessKey Secret明文保存至工程代碼里或者任何容易被他人明文獲取到的地方,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
注意事項
本文中所有操作都必須由同一個賬號在同一地域里執行。
如果您為普通用戶,建議管理員將鏡像中/root/xbinst_oem目錄拷貝至用戶根目錄下。
如果您為普通用戶,請聯系管理員給普通用戶添加/dev/virtio-ports/FaaS.agent的使用權限。
建議您使用RAM用戶操作FaaS實例。您需要為FaaS管理賬號創建一個角色,并授予臨時權限,讓FaaS管理賬號能訪問指定的OSS Bucket。
本文以2018.2版本的SDAccel開發環境為例,若您使用其他版本的SDAccel開發環境,步驟和命令可能會稍有差異。
步驟一:配置環境
配置環境時,請注意以下事項:
配置環境主要包括安裝xocl驅動、設置vivado環境變量、檢查vivado license、檢測aliyun-f3 sdaccel平臺、授予2018.2 runtime配置。
推薦您使用Makefile方式仿真。
遠程登錄F3實例。
具體操作,請參見遠程連接F3實例。
重要后面步驟中的編譯工程可能會持續數小時,建議您使用screen或者nohup等方式登錄,防止ssh超時退出。
運行以下命令,安裝screen。
yum install screen -y
運行以下命令,進入screen。
screen -S f3opencl
運行以下命令,配置環境。
# 每打開一個終端窗口就需要執行該命令一次。 sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl
下載并安裝補丁
y2k22_patch-1.2.zip
。下載地址:Xilinx。其中,
y2k22_patch-1.2.zip
補丁用于修復Xilinx年限溢出缺陷。
步驟二:編譯二進制文件
編譯vadd二進制文件和kernel_global_bandwidth二進制文件的操作如下所示:
示例一:編譯vadd二進制文件
復制examples目錄。
cp -rf /opt/Xilinx/SDx/2018.2/examples ./
進入
vadd
目錄。cd examples/vadd/
運行以下命令,查看
XDEVICE
的值。cat sdaccel.mk | grep "XDEVICE="
您需要確保
XDEVICE
配置為XDEVICE=xilinx_aliyun-f3_dynamic_5_0
。修改
common.mk
文件。運行以下命令,打開
common.mk
文件。vim ../common/common.mk
添加編譯參數
--xp param:compiler.acceleratorBinaryContent=dcp
。在文件代碼中的第61行代碼(參數可能在60~62行,視您的文件而定)末尾添加編譯參數
--xp param:compiler.acceleratorBinaryContent=dcp
,修改后的代碼如下所示。CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
說明由于您必須向編譯服務器提交DCP文件,所以需要添加--xp param:compiler.acceleratorBinaryContent=dcp編譯參數,使得Xilinx? OpenCL? Compiler(xocc)編譯生成一個布局布線后的DCP文件,而不是bit文件。
運行以下命令,編譯程序。
make -f sdaccel.mk xbin_hw
重要編譯過程可能會持續數個小時,請您耐心等待。
顯示結果如下所示,表示二進制文件(vadd)編譯已經開始。
示例二:編譯kernel_global_bandwidth二進制文件
依次運行以下命令,克隆
xilinx 2018.2 examples
。git clone https://github.com/Xilinx/SDAccel_Examples.git
cd SDAccel_Examples/
git checkout 2018.2
說明git分支必須為2018.2版本。
運行以下命令進入上述目錄。
cd getting_started/kernel_to_gmem/kernel_global_bandwidth
修改Makefile文件。
運行以下命令,打開Makefile文件。
vim Makefile
設置
DEVICES
值,使得DEVICES=xilinx_aliyun-f3_dynamic_5_0
。添加編譯參數
--xp param:compiler.acceleratorBinaryContent=dcp
。在文件代碼的第33行代碼末尾添加
--xp param:compiler.acceleratorBinaryContent=dcp
,修改后的代碼如下所示。CLFLAGS +=--xp "param:compiler.acceleratorBinaryContent=dcp" --xp "param:compiler.preserveHlsOutput=1" --xp "param:compiler.generateExtraRunData=true" --max_memory_ports bandwidth -DNDDR_BANKS=$(ddr_banks)
運行以下命令,編譯程序。
重要編譯過程可能會持續數小時,請您耐心等待。
make TARGET=hw
顯示頁面如下所示,表示二進制文件(kernel_global_bandwidth)編譯已經開始。
步驟三:檢查打包腳本
運行以下命令,檢查打包腳本是否存在。
file /home/user1/xbinst_oem/sdaccel_package.sh
如果返回結果中包含cannot open (No such file or directory),說明不存在該文件,您需要運行以下命令手動下載打包腳本。
wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh
步驟四:制作鏡像
初始化faasutil工具并配置OSS環境。
運行以下命令,設置RAM賬號的AccessKey信息。
# 將<HereIsYourSecretId>和<HereIsYourSecretKey>替換為您的RAM用戶AK信息 faasutil config --id=<HereIsYourSecretId> --key=<HereIsYourSecretKey>
運行以下命令,設置FaaS服務要使用的OSS Bucket。
# 將<hereIsYourBucket>替換為您創建的OSS Bucket名稱 faasutil auth --bucket=<hereIsYourBucket>
運行以下命令,獲取后綴為
.xclbin
的文件名。ls
顯示結果如下:
運行以下命令,打包好二進制文件。
/home/user1/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2018.2/examples/vadd/bin_vadd_hw.xclbin
打包完成后,您會在同一目錄下看到一個打包好的文件,如下圖所示。
步驟五:下載鏡像
本步驟介紹如何使用faasutil工具上傳網表文件并下載FPGA鏡像。關于faasutil命令的用法,請參見使用faasutil。
依次運行以下命令,將壓縮包上傳和存放在OSS Bucket中。
將壓縮包上傳到您個人的OSS Bucket
faasutil put_object --object=bit.tar.gz --file=bit.tar.gz #--object(Object file in oss bucket) --file(Local file need to put)
顯示結果如下所示:
將存放在您個人OSS Bucket中的壓縮包上傳到FaaS管理單元的OSS Bucket中
faasutil create_image --object=bit.tar.gz --fpgatype=xilinx --name=<HereIsFPGAImageName> --tags=<HereIsFPGAImageTag> --encrypted=false --shell=<hereIsShellVersionOfFPGA> # <HereIsFPGAImageTag>可選(鏡像Tag) encrypted可選,鏡像加密 <HereIsShellVersionOfFPGA>默認版本
顯示結果如下所示:
運行以下命令,查看FPGA鏡像是否處于可下載狀態。
faasutil list_images
在返回結果中:
如果FPGA鏡像的"State"為"compiling",表示FPGA鏡像處于編譯狀態,您需要繼續等待。
如果FPGA鏡像的"State"為"success",表示FPGA鏡像已經可以下載,您需要找到并記錄FpgaImageUniqueId,用于后續下載鏡像(download_image)時使用。
運行以下命令,在命令返回結果中,找到并記錄fpga bdf。
faasutil list_instances
運行以下命令,下載FPGA鏡像。
faasutil download_image --bdf=<fpga_bdf> --fpgaImageUniqueId=<image_uuid> #<fpga_bdf>由上一步所得 <image_uuid>鏡像uuid
運行以下命令,查看鏡像是否下載成功。
faasutil fpga_status --bdf=<fpga_bdf>
以下為返回結果示例。如果顯示的imageuuid與您獲取的FpgaImageUniqueId一致,并且fpgaStatus參數顯示valid,說明鏡像下載成功。
步驟六:運行Host程序
運行以下命令,配置環境。
# 每打開一個終端窗口就需要執行該命令一次 sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl
配置sdaccel.ini文件。
在host二進制文件所在目錄下,運行以下命令,創建sdaccel.ini文件
vim sdaccel.ini
創建sdaccel.ini文件后,需要輸入下列內容。
[Debug] profile=true [Runtime] runtime_log = "run.log" hal_log = hal.log ert=false kds=false
運行以下命令,運行host程序。
vadd運行命令如下:
make -f sdaccel.mk host
sudo ./vadd bin_vadd_hw.xclbin
kernel_global_bandwidth運行命令如下:
sudo ./kernel_global
如果返回結果中出現Test Passed,說明測試通過。
常用操作
這里介紹FPGA實例的部分常用操作。
任務 | 命令 |
查看幫助文檔 |
|
軟件仿真 |
|
硬件仿真 |
|
只編譯host代碼 |
|
編譯生成可以下載的文件 |
|
清理工作目錄 |
|
強力清除工作目錄 |
|
仿真時只需要按照Xilinx標準流程操作,不需要配置F3_env_setup環境。
SDAccel runtime和SDAccel開發平臺已在阿里云F3官方鏡像中提供,您也可以直接下載SDAccel runtime和SDAccel開發平臺。