Diary/2019-5-3
Axonerve/AWS-F1
AWS-F1ふたたびを参考に.
- S3バケットの用意
- S3バケットを作成.名前はaws-f1-axonerve-kvs
- フォルダを作成.名前はaxonerve-kvs-20190503
- F1インスタンスの用意
- c4.4xlargeで作成.$0.796/時間
- ストレージはルートを100GB程度あると安心.二つ目のストレージは不要.
- キーペアは既存のキーペアを選択(以前つくったaws-f1-test-key)
- F1インスタンス起動後の設定
- aws configure を 忘れない
- /home/centos の下で git clone https://github.com/aws/aws-fpga.git $AWS_FPGA_REPO_DIR をする
- /home/centos の下で git clone https://github.com/miyo/axonerve_util.git を する
- AXONERVE_all.vpをアップロードする
- scp -i pemファイル AXONERVE_all.vp centos@AWSインスタンスのIP
- 作業ディレクトリに移動して環境設定
- cd $AWS_FPGA_REPO_DIR
- source sdaccel_setup.sh
- SDxプロジェクトを作成
- cd ~/
- sdx -workspace build
- "Create a Xilinx(R) SDx(TM) Application projectをクリック
- プロジェクト名を axonerve_kvs としてプロジェクト作成
- Platformは,aws-vu9p-f1...を選択
- 候補がでないときは,Platformで Add Custom Platform... から,/home/centos/src/project_data/aws-fpga/SDAccel/aws_platform を追加
- Empty Applicationを選択
- RTLカーネルの用意
- Kernel Wizardで雛形を作成
- メニューのXilinxからRTL Kernel Wizardを選択
- General Settings
- kernel name を axonerve_kvs_rtl,kernel vendor を wasalabo と設定してNext.
- クロック数を2,Has Resetを1に設定
- Scalars
- 数は1のまま.Argument nameをdata_numに変更して,Next.
- Global Memory
- そのままNext
- ファイルの置換と追加
- 取り除く: axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc
- 追加(1): /home/centos/axonerve_util/kvs/sdaccel/src/hdl の 下の axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,user_logic.sv
- 追加(2): /home/centos/axonerve_util/kvs/hdl/sources の 下の axonerve_kvs_kernel.sv
- 追加(3): /home/centos/axonerve_util/kvs/sdaccel/src/xilinx-ip/aws-f1-vu9p の 下の xciファイル.これはプロジェクトにコピー
- 追加(4): アップロードした Axonerve_all.vp
- 追加(5): /home/centos/axonerve_util/kvs/sdaccel/src/xdc/vu9p の 下の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc
- SourecesペインのLibrariesタブに切り替えると作業しやすい
- - Design Sources → SystemVerilog → xil_defaultlib の axonerve_kvs_rtl_example.sv と axonerve_kvs_rtl_example_vadd.sv を取り除く
- - Design Sourcesで右クリックして,コンテクステメニューからAdd Sourcesを選択."Add or create design sources"を選択してNext
- - /home/centos/axonerve_util/kvs/sdaccel/src/hdl の 下の axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,user_logic.sv を 追加
- - /home/centos/axonerve_util/kvs/hdl/sources の 下の axonerve_kvs_kernel.sv を 追加
- - /home/centos/axonerve_util/kvs/sdaccel/src/xilinx-ip/aws-f1-vu9p の 下の xciファイルを追加(これはプロジェクトにコピーする - Copy sources into projectへのチェックを忘れない)
- - アップロードした Axonerve_all.vp を 追加
- - Constraints → constrs_1 の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc を 取り除く
- - "Add or create constraints"を選択してNext
- - /home/centos/axonerve_util/kvs/sdaccel/src/xdc/vu9p の 下の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc を 追加
- Generate RTL Kernelを実行
- source-only kernel を 選択
- SDxでシステム全体のビルド
- ファイルの削除と追加
- host_example.cppを削除.axonerve_kvs.cpp,axonerve_kvs.hpp,host.cpp,xcl2.cpp,xcl2.hppを追加
- Project Explorer の src → sdx_rtl_kernel → axonerve_kvs_rtl の 下の host_example.cpp (2018.2以前のバージョンなら main.c だった) は 削除
- Project Explorer の トップ の axonerve_kvsで右クリック.コンテクストメニューからImport Sources...を選択
- Browse...で/home/centos/axonerve_util/kvs/sdaccel/src を 選択
- axonerve_kvs.cpp,axonerve_kvs.hpp,host.cpp,xcl2.cpp,xcl2.hppを選択してFinish
- host_example.cppを削除.axonerve_kvs.cpp,axonerve_kvs.hpp,host.cpp,xcl2.cpp,xcl2.hppを追加
- ターゲットをSystemに変更
- 右ペイン,右上のActive build configurationでSystemを選択
- コンパイルオプションに--kernel_frequncy "0:60|1:120"を追加.
- Project Explorer の トップ の axonerve_kvsで右クリック.コンテクストメニューから,C/C++ Build Settingsを選択.
- 左ペインのSettingsをクリック
- Configuration タブ を System にセット(この手順ならセットされているはず)
- Tool Settingsタブを開く
- SDx XOCC Kernel Compiler → Miscellaneos で --kernel_frequency "0:60|1:120" を追加
- SDx XOCC Kernel Linker → Miscellaneos で --kernel_frequency "0:60|1:120" を追加
- Apply and Closeで閉じる
- Hardware Functions(ハードウェア側の関数)としてaxonerve_kvs_rtlを設定
- 右ペインの Hardware Functions の右にある Add Hardware Function...ボタン(稲妻みたいなアイコン)をクリック
- axonerve_kvs_rtlを選択してOK
- メニューの Project → Build Project で ビルド
- ツールバーのハンマーみたいなアイコンをクリックしてもいい
- AFIイメージを作る
- cd /home/centos/build/axonerve_kvs/System で移動して binary_container_1.xclbin があるのを確認
- binary_container_1 フォルダが邪魔になるので mv binary_container_1 binary_container_1.o で リネーム
- AFIイメージ作る↓で binary_container_1.awsxclbin が できる
$SDACCEL_DIR/tools/create_sdaccel_afi.sh \ -xclbin=<xclbin file name>.xclbin \ -s3_bucket=<bucket-name> \ -s3_dcp_key=<dcp-folder-name> \ -s3_logs_key=<logs-folder-name>
- 今回の例だと
$SDACCEL_DIR/tools/create_sdaccel_afi.sh \ -xclbin=binary_container_1.xclbin \ -s3_bucket=aws-f1-axonerve-kvs \ -s3_dcp_key=axonerve-kvs-20190503 \ -s3_logs_key=axonerve-kvs-20190503
- *_afi_id.txtを開いてFpgaImageIdを確認
- AFIイメージの作成をまつ(↓コマンドを実行してStateがavailableになるのを待つ)
aws ec2 describe-fpga-images --fpga-image-ids 確認したFpgaImageId
- axonerve_kvs.exeとbinary_container_1.awsxclbinを手元にコピーする
- オプション: ビルドディレクトリ (/home/centos/build 以下) をダウンロード
- たとえば,↓とか
ssh -i pemファイル centos@リモートIP tar zcpvf - build | tar zxpvf -
- AWS-F1で実行
- AWS-F1インスタンスを作成
- AMIでFPGAを検索.今度はf1.2xlargeで作成.
- 起動したら aws configure を 実行
- /home/centos の下で git clone https://github.com/aws/aws-fpga.git $AWS_FPGA_REPO_DIR
- cd $AWS_FPGA_REPO_DIR; source sdaccel_setup.sh
- axonerve_kvs.exeとbinary_container_1.awsxclbinをアップロードする
- 実行する
- sudo -s
- source $AWS_FPGA_REPO_DIR/sdaccel_runtime_setup.sh
- ./axonerve_kvs.exe binary_container_1.awsxclbin