2.1K Views
January 26, 24
スライド概要
フィックスターズならではの「FPGA」に関する高速化手法、 効率的な開発ノウハウ、苦労話などについてお話しいたします。
<講演内容>
1、Open FPGA Stack を試す
Open FPGA Stack(OFS)は、FPGAアクセラレーションの実行基盤を構築するためのオープンソースのフレームワークで、Intel®️ oneAPI などに使用できます。
Intel®️社から Intel®️ FPGAボード向けのハードウェアおよびソフトウェアのリファレンスが提供されており、
ユーザーはこれを活用して、アクセラレーション環境を使用するだけでなく、ボードに合わせた拡張やカスタマイズが可能です。
本セミナーでは、OFS の構成および使用方法の解説と、具体的な実践として手元の Agilex ボードで OFS を稼働させることに挑戦しましたので紹介します。
FPGAアクセラレーション基盤はさまざまな技術要素が組み合わさって実現されており、その裏側と、実際の使用体験の知見を共有します。
・当社技術ブログ 記事: https://proc-cpuinfo.fixstars.com/
・フィックスターズグループ/セミナー一覧: https://www.fixstars.com/ja/seminar
・フィックスターズのFPGAシステム開発: https://www.fixstars.com/ja/services/fpga
フィックスターズは、コンピュータの性能を最大限に引き出すソフトウェア開発のスペシャリストです。車載、産業機器、金融、医療など、幅広い分野での開発経験があります。また、ディープラーニングや機械学習などの最先端技術にも力を入れています。 並列化や最適化技術を駆使して、マルチコアCPU、GPU、FPGA、量子アニーリングマシンなど、さまざまなハードウェアでソフトウェアを高速化するサービスを提供しています。さらに、長年の経験から培ったハードウェアの知識と最適化ノウハウを活かし、高精度で高性能なアルゴリズムの開発も行っています。 ・開催セミナー一覧:https://www.fixstars.com/ja/seminar ・技術ブログ :https://proc-cpuinfo.fixstars.com/
実践的!FPGA開発セミナー vol.28 2023/11/22 18:00~ Copyright© Fixstars Group 1
Open FPGA Stack を試す Copyright© Fixstars Group 2
Who I am Ryuji NISHIDA 写真 西田 竜之 ソリューション第四事業部 リードエンジニア Copyright© Fixstars Group 3
自己紹介 ● 西田竜之 ○ ○ ○ FPGAを用いたシステム開発に従事 ハードウェア開発をメインに担当 略歴 ■ 半導体ベンダ ● サーバー向けASIC開発 ■ 映像事務機メーカー ● 高画質エンジンLSI 映像機器向けFPGA開発 ■ フィックスターズ ● FPGAを用いた高速取引金融システム ● OpenCLによるアプリの高速化 Copyright© Fixstars Group 4
アジェンダ ● 全体概要 ○ 背景 Open FPGA Stack (OFS) とは? ○ 構築フロー ● 各コンポーネント詳細 ○ 実行環境 ○ ソフトウェア(ドライバ、管理ツール) ○ FPGA ハードウェアFPGA ハードウェア (FIM, AFU) ○ oneAPI ユーザーアプリケーション ● まとめ Copyright© Fixstars Group 5
全体概要:背景 ● FPGA アクセラレーション ○ FPGA ボード上で、特定処理をオフロードして高速化する ■ ○ ユーザーアプリケーションは、抽象的なレイヤで実装することが望ましい ● OpenCL, Intel® oneAPI, etc. 実現に必要な各種技術 ■ ハードウェア ● PCIe I/F + DRAM + ネットワーク I/F デザイン ● パーシャルリコンフィグ(PCIe I/F 経由) ■ ソフトウェア ● ● ドライバ、制御&管理ソフトウェア host と効率的な連携 実行基盤(インフラストラクチャ)の構築が必要 Copyright© Fixstars Group 6
全体概要:Open FPGA Stack (OFS) とは? ● Open FPGA Stack (OFS) ○ https://ofs.github.io/ FPGAアクセラレーション実行基盤構築のためのオープンソースのフレームワーク ■ 変遷 Intel®Acceleration Stack ○ ... Intel® PAC ボード用 ⇒ Intel® Open FPGA Stack ... 他社製ボードに適用可能 ⇒ Open FPGA Stack ...オープンソース化 ドライバ、ライブラリ、リファレンスのハードウェア デザイン一式を含む ■ Github 上に公開されている https://github.com/ofs 参照URL: https://www.intel.co.jp/content/www/jp/ja/products/details/fpga/platforms/open-fpga-stack.html Copyright© Fixstars Group 7
全体概要:構築フロー ● 構成要素&リポジトリ Software OPAE SDK https://github.com/OFS/opae-sdk/ Open Programmable Acceleration Engine SDK 管理ツールなど Software Kernel Drivers https://github.com/OFS/linux-dfl/ OFS 固有のカーネルドライバ Software oneAPI ASP https://github.com/OFS/oneapi-asp oneAPI 実行のためのサポートパッケージ Hardware FIM (Agilex) https://github.com/OFS/ofs-agx7-pcie-attach FPGA Interface Manager ソースコード ボードに対応するハードウェアデザイン Hardware PIM https://github.com/OFS/ofs-platform-afu-bbb Platform Interface Manager ソースコード FIM と AFU 間の標準インターフェースを構築する Hardware AFU https://github.com/OFS/examples-afu Accelerator Functional Unit サンプルコード Software simulation https://github.com/OFS/opae-sim AFU ハード・ソフト協調シミュレーション環境 Copyright© Fixstars Group 8
全体概要:構築フロー ● ● 構築フロー ○ OFS 全体 ブロック図 Getting Started Guide を参照 https://ofs.github.io/ofs-2023.2/hw/n6001/u ser_guides/ug_qs_ofs_n6001/ug_qs_ofs_n600 1/ OFS DFL Kernel Driver ビルド&インストール OPAE SDK ビルド&インストール FIM 構築 AFU 構築 oneAPI 実行 参照URL: https://ofs.github.io/ofs-2023.2/ Copyright© Fixstars Group 9
各コンポーネント詳細:使用環境 ● 各コンポーネント詳細 ○ ● 以降、実施した試行内容、試行内容&結果を通じて、詳細について説明する OFS 試行環境 ○ ハードウェア ■ ターゲットボード : インテル® Agilex™ Fシリーズ FPGA 開発キット AGFB014R24B2E2V ■ 合成ツール: Quartus® Prime Pro ver 23.2 ○ ホストマシン ■ OS :RHEL 8.6 ○ OFS ■ ※ドキュメント上のテスト済み環境 参照URL: https://www.intel.com/content/www/us/en/products/details /fpga/development-kits/agilex/f-series.html バージョン :ofs-2023.2 各リポジトリの branch を 本バージョンで指定されているものに合わせて使用した Copyright© Fixstars Group 10
各コンポーネント詳細:ソフトウェア(ドライバ) ● OFS DFL Kernel Driver ○ linux-dfl (Device Feature List) https://github.com/OFS/linux-dfl/ ■ カーネルドライバであり、カーネル全体のビルドが必要 ■ 「 karnel.org にアップストリームされたカーネルコード」 ■ FPGA Device Feature List (DFL) Framework Overview 抜粋 https://docs.kernel.org/fpga/dfl.html ● 低レイヤハードウェアを隠蔽し、ユーザー空間に統一された インターフェイスを提供する。 ● アプリケーションは、デバイス メモリに、プラットフォーム 上の FPGA アクセラレータを構成、列挙、オープン、アクセス することができる。 ● FPGA の再構成などのシステム レベルの管理機能が可能になる。 Copyright© Fixstars Group 参照URL: https://docs.kernel.org/fpga/dfl.html 11
各コンポーネント詳細:ソフトウェア(ドライバ)
●
OFS DFL Kernel Driver
○
ビルド実行
■
Getting Started Guideに従って実行
■
ビルド時間 1~2 hour
■
Linux カーネル更新
4.18.x
○
⇒
6.1.41-dfl となる
追加で行った対応
■
追加インストールしたパッケージ
flex, bison, openssl-devel, elfutils-libelf-devel
■
再起動時、BIOS 上で Secure Boot OFF が必要
[git clone & checkout]
$ git clone https://github.com/OFS/linux-dfl
$ cd linux-dfl
$ git checkout tags/ofs-2023.2-6.1-1
[.config 生成]
$ cp /boot/config-`uname -r` .config
$ cat configs/dfl-config >> .config
$ echo 'CONFIG_LOCALVERSION="-dfl"' >> .config
$ echo 'CONFIG_LOCALVERSION_AUTO=y' >> .config
$ sed -i -r
's/CONFIG_SYSTEM_TRUSTED_KEYS=.*/CONFIG_SYSTEM_TRUST
ED_KEYS=""/' .config
$ sed -i '/^CONFIG_DEBUG_INFO_BTF/ s/./#&/' .config
$ echo 'CONFIG_DEBUG_ATOMIC_SLEEP=y' >> .config
$ export LOCALVERSION=
$ make olddefconfig
[build 実行 1~2hour]
$ make -j $(nproc)
[package]
$ make INSTALL_MOD_STRIP=1 binrpm-pkg
[kernel update]
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo dnf localinstall kernel*.rpm
Copyright© Fixstars Group
12
各コンポーネント詳細:ソフトウェア(管理ツール) ● [git clone & checkout] $ git clone https://github.com/OFS/opae-sdk $ cd opae-sdk $ git checkout tags/2.8.0-1 OPAE SDK ○ ビルド実行 ■ ○ Getting Started Guideに従って実行 インストールされる管理ツール群 ■ FPGA コンフィグレーションツール、テストツール など ■ 詳細は以下を参照 https://ofs.github.io/ofs-2023.2/sw/fpga_api/quick_start/readme/ ○ 温度、電圧センサ値取得について ■ fpgainfo コマンドで取得可能 ただし、BMC (ボード上の MAX10) が必要 ■ ファームウェアが対応していない場合は、情報取得できない BMC の情報はオープンになっていないため、 ファームウェアの入手は Intel 社のテクニカルサポートに連絡 する必要がある [コンテナ起動、パッケージインストール ] $ cd .. $ podman pull registry.access.redhat.com/ubi8:8.6 $ podman run -ti -v "$PWD":/src:Z -w /src $ dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-l atest-8.noarch.rpm $ dnf install --enablerepo=codeready-builder-for-rhel-8-x86_64-rpm s -y python3 python3-pip python3-devel python3-jsonschema python3-pyyaml git gcc gcc-c++ make cmake libuuid-devel json-c-devel hwloc-devel tbb-$ devel cli11-devel spdlog-devel libedit-devel systemd-devel doxygen python3-sphinx pandoc rpm-build rpmdevtools python3-virtualenv yaml-cpp-devel libudev-devel libcap-devel $ pip3 install --upgrade --prefix=/usr pip setuptools pybind11 [build実行 ~10min] $ ./opae-sdk/packaging/opae/rpm/create unrestricted $ exit [package install] $ cd opae-sdk/packaging/opae/rpm $ sudo dnf localinstall -y opae*.rpm Copyright© Fixstars Group 13
各コンポーネント詳細:ハードウェア(FIM) ● Agilex® PCIe Attach OFS ○ ● N6001-PL (P-Tile/E-Tile) FIM 提供されているリファレンスデザイン ■ N6001-PL (P-Tile/E-Tile) ■ F-Series Development Kit (2x F-Tile) ⇒ 手元の Agilex® ボード用と Tile 構成、 デバイス構成が近い N6001-PL をベースに 移植を実施した ○ 参考情報 ■ FPGA Interface Manager Developer Guide for Open FPGA Stack: Intel® FPGA SmartNIC N6001-PL PCIe Attach https://ofs.github.io/ofs-2023.2/hw/n6001/dev_ guides/fim_dev/ug_dev_fim_ofs_n6001/ Copyright© Fixstars Group 参照URL: https://ofs.github.io/ofs-2023.2/hw/ftile_devkit/u ser_guides/ug_qs_ofs_ftile/ug_qs_ofs_ftile/#20-of s-stack-architecture-overview-for-reference-platfo rm 14
各コンポーネント詳細:ハードウェア(FIM) ● FIM 構築 ○ 参考情報: FIM Customization https://ofs.github.io/ofs-2023.2/hw/n6001/dev_guides/fim_dev/ug_dev_fim_ofs_n6001/#4-fim-customization ■ コンポーネント追加、設定変更方法の記載がある ○ 準備 ○ FIM 構成 [git clone & checkout] $ git clone --recurse-submodules https://github.com/OFS/ofs-agx7-pcie-attach.git $ cd ofs-agx7-pcie-attach $ git checkout --recurse-submodules tags/ofs-2023.2-1 ■ top モジュールは共通 ■ ボードごとのパラメータを .ofss ファイル、.qsf ファイル内で指定することで、設定変更を行う Copyright© Fixstars Group 15
各コンポーネント詳細:ハードウェア(FIM) ● FIM 構築 ○ submodule 構成 ■ IP はカスタマイズ可能な submodule を 組み合わせて構成されている ● hssi, mem, pcie, pmci, qsfp ■ submodule の設定変更は、変更設定を preset として保存し、使用する preset を .ofss ファイル内で指定する ■ ボード内のインターフェースの数、 インターフェース毎の設定をまとめて 実行可能 ■ 通常の IP 設定より簡略されている Copyright© Fixstars Group → ボードに合わせて 3 に変更 → ボードに合わせて 33.333 MHz に変更 16
各コンポーネント詳細:ハードウェア(FIM) ● FIM ビルド実行 ○ ピン配変更、.qsf 設定は、以下のファイルを編集する syn/board/<board name>/syn_top/ofs_top.qsf syn/board/<board name>/setup/*_loc.tcl ○ 合成実行はスクリプトをキックして実行可能 [build 実行 ※ワークアラウンド含む ] $ ./ofs-common/scripts/common/syn/build_top.sh --stage setup --ofss tools/ofss_config/<board name>.ofss <board name> work_<board name> $ ln -s afu_with_pim/afu/build/platform work_<board name>/syn/board/<board name>/syn_top $ ./ofs-common/scripts/common/syn/build_top.sh --stage compile --ofss tools/ofss_config/<board name>.ofss <board name> work_<board name> ○ 今回の構成では、DDR4 リファレンスクロック(33.33MHz)が対応できない エラーが発生し、構成できなかった ■ submodule 以下の個別 IP 設定の変更方法を探ったが、時間切れ… Copyright© Fixstars Group 17
各コンポーネント詳細:ハードウェア(FIM) ● FIM カスタマイズについて ○ ある程度、簡易的にカスタマイズできる仕掛けは準備されている (QSFP 100G x1 → QSFP 25G x8 など) ○ リファレンスデザインにマッチする構成であれば、ユーザー側で変更が容易 ○ まだ自由度の高い変更には、対応できていない様子 ⇒ 現状では、FIM カスタマイズを行うには、Intel 社のサポートが必須と思われる Copyright© Fixstars Group 18
各コンポーネント詳細:ハードウェア(AFU) ● AFU (Accelerator Functional Unit) ○ ボードの差異は、FIM 側で吸収されているため、AFU ブロックは共通で使用可能 ○ AFU ブロックの I/F は、CCI-P (Core Cache Interface) I/F プロセッサ内のキャッシュを有効に使える 参照URL: https://www.intel.com/content/www/us/en/docs/p rogrammable/683193/current/cci-p-interface.html Copyright© Fixstars Group 参照URL: https://www.intel.com/content/www/us/en/docs/p rogrammable/683193/current/memory-and-cache-hi erarchy.html 19
各コンポーネント詳細:ハードウェア(AFU) ● AFU サンプル実行方法 ○ 参照情報 AFU Development Guide: OFS for Intel® Agilex® 7 PCIe Attach FPGAs https://ofs.github.io/ofs-2023.2/hw/common/user_guides/afu_dev/ug_dev_afu_ofs_agx7_pcie_attach/ug_d ev_afu_ofs_agx7_pcie_attach/ [AFU ビルド] $ git clone https://github.com/OFS/examples-afu.git $ cd examples-afu/tutorial/afu_types/01_pim_ifc/hello_world $ afu_synth_setup --source hw/rtl/axi/sources.txt build $ cd build $ afu_synth [Partial Reconfig 実行] $ cd examples-afu/tutorial/afu_types/01_pim_ifc/hello_world/build $ sudo fpgasupdate hello_world.gbs <PCIe b:d.f> [アプリケーション実行 ] $ cd examples-afu/tutorial/afu_types/01_pim_ifc/hello_world/sw $ make $ ./hello_world Copyright© Fixstars Group 20
各コンポーネント詳細:oneAPI ユーザーアプリケーション ● oneAPI 実行 ○ 参考情報 oneAPI Accelerator Support Package (ASP): Getting Started User Guide https://ofs.github.io/ofs-2023.2/hw/common/user_guides/oneapi_asp/ug_oneapi_asp/ 参照URL: https://ofs.github.io/ofs-2023.2/hw/common/user_ guides/oneapi_asp/ug_oneapi_asp/#13-introduction -to-high-level-design-on-ofs Copyright© Fixstars Group 21
まとめ ● Open FPGA Stack の概要、構成について紹介した ● 環境構築を行い、ビルド手順の確認をした ● リファレンスデザインをベースに Agilex® ボードへのポーティングの チャレンジをしたが、 結果、まだユーザー側で容易に構成変更できない点があることが分かった ● 引き続き Open FPGA Stack の試行を行い、 oneAPI フレームワークの実行確認を目指す Copyright© Fixstars Group 22
Thank you! お問い合わせ窓口 : [email protected] Copyright © Fixstars Group 23