すべてのプロダクト
Search
ドキュメントセンター

FPGA as a Service:f3 インスタンスでの OpenCL の使用

最終更新日:Jan 11, 2025

このトピックでは、f3 インスタンスで Open Computing Language(OpenCL)を使用してイメージを作成し、そのイメージをフィールドプログラマブルゲートアレイ(FPGA)にロードする方法について説明します。

前提条件

  • f3 インスタンスが作成されていること。

  • SSH ポート 22 経由のアクセスを許可するルールが、f3 インスタンスが属するセキュリティグループに追加されていること。詳細については、「セキュリティグループルールの追加」をご参照ください。

  • f3 インスタンスの ID が Elastic Compute Service(ECS)コンソール の [インスタンス] ページで取得されていること。

  • FPGA as a Service(FaaS)専用のオブジェクトストレージサービス(OSS)バケットが作成されていること。詳細については、「バケットの作成」をご参照ください。

  • faasutil CLI ツールが取得されていること。詳細については、「faasutil の取得」をご参照ください。

  • Resource Access Management(RAM)ユーザーとして FPGA アクセラレーションインスタンスを管理する前に、以下の操作が実行されていること。

    • RAM ユーザーを作成し、RAM ユーザーに権限を付与します。詳細については、「RAM ユーザーの作成」および「RAM ユーザーへの権限の付与」をご参照ください。

      RAM ユーザーに AliyunOSSFullAccess 権限を付与する必要があります。

    • RAM ユーザーの AccessKey ID と AccessKey Secret を取得します。詳細については、「AccessKey ペアの取得」をご参照ください。

      警告

      RAM ユーザーとして AccessKey ペアを使用してのみ、Field Programmable Gate Array(FPGA)as a Service(FaaS)にアクセスできます。これにより、AccessKey ペアが漏洩するリスクが最小限に抑えられます。プロジェクトのコードに AccessKey ペアをプレーンテキストで保存せず、AccessKey ペアを機密として扱うことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するリソースのセキュリティが侵害される可能性があります。

使用上の注意

  • このトピックで説明されているすべての操作は、同じリージョン内の同じアカウントによって実行される必要があります。

  • 通常のユーザーとして操作を実行する場合、管理者に連絡して、イメージ内の /root/xbinst_oem ディレクトリを通常のユーザーのルートディレクトリにコピーすることをお勧めします。

  • 通常のユーザーとして操作を実行する場合は、管理者に連絡して /dev/virtio-ports/FaaS.agent ディレクトリの権限を申請してください。

  • RAM ユーザーとして FPGA アクセラレーションインスタンスを管理することをお勧めします。RAM ユーザーのロールを作成し、そのロールに指定された OSS バケットにアクセスするための一時的な権限を付与する必要があります。

  • このトピックで説明されている操作とコマンドは、SDAccel 開発環境のバージョン 2018.2 に基づいています。他のバージョンの SDAccel 開発環境を使用する場合、操作とコマンドが異なる場合があります。

手順 1:環境のセットアップ

環境をセットアップする際は、以下の点に注意してください。

  • 環境セットアッププロセスには、xocl ドライバーのインストール、Vivado 環境変数の設定、Vivado ライセンスの確認、Alibaba Cloud f3 SDAccel プラットフォームの確認、2018.2 ランタイムの設定が含まれます。

  • Vivado エミュレーターのみを実行する場合は、環境をセットアップする際に手順 2 から 4 を実行しないでください。Vivado エミュレーターを実行するには、Vivado 環境変数を設定するだけで済みます。

  • エミュレーションには Makefile を使用することをお勧めします。

  1. f3 インスタンスに接続します。

    詳細については、「ユーザー名とパスワードを使用して Linux インスタンスに接続する」をご参照ください。

    重要

    コンパイルプロセスには数時間かかる場合があります。SSH タイムアウトによる予期しない切断を防ぐため、Screen または nohup を使用してインスタンスに接続することをお勧めします。

  2. Screen をインストールするには、次のコマンドを実行します。

    yum install screen -y
  3. Screen を起動するには、次のコマンドを実行します。

    screen -S f3opencl
  4. 環境をセットアップするには、次のコマンドを実行します。

    # 新しいターミナルウィンドウを開くたびに、このコマンドを実行します。
    sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl
  5. y2k22_patch-1.2.zip パッチをダウンロードしてインストールします。

    ダウンロード URL:Xilinxy2k22_patch-1.2.zip パッチは、Xilinx のタイムスタンプオーバーフローバグを修正するために使用されます。

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

次の例は、vadd および kernel_global_bandwidth バイナリファイルをコンパイルする方法を示しています。

例 1:vadd バイナリファイルのコンパイル

  1. examples ディレクトリをコピーするには、次のコマンドを実行します。

    cp -rf /opt/Xilinx/SDx/2018.2/examples ./
  2. vadd ディレクトリに移動するには、次のコマンドを実行します。

    cd examples/vadd/
  3. XDEVICE の値を確認するには、次のコマンドを実行します。

    cat sdaccel.mk | grep "XDEVICE="

    XDEVICE の値が xilinx_aliyun-f3_dynamic_5_0 であることを確認します。

  4. common.mk ファイルを変更します。

    1. common.mk ファイルを開くには、次のコマンドを実行します。

      vim ../common/common.mk
    2. コンパイルパラメーター --xp param:compiler.acceleratorBinaryContent=dcp を追加します。

      コード行 60、61、または 62 の末尾に、コンパイルパラメーター --xp param:compiler.acceleratorBinaryContent=dcp を追加します。コンパイルパラメーターを追加する必要があるコード行は、common.mk ファイルの内容によって異なります。次のサンプルコードは例を示しています。

      CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
      説明

      配置配線完了後に Xilinx® OpenCL™ Compiler(xocc) が .bit ファイルではなくデザインチェックポイント(DCP)ファイルを生成できるように、コンパイルパラメーター --xp param:compiler.acceleratorBinaryContent=dcp を追加する必要があります。その後、DCP ファイルをコンパイルサーバーに送信できます。

  5. バイナリファイルをコンパイルするには、次のコマンドを実行します。

    make -f sdaccel.mk xbin_hw
    重要

    コンパイルプロセスには数時間かかる場合があります。コンパイルが完了するまで待ちます。

    次の例のような情報が表示された場合、vadd バイナリファイルがコンパイルされています。f3_opencl_1

例 2:kernel_global_bandwidth バイナリファイルのコンパイル

  1. xilinx 2018.2 examples をクローンするには、次のコマンドを順番に実行します。

    git clone https://github.com/Xilinx/SDAccel_Examples.git
    cd SDAccel_Examples/
    git checkout 2018.2
    説明

    Git ブランチバージョンは 2018.2 である必要があります。

  2. kernel_global_bandwidth ディレクトリに移動するには、次のコマンドを実行します。

    cd getting_started/kernel_to_gmem/kernel_global_bandwidth
  3. Makefile ファイルを変更します。

    1. Makefile ファイルを開くには、次のコマンドを実行します。

      vim Makefile
    2. DEVICESxilinx_aliyun-f3_dynamic_5_0 に設定します。

    3. コンパイルパラメーター --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)
  4. バイナリファイルをコンパイルするには、次のコマンドを実行します。

    重要

    コンパイルプロセスには数時間かかる場合があります。コンパイルが完了するまで待ちます。

    make TARGET=hw

    次の例のような情報が表示された場合、kernel_global_bandwidth バイナリファイルがコンパイルされています。f3_opencl_2

手順 3:パッケージスクリプトの確認

パッケージスクリプトが存在するかどうかを確認するには、次のコマンドを実行します。

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

手順 4:イメージの作成

  1. faasutil ツールを初期化し、OSS 環境をセットアップします。

    1. RAM ユーザーの AccessKey ペアを設定するには、次のコマンドを実行します。

      # <HereIsYourSecretId> を RAM ユーザーの AccessKey ID に、<HereIsYourSecretKey> を RAM ユーザーの AccessKey Secret に置き換えます。
      faasutil config --id=<HereIsYourSecretId> --key=<HereIsYourSecretKey>
    2. FaaS 専用の OSS バケットを設定するには、次のコマンドを実行します。

      # <hereIsYourBucket> を作成した OSS バケットの名前に置き換えます。
      faasutil auth --bucket=<hereIsYourBucket>
  2. ファイル名拡張子 .xclbin のファイルを取得するには、次のコマンドを実行します。

    ls

    次の情報が返されます。

    f3_opencl_3

  3. バイナリファイルをパッケージ化するには、次のコマンドを実行します。

    /home/user1/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2018.2/examples/vadd/bin_vadd_hw.xclbin

    バイナリファイルがパッケージ化されると、パッケージ化されたファイルが同じディレクトリにあります。次の図は例を示しています。f3_opencl_4

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

この手順では、faasutil ツールを使用してネットリストファイルをアップロードし、FPGA イメージをダウンロードする方法について説明します。 faasutil の使用方法の詳細については、「faasutil の使用」をご参照ください。

  1. パッケージを OSS バケットにアップロードするには、次のコマンドを順番に実行します。

    • パッケージを OSS バケットにアップロードするには、次のコマンドを実行します。

      faasutil put_object --object=bit.tar.gz --file=bit.tar.gz  #--object(OSS バケット内のオブジェクトファイル) --file(配置する必要があるローカルファイル)

      次の情報が返されます。

      f3_0opencl

    • OSS バケットから FaaS 管理ユニットの OSS バケットにパッケージをアップロードするには、次のコマンドを実行します。

      faasutil create_image --object=bit.tar.gz --fpgatype=xilinx --name=<HereIsFPGAImageName> --tags=<HereIsFPGAImageTag> --encrypted=false --shell=<hereIsShellVersionOfFPGA> # <HereIsFPGAImageTag>: オプション。イメージのタグ。 encrypted: オプション。イメージを暗号化するかどうかを指定します。 <HereIsShellVersionOfFPGA>: デフォルトバージョン。

      次の情報が返されます。

      f3_opencl-2

  2. FPGA イメージがダウンロード可能かどうかを確認するには、次のコマンドを実行します。

    faasutil list_images

    コマンド出力で:

    • "State" の値が "compiling" の場合、FPGA イメージはコンパイル中です。

      image-1

    • "State" の値が "success" の場合、FPGA イメージをダウンロードできます。 FpgaImageUniqueId の値を見つけて記録します。その後、イメージ UUID を使用して、faasutil download_image コマンドを実行することで FPGA イメージをダウンロードできます。image2

  3. 次のコマンドを実行します。コマンド出力で fpga_bdf の値を見つけて記録します。

    faasutil list_instances

    image-5

  4. FPGA イメージをダウンロードするには、次のコマンドを実行します。

    faasutil download_image --bdf=<fpga_bdf> --fpgaImageUniqueId=<image_uuid> # <fpga_bdf> を前の手順で取得した値に、<image_uuid> をイメージの UUID に置き換えます。

    image-6

  5. イメージがダウンロードされたかどうかを確認するには、次のコマンドを実行します。

    faasutil fpga_status --bdf=<fpga_bdf>

    次のようなコマンド出力が表示されます。コマンド出力の imageuuid の値が取得した FpgaImageUniqueId の値と同じで、fpgaStatus の値が valid の場合、イメージはダウンロードされています。image-7

手順 6:ホストプログラムの実行

  1. 基本環境をセットアップするには、次のコマンドを実行します。

    # 新しいターミナルウィンドウを開くたびに、このコマンドを実行します。
    sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl
  2. sdaccel.ini ファイルを設定します。

    ホストバイナリファイルが存在するディレクトリで、次のコマンドを実行して sdaccel.ini ファイルを作成します。

    vim sdaccel.ini

    sdaccel.ini ファイルが作成されたら、ファイルに次の内容を追加します。

    [Debug]
    profile=true
    [Runtime]
    runtime_log = "run.log"
    hal_log = hal.log
    ert=false
    kds=false
  3. ホストプログラムを実行します。

    • vadd の場合、次のコマンドを実行します。

      make -f sdaccel.mk host
      sudo ./vadd bin_vadd_hw.xclbin
    • kernel_global_bandwidth の場合、次のコマンドを実行します。

      sudo ./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 開発プラットフォーム を直接ダウンロードできます。