全部產品
Search
文件中心

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

更新時間:Aug 23, 2018

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

說明

  • 本文所述所有操作都必須由同一個帳號在同一地域裡執行。
  • 強烈建議您使用RAM使用者操作FaaS執行個體。為了防止意外操作,您需要讓RAM使用者僅執行必要的操作。在操作FPGA鏡像及下載時,因為您需要從指定的OSS Bucket下載原始DCP工程,所以您必須為FaaS管理帳號建立一個角色,並授予臨時許可權,讓FaaS管理帳號訪問指定的OSS Bucket。如果需要對IP加密,必須授予RAM使用者KMS相關許可權。如果需要做許可權檢查,必須授予查看使用者資源的許可權。

前提條件

操作步驟

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

第 1 步. 遠端連線執行個體

遠端連線Linux執行個體

第 2 步. 安裝基礎環境

運行以下指令碼或直譯式程式安裝基礎環境。

  1. source /opt/dcp1_0/script/f1_env_set.sh

第 3 步. 下載官方的OpenCL Example

按以下步驟下載官方的OpenCL Example。

  1. 建立並切換到/opt/tmp目錄。

    1. mkdir -p /opt/tmp
    2. cd /opt/tmp

    此時,您在/opt/tmp目錄下。
    查看目前的目錄/opt/tmp

  2. 依次執行以下命令下載並解壓Example檔案。

    1. wget https://www.altera.com/content/dam/altera-www/global/en_US/others/support/examples/download/exm_opencl_matrix_mult_x64_linux.tgz
    2. tar -zxvf exm_opencl_matrix_mult_x64_linux.tgz

    解壓後的目錄如下圖所示。
    /opt/tmp目錄

  3. 進入matrix_mult目錄下,執行編譯命令。

    1. cd matrix_mult
    2. aoc -v -g --report ./device/matrix_mult.cl

    編譯過程可能會持續數個小時,您可以再開一個會話,使用 top 命令監控系統佔用,確定編譯狀態。

第 4 步. 上傳設定檔

按以下步驟上傳設定檔。

  1. 運行以下命令初始化faascmd。

    1. # 如果需要,要添加環境變數及運行許可權
    2. export PATH=$PATH:/opt/dcp1_0/script/
    3. chmod +x /opt/dcp1_0/script/faascmd
    4. # 將hereIsYourSecretId換為您的AccessKey ID,hereIsYourSecretKey替換為您的AccessKey Secret
    5. faascmd config --id=hereIsYourSecretId --key=hereIsYourSecretKey
    6. # 將hereIsYourBucket換為華東1OSS的Bucket名稱
    7. faascmd auth --bucket=hereIsYourBucket
  2. 進入matrix_mult/output_files,上傳設定檔。

    1. cd matrix_mult/output_files # 此時您應該在/opt/tmp/matrix_mult/matrix_mult/output_files
    2. faascmd upload_object --object=afu_fit.gbs --file=afu_fit.gbs
  3. 使用gbs製作FPGA鏡像。

    1. # 將hereIsFPGAImageName換為您的鏡象名,將hereIsFPGAImageTag替換為您的鏡像標籤
    2. faascmd create_image --object=afu_fit.gbs --fpgatype=intel --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=V0.11
  4. 查看鏡像是否製作成功:運行命令faascmd list_images
    返回結果裡,如果顯示 "State":"success",表示鏡像製作成功。請記錄返回結果裡顯示的FpgaImageUUID,稍後會用到。
    查看鏡像是否製作成功

第 5 步. 下載鏡像到f1執行個體

按以下步驟將鏡像下載到f1執行個體。

  1. 運行命令獲取FPGA ID。

    1. # 將hereIsYourInstanceId替換為您的FPGA執行個體ID
    2. faascmd list_instances --instanceId=hereIsYourInstanceId

    以下為返回結果。請記錄FpgaUUID。
    獲取FPGA ID

  2. 運行命令下載鏡像到f1執行個體。

    1. # 將hereIsYourInstanceID替換為剛剛保存的執行個體ID;將hereIsFpgaUUID替換為上一條命令中記下的FpgaUUID;將hereIsImageUUID替換為上一步記下的FpgaImageUUID
    2. faascmd download_image --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID --fpgatype=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V0.11
  3. 運行命令檢查是否下載成功。

    1. # 將hereIsYourInstanceID替換為剛剛保存的執行個體ID;將hereIsFpgaUUID替換為上一條命令中記下的FpgaUUID;
    2. faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceID

    如果返回結果裡顯示"TaskStatus":"operating",說明下載成功。
    查看下載是否成功

第 6 步. 將FPGA鏡像燒錄到FPGA晶片

按以下步驟將FPGA鏡像燒錄到FPGA晶片。

  1. 開啟 第2步 環境的視窗。如果已關閉,重新執行 第2步 操作。

  2. 運行命令配置OpenCL的運行環境。

    1. sh /opt/dcp1_0/opencl/opencl_bsp/linux64/libexec/setup_permissions.sh
  3. 返回上級目錄。

    1. cd ../.. # 此時您在/opt/tmp/matrix_mult
  4. 執行編譯命令。

    1. make
    2. # 輸出環境配置
    3. export CL_CONTEXT_COMPILER_MODE_ALTERA=3
    4. cp matrix_mult.aocx ./bin/matrix_mult.aocx
    5. cd bin
    6. host matrix_mult.aocx

    當您看到如下輸出時,說明配置完成。請注意,最後一行必須為Verification: PASS

    1. [root@iZbpXXXXXZ bin]# ./host matrix_mult.aocx
    2. Matrix sizes:
    3. A: 2048 x 1024
    4. B: 1024 x 1024
    5. C: 2048 x 1024
    6. Initializing OpenCL
    7. Platform: Intel(R) FPGA SDK for OpenCL(TM)
    8. Using 1 device(s)
    9. skx_fpga_dcp_ddr : SKX DCP FPGA OpenCL BSP (acl0)
    10. Using AOCX: matrix_mult.aocx
    11. Generating input matrices
    12. Launching for device 0 (global size: 1024, 2048)
    13. Time: 40.415 ms
    14. Kernel time (device 0): 40.355 ms
    15. Throughput: 106.27 GFLOPS
    16. Computing reference output
    17. Verifying
    18. Verification: PASS