本ページでは、OpenCL (Open Computing Language ) を使用してイメージを作成し、f3 インスタンスの FPGA チップにイメージをダウンロードする方法を紹介します。

  • 本ページに記載されているすべての操作は、同じリージョンの 1 つのアカウントで実行する必要があります。
  • f3 インスタンスを RAM ユーザーとして使用することを推奨します。 RAM ユーザーのロールを作成し、OSS バケットにアクセスするため、ロールに一時的な権限を付与する必要があります。

前提条件

  • f3 インスタンスの作成します
    • 共有しているイメージのみ、 f3 インスタンスで使用できます。
    • インスタンスをインターネットにアクセスできるように、インスタンスの作成時に [パブリック IP の割り当て] を選択します。
    • f3 インスタンスのセキュリティグループは、ルールを追加して、SSH ポート 22 へのアクセスを許可しました。
  • ECS コンソールにログインして、f3 インスタンスのインスタンス ID を取得します。
  • 同じアカウントを使用して、f3 インスタンスと同じリージョンに OSS バケットを作成します。 詳しくは「 OSS への登録」および「バケットの作成」をご参照ください。
  • FPGA を RAM ユーザーとして操作するには、事前に次の手順を実行します。

手順

f3 インスタンスで OpenCL を使用してイメージを作成し、FPGA チップにダウンロードするには、次の手順を実行します。

手順 1. 環境設定

環境を設定するには、次の手順を実行します。

  1. f3 インスタンスに接続します
    その後のコンパイル処理には数時間かかる場合があります。 SSH タイムアウトによって強制的にログアウトされないようにするために、screen または nohub を介してログインすることを推奨します。
  2. コマンドを実行して Screen をインストールします。
    yum install screen -y
  3. コマンドを実行して Screen に入ります。
    screen -S f3opencl
  4. コマンドを実行して、環境を設定します。
    source /root/xbinst_oem/f3_env_setup.sh xocl  # Run the command each time you open a new terminal window
    • 環境の設定には、xocl ドライバーのインストール、vivado 環境変数の設定、vivado ライセンスの確認、aliyun-f3 sdaccel プラットフォームの検出、2018.2 ランタイムの設定、および faascmd バージョンの検出が含まれます。
    • sdaccel のエミュレーションを実行する場合は、上記のコマンドを実行して環境を設定しないでください。 代わりに、vivado の環境変数を個別に設定するだけで済みます。
    • エミュレーションには Makefile を使用することを推奨します。

手順 2. バイナリファイルのコンパイル

  • 例 1: vadd

    バイナリファイルをコンパイルするには、次の手順を実行します。

    1. "example"ディレクトリをコピーします。
      cp -rf /opt/Xilinx/SDx/2018.2/examples . /
    2. "vadd" ディレクトリを入力します。
      cd examples/vadd/
    3. cat sdaccel.mk | grep "XDEVICE=" を実行して、XDEVICE の値を表示します。 その設定が XDEVICE = xilinx_aliyun-f3_dynamic_5_0 であることを確認してください。
    4. 次の手順に従って、"common.mk" ファイルを変更します。
      1. vim ../common/common.mk コマンドを実行してファイルを開きます。
      2. コードの 61 行目の末尾に、コンパイルパラメーター " --xp param:compiler.acceleratorBinaryContent=dcp" を追加します (パラメーターは、ファイルによっては 60 ~ 62 行になる場合があります)。 修正されたコードは次のとおりです。
        CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
        DCP ファイルをコンパイルサーバに送信する必要があることを考えると、Xilinx® OpenCL™ Compiler (xocc ) により、配置とルーティングが完了した後に (ビットファイルではなく ) DCPファイルが生成されるように、パラメーター "--xp param:compiler.acceleratorBinaryContent=dcp" を追加する必要があります。
    5. コマンドを実行してプログラムをコンパイルします。
      make -f sdaccel.mk xbin_hw
      次の情報が表示された場合、バイナリファイルのコンパイルは開始されています。 処理には数時間かかる場合があります。
  • 例 2: kernel_global_bandwidth

    次の手順に従って、"kernel_global_bandwidth" バイナリファイルをコンパイルします。

    1. xilinx 2018.2 example のクローンを作成します。
      git clone https://github.com/Xilinx/SDAccel_Examples.git
      cd SDAccel_Examples/
      git checkout 2018.2
      git ブランチは 2018.2 バージョンである必要があります。
    2. cd getting_started/kernel_to_gmem/kernel_global_bandwidth/ コマンドを実行して、ディレクトリに入ります。
    3. 次の手順に従って、"Makefile" ファイルを変更ます。
      1. vim Makefile コマンドを実行して、ファイルを開きます。
      2. DEVICES=xilinx_aliyun-f3_dynamic_5_0 を設定します。
      3. コードの 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)
    4. コマンドを実行してプログラムをコンパイルします。
      make TARGET=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. イメージの作成

イメージを作成するには、次の手順を実行します。

  1. コマンドを実行して OSS 環境を設定します。
    faascmd config --id=hereIsMySecretId --key=hereIsMySecretKey #Replace hereIsMySecretId, hereIsMySecretKey with your AccessKeyID, AccessKeySecret
    faascmd auth --bucket=hereIsMyBucket # Replace hereIsMyBucket with your bucket name
  2. ls コマンドを実行して、接尾辞が .xclbin のファイルを取得します。
  3. コマンドを実行してバイナリファイルをパッケージ化します。
    /root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.4.op/examples/vadd/bin_vadd_hw.xclbin

    パッケージ化が完了すると、次の図に示すように、同じディレクトリにパッケージファイルが見つかります。

手順 5. イメージのダウンロード

スクリプト化されたプロセスまたは段階的プロセスを使用してパッケージファイルをアップロードし、FPGA イメージをダウンロードできます。

  • スクリプトプロセス: 1 つの FPGA チップを持つ f3 インスタンスのみに適用。

    1. 以下のコマンドを実行してパッケージをアップロードし、イメージファイルを生成します。
      sh /root/xbinst_oem/tool/faas_upload_and_create_image.sh <bit.tar.gz - the package to upload>
    2. イメージファイルをダウンロードします。
      sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz - package name> <0/1> # The last number <0/1> stands for the FPGA serial No. in the instance

      0 は f3 インスタンスの最初の FPGA を示します。 シングル FPGA インスタンスの場合、FPGA シリアル番号は常に 0 です。 4 つの FPGA を持つインスタンスなど、複数の FPGA を持つインスタンスの場合、シリアル番号は 0、1、2、3 です。

      同じイメージを複数の FPGA にダウンロードするには、末尾にシリアル番号を追加します。 たとえば、同じイメージを 4 つの FPGA チップにダウンロードするには、次のようなコマンドを実行します。

      sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz - package name> 0
      sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz - package name> 1
      sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz - package name> 2
      sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz - package name> 3
  • 段階的プロセス: faascmd ツールを使用して、操作を行います。
    1. コマンドを実行して、パッケージを自身の OSS バケットにアップロードします。 次に、自身の OSS バケットの gbs を、FaaS 管理ユニットの OSS バケットにアップロードします。
      faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
      faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=hereIsShellVersionOfFPGA
      							
    2. コマンドを実行して、FPGA イメージがダウンロード可能かどうかを確認します。
      faascmd list_images
      返されたメッセージに State:compiling が表示された場合は、FPGA イメージはコンパイル中です。 返されたメッセージに State:success が表示されたら、FPGA イメージのダウンロード準備が整いました。 FpgaImageUUID を探して書き留めます。
    3. 次のコマンドを実行します。 返されたメッセージで、FpgaUUID を探して書き留めます。
      faascmd list_instances --instanceId=hereIsYourInstanceId # Replace hereIsYourInstanceId with the f3 instance ID
    4. コマンドを実行して FPGA イメージをダウンロードします。
      
      faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=hereIsShellVersionOfFpga
      # Replace hereIsYourInstanceId with the f3 instance ID, hereIsFpgaUUID with the FpgaUUID, and hereIsImageUUID with the FpgaImageUUID
    5. コマンドを実行して、イメージが正常にダウンロードされたかどうかを表示します。
      faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceId # Replace hereIsFpgaUUID with the obtained FpgaUUID, and hereIsYourInstanceId with the f3 instance ID

      以下は返されるメッセージの例です。 メッセージ内の FpgaImageUUID と、書き留めた FpgaImageUUID が同じで、メッセージに "TaskStatus":"valid" と表示されている場合、イメージは正常にダウンロードされています。

手順 6: Host プログラムの実行

Host プログラムを実行するには、次の手順を実行します。

  1. 以下のコマンドを実行して環境を設定します。
    source /root/xbinst_oem/f3_env_setup.sh xocl  # Run the command each time you open a new terminal window
  2. sdaccel.ini ファイルを設定します。
    Host バイナリファイルが置かれたディレクトリで、vim sdaccel.ini コマンドを実行して、"sdaccel.ini" ファイルを作成して次の内容を入力します。
    [Debug]
    profile=true
    [Runtime]
    runtime_log = "run.log"
    hal_log = hal.log
    ert=false
    kds=false
  3. Host を実行します。
    • vadd については、次のコマンドを実行します。
      make -f sdaccel.mk host
      ./vadd bin_vadd_hw.xclbin
    • kernel_global_bandwidth については、次のコマンドを実行します。
      ./kernel_global

Test Passed が返されたら、テストは成功です。

その他の一般的なコマンド

このセクションでは、FPGA インスタンスの一般的なコマンドをいくつか紹介します。

タスク コマンド
ヘルプ文書の表示 make -f ./sdaccel.mk help
ソフトウェアシミュレーションの実行 make -f ./sdaccel.mk run_cpu_em
ハードウェアシミュレーションの実行 make -f ./sdaccel.mk run_hw_em
ホストコードのみのコンパイル make -f ./sdaccel.mk host
ダウンロード用ファイルのコンパイルおよび生成 make -f sdaccel.mk xbin_hw
作業ディレクトリの消去 make -f sdaccel.mk clean
作業ディレクトリの強制消去 make -f sdaccel.mk cleanall
  • エミュレーション中は、Xilinx エミュレーションプロセスに従います。 f3_env_setup 環境を設定する必要はありません。
  • SDAccel ランタイムと SDAccel 開発プラットフォームは、Alibaba Cloud が提供する公式 f3 イメージで入手できます。 ダウンロードは、SDAccel ランタイムSDAccel 開発プラットフォームで行うこともできます。