本文介紹如何在f1執行個體上使用OpenCL(Open Computing Language)製作鏡像檔案,並燒寫到FPGA晶片中。
說明:
- 本文所述所有操作都必須由同一個帳號在同一地域裡執行。
- 強烈建議您使用RAM使用者操作FaaS執行個體。為了防止意外操作,您需要讓RAM使用者僅執行必要的操作。在操作FPGA鏡像及下載時,因為您需要從指定的OSS Bucket下載原始DCP工程,所以您必須為FaaS管理帳號建立一個角色,並授予臨時許可權,讓FaaS管理帳號訪問指定的OSS Bucket。如果需要對IP加密,必須授予RAM使用者KMS相關許可權。如果需要做許可權檢查,必須授予查看使用者資源的許可權。
前提條件
建立f1執行個體,確認執行個體能訪問公網,並且執行個體所在安全性群組中已經添加規則放行SSH(22)通信埠的訪問。
說明:f1執行個體只能使用我們共用給您的鏡像。詳細資料,請參見 建立f1執行個體。
您已經 登入ECS管理主控台,在f1執行個體的詳情頁上,獲取執行個體ID。
您必須先 開通OSS服務,並 建立一個OSS Bucket 用於上傳您的檔案。Bucket與f1執行個體必須屬於同一個帳號、同一個地域。
如果需要加密檔案,開通金鑰管理服務(KMS)。
使用RAM使用者操作FPGA,必須完成以下操作:
操作步驟
按以下步驟在f1執行個體上使用OpenCL Example製作鏡像檔案,並燒寫到FPGA晶片中。
第 1 步. 遠端連線執行個體
第 2 步. 安裝基礎環境
運行以下指令碼或直譯式程式安裝基礎環境。
source /opt/dcp1_0/script/f1_env_set.sh
第 3 步. 下載官方的OpenCL Example
按以下步驟下載官方的OpenCL Example。
建立並切換到/opt/tmp目錄。
mkdir -p /opt/tmp
cd /opt/tmp
此時,您在/opt/tmp目錄下。
依次執行以下命令下載並解壓Example檔案。
wget https://www.altera.com/content/dam/altera-www/global/en_US/others/support/examples/download/exm_opencl_matrix_mult_x64_linux.tgz
tar -zxvf exm_opencl_matrix_mult_x64_linux.tgz
解壓後的目錄如下圖所示。
進入matrix_mult目錄下,執行編譯命令。
cd matrix_mult
aoc -v -g --report ./device/matrix_mult.cl
編譯過程可能會持續數個小時,您可以再開一個會話,使用
top
命令監控系統佔用,確定編譯狀態。
第 4 步. 上傳設定檔
按以下步驟上傳設定檔。
運行以下命令初始化faascmd。
# 如果需要,要添加環境變數及運行許可權
export PATH=$PATH:/opt/dcp1_0/script/
chmod +x /opt/dcp1_0/script/faascmd
# 將hereIsYourSecretId換為您的AccessKey ID,hereIsYourSecretKey替換為您的AccessKey Secret
faascmd config --id=hereIsYourSecretId --key=hereIsYourSecretKey
# 將hereIsYourBucket換為華東1OSS的Bucket名稱
faascmd auth --bucket=hereIsYourBucket
進入matrix_mult/output_files,上傳設定檔。
cd matrix_mult/output_files # 此時您應該在/opt/tmp/matrix_mult/matrix_mult/output_files
faascmd upload_object --object=afu_fit.gbs --file=afu_fit.gbs
使用gbs製作FPGA鏡像。
# 將hereIsFPGAImageName換為您的鏡象名,將hereIsFPGAImageTag替換為您的鏡像標籤
faascmd create_image --object=afu_fit.gbs --fpgatype=intel --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=V0.11
查看鏡像是否製作成功:運行命令
faascmd list_images
。
返回結果裡,如果顯示"State":"success"
,表示鏡像製作成功。請記錄返回結果裡顯示的FpgaImageUUID,稍後會用到。
第 5 步. 下載鏡像到f1執行個體
按以下步驟將鏡像下載到f1執行個體。
運行命令獲取FPGA ID。
# 將hereIsYourInstanceId替換為您的FPGA執行個體ID
faascmd list_instances --instanceId=hereIsYourInstanceId
以下為返回結果。請記錄FpgaUUID。
運行命令下載鏡像到f1執行個體。
# 將hereIsYourInstanceID替換為剛剛保存的執行個體ID;將hereIsFpgaUUID替換為上一條命令中記下的FpgaUUID;將hereIsImageUUID替換為上一步記下的FpgaImageUUID
faascmd download_image --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID --fpgatype=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V0.11
運行命令檢查是否下載成功。
# 將hereIsYourInstanceID替換為剛剛保存的執行個體ID;將hereIsFpgaUUID替換為上一條命令中記下的FpgaUUID;
faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceID
如果返回結果裡顯示
"TaskStatus":"operating"
,說明下載成功。
第 6 步. 將FPGA鏡像燒錄到FPGA晶片
按以下步驟將FPGA鏡像燒錄到FPGA晶片。
運行命令配置OpenCL的運行環境。
sh /opt/dcp1_0/opencl/opencl_bsp/linux64/libexec/setup_permissions.sh
返回上級目錄。
cd ../.. # 此時您在/opt/tmp/matrix_mult
執行編譯命令。
make
# 輸出環境配置
export CL_CONTEXT_COMPILER_MODE_ALTERA=3
cp matrix_mult.aocx ./bin/matrix_mult.aocx
cd bin
host matrix_mult.aocx
當您看到如下輸出時,說明配置完成。請注意,最後一行必須為
Verification: PASS
。[root@iZbpXXXXXZ bin]# ./host matrix_mult.aocx
Matrix sizes:
A: 2048 x 1024
B: 1024 x 1024
C: 2048 x 1024
Initializing OpenCL
Platform: Intel(R) FPGA SDK for OpenCL(TM)
Using 1 device(s)
skx_fpga_dcp_ddr : SKX DCP FPGA OpenCL BSP (acl0)
Using AOCX: matrix_mult.aocx
Generating input matrices
Launching for device 0 (global size: 1024, 2048)
Time: 40.415 ms
Kernel time (device 0): 40.355 ms
Throughput: 106.27 GFLOPS
Computing reference output
Verifying
Verification: PASS