ここでは、OpenCL (Open Computing Language) を使用してイメージファイルを作成し、FPGA チップにイメージをダウンロードする方法を紹介します。

  • ここに記載されているすべての操作は、同じリージョンの 1 つのアカウントで実行する必要があります。
  • f1 インスタンスを RAM ユーザーとして使用することを強く推奨します。 不要な操作を避けるには、RAM ユーザーに必要な操作のみを実行する権限を与える必要があります。 RAM ユーザーのロールを作成し、OSS バケットにアクセスするため、ロールに一時的な権限を付与する必要があります。 IP アドレスを暗号化する場合は、RAM ユーザーが KMS (Key Management Service) を使用できるようにします。 RAMユーザーが権限を確認するには、アカウントのリソースを表示する権限を与えます。 始める前に、以下を完了してください。

前提条件

  • f1 インスタンスを作成し、セキュリティグループのルールを追加して、インスタンスの SSH ポート 22 へのインターネットアクセスを許可します。
    共有しているイメージのみが、f1 インスタンスで使用できます。 詳しくは「f1 インスタンスの作成」をご参照ください。
  • ECS コンソール にログインして、インスタンス ID を取得します。
  • OSS バケットを作成して、カスタムビットストリームファイルをアップロードします。 OSS バケットと f1 インスタンスは、同じリージョンの 1 つのアカウントで所有している必要があります。
  • ビットストリームを暗号化するには、KMS (Key Management Service) を有効にします。
  • f1 インスタンスを RAM ユーザーとして操作するには、次の操作を実行する必要があります。

手順

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

手順 1. f1 インスタンスへの接続

Linux インスタンスに接続します

手順 2. 基本環境のインストール

次のスクリプトを実行して、基本環境をインストールします。

source /opt/dcp1_0/script/f1_env_set.sh
			

手順 3. OpenCL サンプルのダウンロード

以下の手順に従って、公式 opencl のサンプルをダウンロードします。

  1. "/opt/tmp" ディレクトリを作成し、現在のディレクトリをそのディレクトリに変更します。
    mkdir -p /opt/tmp
    cd /opt/tmp
    					
    現在、 /opt/tmp ディレクトリに入っています。

  2. コマンドを1つずつ実行して、OpenCL 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
    					
    次の図は、解凍後のディレクトリを示しています。

  3. 現在のディレクトリを "matrix_mult" ディレクトリに変更し、コンパイルのコマンドを実行します。
    cd matrix_mult
    aoc -v -g --report ./device/matrix_mult.cl
    					

    コンパイルのプロセスには数時間かかります。 新しいコンソールを開き、top コマンドを実行すると、インスタンス上のプロセスやシステムリソースの使用状況をモニターし、コンパイルプロセスのステータスを見ることができます。

手順 4. OSS バケットへの設定ファイルのアップロード

以下の手順に従って、設定ファイルをアップロードします。

  1. コマンドを実行して faascmd を初期化します。
    # If needed, add the environment variable and grant the permission to run the commands
    export PATH=$PATH:/opt/dcp1_1/script/
    chmod +x /opt/dcp1_1/script/faascmd
    # Replace hereIsYourSecretId with your AccessKey ID. Replace hereIsYourSecretKey with your AccessKey Secret
    faascmd config --id=hereIsYourSecretId --key=hereIsYourSecretKey
    # Replace hereIsYourBucket with the bucket name of your OSS in the Region China East 1.
    faascmd auth --bucket=hereIsYourBucket
    					
  2. 現在のディレクトリを "matrix_mult/output_files" ディレクトリに変更し、設定ファイルをアップロードします。
    cd matrix_mult/output_files # Now you are accessing/opt/tmp/matrix_mult/matrix_mult/output_files
    faascmd upload_object --object=afu_fit.gbs --file=afu_fit.gbs
    					
  3. gbs を使用して FPGA イメージを作成します。
    # Replace hereIsYourImageName with your image name. Replace hereIsYourImageTag with your image tag.
    faascmd create_image --object=dma_afu.gbs --fpgatype=intel --name=hereIsYourImageName --tags=hereIsYourImageTag --encrypted=false --shell=V1.1  
    					
  4. faascmd list_images コマンドを実行して、イメージが作成されたかどうかを確認します。 返された結果で "State":"success" が表示されている場合は、イメージが作成されたことを意味します。 FpgaImageUUID を記録します。

手順 5. f1 インスタンスへのイメージのダウンロード

f1 インスタンスにイメージをダウンロードするには、次の手順を実行します。

  1. コマンドを実行して、FPGA ID を取得します。
    # Replace hereIsYourInstanceId with your f1 instance ID.
    faascmd list_instances --instanceId=hereIsYourInstanceId
    					
    返された結果のサンプル: 返された結果に FpgaUUID を記録します。

  2. コマンドを実行して、イメージを f1 インスタンスにダウンロードします。
    # Replace hereIsYourInstanceID with your f1 instance ID. Replace hereIsFpgaUUID with your FPGA UUID. Replace hereIsImageUUID with your image UUID.
    faascmd download_image  --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID --fpgatype=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V0.11
    					
  3. コマンドを実行して、イメージがダウンロードされているかどうかを確認します。
    # Replace hereIsYourInstanceID with your f1 instance ID. Replace hereIsFpgaUUID with your FPGA UUID.
    faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceID
    					
    返された結果に "TaskStatus": "operating" が存在する場合、イメージがダウンロードされたことを意味します。

手順 6. FPGA チップへの FPGA イメージのダウンロード

FPGA イメージを FPGA チップにダウンロードするには、次の手順を実行します。

  1. 手順 1 でコンソールを開きます。 閉じている場合、手順 1 を繰り返します。
  2. OpenCL のランタイム環境を設定するには、次のコマンドを実行します。
    sh /opt/dcp1_1/opencl/opencl_bsp/linux64/libexec/setup_permissions.sh
    					
  3. コマンドを実行して親ディレクトリに戻ります。
    cd .. /.. # Now, you are at the /opt/tmp/matrix_mult directory
    					
  4. コマンドを実行してコンパイルします。
    make
    # Output the environment configuration
    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