Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践的!FPGA開発 / FPGA_seminar_12_fixstars_corporati...
Search
株式会社フィックスターズ
January 17, 2023
Technology
0
450
実践的!FPGA開発 / FPGA_seminar_12_fixstars_corporation_20220727
2022年7月27日に開催した、「実践的!FPGA開発セミナーvol.12」の当日資料です。
株式会社フィックスターズ
January 17, 2023
Tweet
Share
More Decks by 株式会社フィックスターズ
See All by 株式会社フィックスターズ
コンピュータービジョンセミナー5 / 3次元復元アルゴリズム Multi-View Stereo の CUDA高速化
fixstars
0
220
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
860
実践的!FPGA開発セミナーvol.21 / FPGA_seminar_21_fixstars_corporation_20230426
fixstars
0
1.2k
量子コンピュータ時代のプログラミングセミナー / 20230413_Amplify_seminar_shift_optimization
fixstars
0
790
実践的!FPGA開発セミナーvol.18 / FPGA_seminar_18_fixstars_corporation_20230125
fixstars
0
660
実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222
fixstars
0
580
実践的!FPGA開発セミナーvol.20 / FPGA_seminar_20_fixstars_corporation_20230329
fixstars
0
640
量子コンピュータ時代のプログラミングセミナー / 20230316_Amplify_seminar _route_planning_optimization
fixstars
0
720
量子コンピュータ時代のプログラミングセミナー / 20230216_Amplify_seminar _production_planning_optimization
fixstars
0
540
Other Decks in Technology
See All in Technology
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
110
UI State設計とテスト方針
rmakiyama
2
620
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
840
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
32k
C++26 エラー性動作
faithandbrave
2
760
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
260
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
5
170
普通のエンジニアがLaravelコアチームメンバーになるまで
avosalmon
0
110
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
270
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
130
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
222
9k
Site-Speed That Sticks
csswizardry
2
190
The Pragmatic Product Professional
lauravandoore
32
6.3k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Being A Developer After 40
akosma
87
590k
How GitHub (no longer) Works
holman
311
140k
KATA
mclloyd
29
14k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Building Applications with DynamoDB
mza
91
6.1k
Scaling GitHub
holman
458
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Transcript
Copyright© Fixstars Group 実践的!FPGA開発セミナー vol.12 2022/07/27 18:00~
Copyright© Fixstars Group Ubuntu on Zynq UltraScale+ MPSoC で組込みシステム開発 応用編
Copyright© Fixstars Group Who I am 写真 Masayoshi MATSUMURA 松村
将嘉 ソリューション第一事業部 シニアエンジニア
Copyright© Fixstars Group Zynq UltraScale+ MPSoC 評価ボード用 公式Ubuntuイメージ • イメージ配布/ドキュメント
URL ◦ https://ubuntu.com/download/xilinx ◦ https://xilinx- wiki.atlassian.net/wiki/spaces/A/pages/1413611532/Canonic al+Ubuntu • Canonical と Xilinx の提携によるリリース • 下記の評価ボード向けに提供 ◦ZCU102, ZCU104, ZCU106 ◦Kria KV260 • PL Bitstream はボード毎にサンプルデザインが組み込まれている ◦ 例) ZCU102の場合: Vitis-AI ◦ 後述の “xlnx-config” ツールで自作のものに変更可 • FPGA開発向けサポート ◦ドライバ組み込み済み (XRT/zocl 2020.2) ◦カスタムプラットフォームの デプロイ補助ツール (xlnx-config) • 使い方 ◦1. イメージをダウンロード ◦2. ddコマンド等でSDカードに書き込み ◦3. SDカードを評価ボードにセットして電源ON ⇒ これだけでUbuntuが起動します! 4
Copyright© Fixstars Group Ubuntuを利用するメリット • リッチなパッケージ群 ◦ もちろん apt や
snap が利用可能 ◦ SW開発/デバッグ用ツール : gcc/g++, make, cmake, gdb, valgrind …etc ◦ 様々なライブラリ ▪ 自身でビルドが必要なSWの場合も、aptで入手できるツール/ライブラリを使ってビルドできるケースが多い ◦ emacsも使える ▪ ただしc-mode/c++-modeはかなり重い.. font-lock-modeを切ればなんとか使える • デスクトップ環境 ◦ デフォルトでは GNOME3 ▪ その他はaptで導入可能 ◦ USBキーボード/マウス + ディスプレイ出力(ZCU102の場合:DisplayPort) or VNC経由での操作 • 長期的なサポート ◦ 本イメージは 20.04 LTS なので 2030年 まで ◦ セキュリティが重要な本番運用にも適用可能 ⇒ より柔軟で効率的なHW/SW協調の組み込みシステム開発が可能 5
Copyright© Fixstars Group xlnx-config ツールについて • 自作のプラットフォームを簡単にデプロイするための補助ツール • 下記ファイルを所定のディレクトリにまとめて配置おくと、 自動的にBoot用ファイル
(Boot.bin) を生成してくれる ◦ ARM Trusted Firmware ◦ First Stage BootLoader ◦ Platform Management Unit Firmware ◦ PL Bitstream ⇒ 自身で作成したFPGAデザイン(Vitisアプリケーションを含む)も組み込み可能 ◦ Device Tree ⇒ Linux Kernelに伝えるデバイス情報を記述したファイル (今日は少し触ります) • 本ツールについては下記参照 ◦ Xilinx-Wiki : https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2057043969/Snaps+-+xlnx- config+Snap+for+Certified+Ubuntu+on+Xilinx+Devices ◦ セミナー Vol.9 資料 : https://fixstars.connpass.com/presentation/ で公開予定 詳しくは セミナー Vol.9 で紹介しました 変更する必要はあまり無い (予め用意されているものをそのままコピーしておけば良い) 6
Copyright© Fixstars Group Zynq Ultrascale+ MPSoC のシステム構成 ※ 本図は “EG”
シリーズの構成図 (https://japan.xilinx.com/content/dam/xilinx/imgs/products/zynq/zynq-eg- block.PNG) FPGA (PL) ⇒ APU : 多機能処理向けCPU - ARM Cortex-A53 x4Cores - Linux など RPU : リアルタイム処理向けCPU - ARM Cortex-R5 x2Cores - LockStep での使用も可 (2Core協調による冗長化) - FreeRTOS など 7 協調動作させるには?
Copyright© Fixstars Group OpenAMP 8 • 異種のCPU/OS間での協調機能を提供 • Linux側 をMaster,
リアルタイム処理側(FreeRTOS/Baremetal)をRemoteとして扱う • OpenAMPの主要コンポーネント ◦ remoteproc : Master による Remote のLifecycle管理 (LCM) ▪ Remote のファームウェアをロード ▪ Remote CPUの起動/停止 ▪ RPMsg用チャネルの確立 ▪ virtio device の生成 ◦ RPMsg : 共有メモリを介したプロセッサ間通信 (IPC) ▪ 通知用にプロセッサ間割り込み(IPI)を用いる ※ AMP: Asymmetric Multi Processing (https://xilinx- wiki.atlassian.net/wiki/spaces/A/pages/18841718/O penAMP) (A53) (R5)
Copyright© Fixstars Group OpenAMP 9 (https://docs.xilinx.com/v/u/ja-JP/ug1186-zynq-openamp- gsg) OpenAMP は下位層として libmetal
用いている
Copyright© Fixstars Group OpenAMP 10 • Zynq Ultrascale+ MPSoC 向けのサポート情報
◦ User guide (UG1186) や Xilinx-Wiki に導入方法がまとめられている ▪ https://docs.xilinx.com/v/u/ja-JP/ug1186-zynq-openamp-gsg ▪ https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841718/OpenAMP ◦ その他、解説サイトも多数あり ◦ しかし、Linux はあくまでも Petalinux の前提... ⇒ Ubuntuでも動かしてみたい、 というのが今回の話題
Copyright© Fixstars Group 想定環境 • 評価ボード: ZCU102 • 開発環境 •
以降のページに記載するコマンド例は, 特記の無い限り ZCU102上で動作するUbuntu で実行する ものとします FPGA Device Zynq Ultrascale+ MPSoC XCZU9EG-2FFVB1156 PL Resource LUT:600K, RAM:32.1Mbit, DSP:2520, IO:328 PS CPU/GPU ARM Cortex-A53 x 4Core / ARM Cortex-R5 x 2Core / Mali-400 MP2 PS DRAM DDR4 4GB CPU Core i7 6800K OS Ubuntu 20.04 FPGA開発ツール Vitis 2020.2 11
Copyright© Fixstars Group 手順 12 • Ubuntu 側(A53)の設定 ◦ 1.
デバイスツリーの修正 ◦ 2. ブートファイル(Boot.bin)の作成 • RPU(R5)用ファームウェアの作成 ◦ 今回は FreeRTOS / OpenAMP echo test を使用 (Vitis IDEにデフォルトで用意されている) • テストプログラムの実行 ◦ Ubuntu からR5にファームウェアを転送して起動 ◦ Ubuntu で echo test プログラムを実行
Copyright© Fixstars Group Ubuntu側の設定 - 1.デバイスツリーの修正 13 • 今回は、Ubuntuイメージでデフォルトで用いられているものをベースに修正 ◦
記述内容は UG1186 2020.2 の P.34~ のものを参考とした • 1. Device Tree Compiler (dtc) のインストール ※ 参考: デバイスツリーはバイナリ形式とテキスト形式があり、本コンパイラはその相互変換を行うもの。 - バイナリ形式(dtb) : 実際のブート時に用いる。 - テキスト形式(dts) : 開発者が編集する際に用いる。ブート時に使うことはできない (dtbに変換が必要)。 • 2. デフォルトのデバイスツリーをテキスト形式に変換 (次ページへ続く) $ sudo apt install device-tree-compiler $ dtc -I dtb -O dts -o ~/zcu102_system.dts /usr/share/xlnx-firmware/zcu102/zcu102_system.dtb
Copyright© Fixstars Group Ubuntu側の設定 - 1.デバイスツリーの修正 14 • 3. デバイスツリーの編集
◦ 手順2で生成した ~/zcu102_system.dts を編集する (次ページへ続く) reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; rpu0vdev0vring0: rpu0vdev0vring0@3ed40000 { no-map; reg = <0x0 0x3ed40000 0x0 0x4000>; }; rpu0vdev0vring1: rpu0vdev0vring1@3ed44000 { no-map; reg = <0x0 0x3ed44000 0x0 0x4000>; }; rpu0vdev0buffer: rpu0vdev0buffer@3ed48000 { no-map; reg = <0x0 0x3ed48000 0x0 0x100000>; }; rproc_0_reserved: rproc@3ed00000 { no-map; reg = <0x0 0x3ed00000 0x0 0x40000>; }; }; zynqmp-rpu { compatible = "xlnx,zynqmp-r5-remoteproc-1.0"; #address-cells = <2>; #size-cells = <2>; ranges; core_conf = "split"; reg = <0x0 0xFF9A0000 0x0 0x10000>; r5_0: r5@0 { #address-cells = <2>; #size-cells = <2>; ranges; memory-region = <&rproc_0_reserved>, <&rpu0vdev0buffer>, <&rpu0vdev0vring0>, <&rpu0vdev0vring1>; pnode-id = <0x7>; mboxes = <&ipi_mailbox_rpu0 0>, <&ipi_mailbox_rpu0 1>; mbox-names = "tx", "rx"; tcm_0_a: tcm_0@0 { reg = <0x0 0xFFE00000 0x0 0x10000>; pnode-id = <0xf>; }; tcm_0_b: tcm_0@1 { reg = <0x0 0xFFE20000 0x0 0x10000>; pnode-id = <0x10>; }; }; zynqmp_ipi1 { compatible = "xlnx,zynqmp-ipi-mailbox"; //interrupt-parent = <&gic>; interrupt-parent = <0x4>; interrupts = <0 29 4>; xlnx,ipi-id = <7>; #address-cells = <1>; #size-cells = <1>; ranges; /* APU<->RPU0 IPI mailbox controller */ ipi_mailbox_rpu0: mailbox@ff990600 { reg = <0xff990600 0x20>, <0xff990620 0x20>, <0xff9900c0 0x20>, <0xff9900e0 0x20>; reg-names = "local_request_region", "local_response_region", "remote_request_region", "remote_response_region"; #mbox-cells = <1>; xlnx,ipi-id = <1>; }; }; (1) 共有メモリ領域, remoteproc, IPI の設定 : ファイル末尾の “}:” の前に下記を追記
Copyright© Fixstars Group Ubuntu側の設定 - 1.デバイスツリーの修正 15 • 3. デバイスツリーの編集
(続き) (次ページへ続く) (2) UART1 の無効化 - UART1をR5の入出力として使用できるようにするために、Linux側は無効化する - “serial@ff010000” セクションの “status” を “disabled” に変更 serial@ff010000 { u-boot,dm-pre-reloc; compatible = "cdns,uart-r1p12¥0xlnx,xuartps"; status = "disabled"; interrupt-parent = <0x04>; interrupts = <0x00 0x16 0x04>; serial@ff010000 { u-boot,dm-pre-reloc; compatible = "cdns,uart-r1p12¥0xlnx,xuartps"; status = "okay"; interrupt-parent = <0x04>; interrupts = <0x00 0x16 0x04>; 変更前 変更後
Copyright© Fixstars Group Ubuntu側の設定 - 1.デバイスツリーの修正 16 • 4. 編集済みのデバイスツリーをバイナリ形式に変換
$ dtc -I dts -O dtb -o ~/zcu102_system.dtb ~/zcu102_system.dts
Copyright© Fixstars Group Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 17 • xlnx-config
を用いて、編集済みのデバイスツリーを含むBoot.binを作成 • 1. xlnx-configのインストール • 2. Platform Asset Container(PAC) 格納用ディレクトリの作成 • 3. PAC Config の作成 (次ページへ続く) $ sudo snap install xlnx-config --classic --channel=1.x $ sudo mkdir -p /usr/local/share/xlnx-config/pac/hwconfig/ $ sudo mkdir -p /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/zcu102
Copyright© Fixstars Group Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 18 • 4.
必要なファイルの格納 ◦ 今回はPL側のデザインは不問なので、PL Bitstreamはデフォルトのもの(Vitis-AI)を用いる ◦ デバイスツリー(dtb)のみ、先の手順で作成したものを用いる ◦ 下記の内容の2つのファイルを新規作成 $ cd /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/zcu102/ $ sudo cp /usr/share/xlnx-firmware/zcu102/zcu102_zynqmp_fsbl.elf ./fsbl.elf $ sudo cp /usr/share/xlnx-firmware/zcu102/zcu102_pmufw.elf ./pmufw.elf $ sudo cp /usr/share/xlnx-firmware/zcu102/zcu102_system.bit ./system.bit $ sudo cp /usr/share/xlnx-firmware/zcu102/bl31.elf ./bl31.elf $ sudo cp ~/zcu102_system.dtb ./system.dtb the_ROM_image: { [bootloader, destination_cpu=a53-0] fsbl.elf [pmufw_image] pmufw.elf [destination_device=pl] system.bit [destination_cpu=a53-0, exception_level=el-3, trustzone] bl31.elf [destination_cpu=a53-0, load=0x00100000] system.dtb [destination_cpu=a53-0, exception_level=el-2] /usr/lib/u-boot/xilinx_zynqmp_virt/u-boot.elf } ▪ /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/zcu102/bootgen.bif name: openamp_try desscription: An example design for trying OpenAMP revision: 1 assets: zcu102: zcu102 ▪ /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/manifest.yaml (次ページへ続く)
Copyright© Fixstars Group Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 19 • 5.
PAC Config の有効化 (= Boot.binの作成と配置) • 6. Reboot • 7. Reboot後、dmesgで以下のようなログがあればOK $ sudo xlnx-config -a openamp_try $ sudo reboot [ 14.770841] zynqmp_r5_remoteproc ff9a0000.zynqmp-rpu: RPU core_conf: split [ 14.771264] remoteproc remoteproc0: r5@0 is available
Copyright© Fixstars Group RPU(R5)用ファームウェアの作成 20 • Vitis IDE を用いてR5で動作するファームウェアを作成する ◦
本手順は開発環境(x86マシン)で実施 ◦ 今回は FreeRTOS / OpenAMP echo test をビルドする • 1. Platform Projectの作成 ◦ File -> New -> Platform Project ◦ Project名は任意に設定 ◦ Operationg system / Processor は右図のように設定 ▪ XSAファイルが無い場合, 右側の▼ボタンで zcu102 を 選択してPre-builtの定義を用いることができます ◦ 設定が完了したら Finish ボタンをクリック (次ページへ続く)
Copyright© Fixstars Group RPU(R5)用ファームウェアの作成 21 • 2. Platform Projectの設定とビルド ◦
platform.spr > freertos10_xilinx on psu_cortesr5_0 > Board Support Package > Modify BSP Settings をクリック ◦ Overview ページ で “libmetal” と “openamp” をチェック ◦ freertos10_xilinx ページで “stdin” と “stdout” をともに “psu_uart_1” に変更 ◦ OKをクリック ◦ 本Platform Projectをビルド (次ページへ続く)
Copyright© Fixstars Group RPU(R5)用ファームウェアの作成 22 • 3. Application Projectの作成 ◦
File -> New -> Application Project ◦ Platformは、手順1で作成したものを選択 ◦ Project名は任意に設定 ◦ Templates で “OpenAMP echo-test” を選択 ▪ 注: 選択時にエラーが表示される場合は、 前ページのPlatformの設定とビルドが 正しく完了していることを確認 ◦ Finishをクリック (次ページへ続く)
Copyright© Fixstars Group RPU(R5)用ファームウェアの作成 23 • 4. Application プログラムの修正 ◦
Masterからメッセージを受信したことがわかるよう、受信時にログを出力するように修正 ◦ 修正後、Application Projectをビルドする • 5. elfファイルの転送 ◦ elfファイルは通常 “<workspace>/<Project名>/{Debug | Realease}/<Project名>.elf” に生成 ◦ 生成されたelfファイルをZCU102のUbuntu環境に転送する /*-----------------------------------------------------------------------------* * RPMSG endpoint callbacks *-----------------------------------------------------------------------------*/ static int rpmsg_endpoint_cb(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv) { (void)priv; (void)src; LPRINTF("Receive a message, len=%d¥n", len); // ←追加 ... <rpmsg-echo.c>
Copyright© Fixstars Group テストプログラムの実行 24 • ZCU102上のUbuntuからR5へファームウェアを転送し起動する • ZCU102上のUbuntuでテストプログラムを実行し、R5で動作するファームウェアと 通信を行う
• 1. R5へのファームウェア(elfファイル)の転送と起動 ◦ elfファイルは必ず “/lib/firmware/” に格納する必要があります ◦ ここでは、elfファイル名は “r5_freertos_echo_test.elf” とします (次ページへ続く) # elfファイルを /lib/firmwareに格納 $ sudo cp r5_freertos_echo_test.elf /lib/firmware/ # elfファイル名の設定 ※ファイル名部分のみ指定 (“/lib/firmware”は不要) $ sudo sh -c "echo r5_freertos_echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware" # R5のファームウェアを起動 $ sudo sh -c "echo start > /sys/class/remoteproc/remoteproc0/state" # (参考) R5のファームウェアを停止 $ sudo sh -c "echo stop > /sys/class/remoteproc/remoteproc0/state"
Copyright© Fixstars Group R5 Firmware テストプログラムの実行 25 • 2. テストプログラムのビルドと実行
◦ 今回使用するファームに対応するLinux側のテストプログラムは下記にあります ▪ https://github.com/Xilinx/meta-openamp/tree/master/recipes-openamp/rpmsg-examples/rpmsg-echo-test ◦ これをビルドして実行します (次ページへ続く) # ビルド $ make # 実行 $ sudo ./echo_test A53 (Ubuntu) echo_test Rpmsg send Rpmsg recv & verify Rpmsg recv Rpmsg send loop back RPMsg
Copyright© Fixstars Group テストプログラムの実行 26 • 結果 (開発PCにZCU102のUART(USB)を接続して動作確認) UART0 (/dev/ttyUSB0)
A53 (Ubuntu) Error count = 0 ⇒ Verify OK!
Copyright© Fixstars Group テストプログラムの実行 27 • 結果 (開発PCにZCU102のUART(USB)を接続して動作確認) UART1 (/dev/ttyUSB1)
R5 メッセージを受信したことが表示されている (改行がおかしいのは改行コードの不一致..?)
Copyright© Fixstars Group まとめ 28 • Ubuntu でも、OpenAMPを用いた A53 -
R5 間の通信ができることが確認できた • Petalinux向けのようなドキュメントやお膳立てがないため、自力で設定が必要 ◦ デバイスツリーとか. だいたいはPetalinux向けの情報が参考になったが、微妙に異なる箇所はある. • 一方、ドライバは既に組み込まれており、追加でのインストールは不要だった ◦ これが Xilinx公式のUbuntu のメリットと言える
Copyright© Fixstars Group おまけ 29 2022 Q3 (7~9月?) に、Ubuntu 22.04
のイメージがリリースされるようです (https://ubuntu.com/download/amd-xilinx) ZCU111が対象に 追加されている
Copyright© Fixstars Group クラウドサービスを利用した FPGA 開発の高速化 - 合成時間短縮とコストのバランスを 考察する -
Copyright© Fixstars Group Who I am Eisuke MOCHIZUKI 望月 英輔
ソリューション第四事業部 シニアエンジニア
Copyright© Fixstars Group クラウドサービスを開発に利用するモチベーション • 複数の合成を並行して実行することで、開発の高速化が期待できる ◦ IP のパラメータを変更したデザインを複数作成する ◦
Timing Violation 解消のために複数のストラテジを試す • 強力なスペックのマシンを必要に応じて利用可能 ◦ 大きなサイズのFPGA になると要求スペックも大きくなりがち 32 出典: Vivado ML スタンダード - メモリ要件
Copyright© Fixstars Group FPGA 開発に利用可能なクラウドサービス • 様々なクラウドベンダやサービスが存在 ◦ Amazon AWS,
Microsoft Azure, Google Cloud, Alibaba Cloud, etc ... ◦ 各クラウドベンダ内にも様々サービスが存在 ▪ AWS EC2, S3, Lambda, etc … • FPGA 開発に利用可能なのはヴァーチャルマシンを提供するサービス ◦ HW とOS が用意され、ユーザーがOS 上で作業できる仮想環境のこと ▪ OS 上にFPGA 開発環境をインストールして開発を行う ◦ AWS EC2, Azure Virtual Machines, Google Compute Engine, Alibaba Cloud ECS, etc … • 今回のセミナーではAWS EC2 を利用 ◦ クラウドサービスの最大手で情報が豊富 ◦ AMD Xilinx Vivado がプリインストールされた環境を利用できる ▪ $0.552/hr でフルライセンスが利用可能 • https://aws.amazon.com/marketplace/search?searchTerms=Vivado ▪ ただし、いろいろクセがあるので注意 (後述) 33
Copyright© Fixstars Group 今回のセミナーでの検証内容 • AWS EC2 のインスタンスタイプを変更しながらVivado で合成を行い、 合成時間の変化を検証する
◦ インスタンスタイプはPC で言うところのマシンスペックのようなもの ◦ インスタンスタイプ毎にvCPU の種類や数、メモリサイズが異なる ◦ 合成対象のデザインや条件については次ページに記載 • インスタンスタイプと合成時間から、合成時間に影響する要素を検証する • 合成時間からトータルコストを算出し、コストパフォーマンスを検証する 34
Copyright© Fixstars Group Vivado 合成対象デザイン, 条件 • Alveo U250 をターゲットに下記デザインを合成
◦ PCIe x16 からDMA 経由でAlveo U250 上のDDR4 メモリにアクセスするデザイン • Number of jobs は物理コア数(= vCPU 数の半分)に設定 ◦ Number of jobs: Vivado 合成時に投入する最大ジョブ数 ◦ 物理コア数と同じにしておくと速い印象がある 35
Copyright© Fixstars Group Vivado 合成ステップ • 大きく分けて下記3ステップで合成が進む • 1. Submodule
Synthesis ◦ デザイン内の各モジュールの論理合成 ◦ モジュール毎に独立しているため並行して論理合成が可能 • 2. Synthesis ◦ デザイン全体の論理合成 ◦ 数分で完了することが多い • 3. Implementaion ◦ デザイン全体の配置配線 ◦ 最も時間がかかる • 各ステップそれぞれの時間を測定し評価対象とした 36
Copyright© Fixstars Group vCPU, メモリを変化させて比較 37 • vCPU, メモリの差が合成時間やコストにどのような影響を与えるかを調査 •
インスタンスタイプを固定し、サイズを変更する Instance Type Cost/hr Clock [GHz] Boost [GHz] Cores Threads (vCPU) MEM [GB] CPU INFO m5n.2xlarge $0.476 2.50 3.50 4 8 32 Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz m5n.4xlarge $0.952 2.50 3.50 8 16 64 Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz m5n.8xlarge $1.904 2.50 3.50 16 32 128 Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz ↑ m5n. は固定し、サイズを変更 ↑ コア数, スレッド数, メモリサイズが変化する
Copyright© Fixstars Group vCPU, メモリを変化させたときの合成時間 38 • Sub Synth の時間はvCPU
やメモリサイズが増えるほど短くなる傾向にある ◦ 並列処理が可能な処理のためvCPU の数が影響しやすいと考えられる • Implementation の時間はメモリ64GB と128GB で大きな変化なし ◦ 合成に必要なメモリを用意しておけばそれ以上は合成時間に影響なし? ▪ 今回のAlveo U250 はピークで47GB との記載あり
Copyright© Fixstars Group vCPU, メモリを変化させたときのコスト 39 • Total Cost は性能が向上するほどに増えていく
◦ Cost/hr の上昇率よりも合成時間の削減率が低いため • Cost/hr の低いインスタンスタイプがコストパフォーマンスに優れる
Copyright© Fixstars Group インスタンスタイプを変化させて比較 40 • インスタンスタイプの差がどのような影響を与えるかを調査 • vCPU, メモリは極力固定し、インスタンスタイプを変更する
Instance Type Cost/hr Clock [GHz] Boost [GHz] Cores Threads (vCPU) MEM [GB] CPU INFO m5ad.4xlarge $0.824 2.10 2.90 8 16 64 AMD EPYC 7571 m5n.4xlarge $0.952 2.50 3.50 8 16 64 Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz m5zn.3xlarge $0.991 3.80 4.50 6 12 48 Intel(R) Xeon(R) Platinum 8252C CPU @ 3.80GHz ↑ インスタンスタイプを変更すると、 ベース/ブーストクロックが変化する ↑ コア数, スレッド数, メモリサイズは極力そろえる
Copyright© Fixstars Group インスタンスタイプを変化させたときの合成時間 41 • Boost Clock が高くなるほど合成時間が減少する傾向にある ◦
m5zn についてはvCPU の数が他よりも少ないにも関わらず、全体で合成時間が減少 • 合成時間の削減にはBoost Clock が大きく影響する
Copyright© Fixstars Group インスタンスタイプを変化させたときのコスト 42 • 合成時間が短いほどTotal Cost が減少 ◦
Cost/hr が概ね同じなため、合成時間の差がTotal Cost に影響した • Cost/hr が同じであれば、Boost Clock の大きいインスタンスタイプが コストパフォーマンス、合成時間共に優れる
Copyright© Fixstars Group AWS EC2 での調査結果まとめ • 合成時間に影響を与える要素 ◦ CPU
クロック: 合成全体に影響を与え、Boost Clock が高い程時間は短くなる ◦ CPU コア数: Sub Synth に影響を与え、vCPU が多いほど時間は短くなる ◦ メモリサイズ: 合成全体に影響を与えるが、ピーク値以上の場合の影響は軽微 • コストパフォーマンス ◦ Cost/hr の低いインスタンスタイプの方がコストパフォーマンスが高い ◦ Cost/hr が同等であれば、Boost Clock が高いほどコストパフォーマンスが高い • クラウドサービスを利用してFPGA 開発を行う際のおすすめフロー ◦ 1. 対象デバイスを確認し、合成に必要なメモリサイズを確認する ▪ Vivado ML スタンダード - メモリ要件 ◦ 2. メモリ要件を満たすインスタンスタイプを調査し、Cost/hr の低いものをリストアップ ◦ 3. リストアップしたものから最もBoost Clock の高いインスタンスタイプを選択 ◦ 4. インスタンスを起動し合成スタート 43
Copyright© Fixstars Group AWS EC2 利用時の注意点 • Vivado がプリインストールされた環境はUS リージョンでのみ(*)利用可能
◦ 物理的に遠いためネットワークレイテンシが大きく、GUI の操作に若干難あり ◦ デザインの作成は手元のマシンで行い、合成はクラウドで行うという運用を推奨 • Vivado の新ver. がリリースされると旧ver. は削除される傾向にある ◦ 以前は2019.1 が存在したことを確認できているが、今は2021.2, 2022.2 のみ ▪ https://aws.amazon.com/marketplace/search?searchTerms=Vivado • vCPU limit の存在に注意 ◦ 同時に実行できるインスタンスの数がvCPU の数で制限されている ◦ 制限解除にはAWS とのやりとりが必要とのこと 44 * 2022/07/27 現在
Copyright© Fixstars Group ここまでクラウドの話をしてきましたが・・・ • FPGA 開発者がわざわざクラウドで合成することは少ないのではないか? • 強力な合成用マシンを所持していたり、今後導入することを検討している? ◦
もう少しだけディープな話をしたいと思います。 • Fixstars で使用している合成マシンの紹介 ◦ それらのマシンで先程のデザインを合成したらどうなるか? • 合成時のCPU 温度変化 • 合成時のクロック周波数の変化 • 今後導入するならこんなマシン 45
Copyright© Fixstars Group Fixstars で使用している合成マシンの紹介 • Fixstars では下記マシンが主に合成に使用されている ◦ No.
は高価そうな順に付与した • それぞれのマシンで合成を行い、合成時間を確認 ◦ No. 3 は忙しそうだったので競争除外 46 No. Clock [GHz] Boost [GHz] Cores Threads L3 Cache [MB] MEM [GB] MEM Type CPU INFO 1 3.80 4.50 24 48 128 256 DDR4-2666 AMD Ryzen Threadripper 3960X 24-Core Processor 2 3.00 4.80 18 36 24.75 128 DDR4-3200 Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz 3 3.70 4.70 10 20 19.25 128 DDR4-2133 Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz 4 3.60 5.00 8 16 16 64 DDR4-2400 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz 5 3.60 4.20 4 8 8 64 DDR4-2400 Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
Copyright© Fixstars Group Fixstars 合成マシンでの合成時間 47 • 比較的安価なNo.4 が最も合成時間が短い ◦
Boost Clock が5.0GHz と高いことが影響? • 比較的高価なNo.2 が最も合成時間が長い ◦ Boost Clock も4.8GHz と決して低くないにも関わらず、なぜだろうか?
Copyright© Fixstars Group 合成時のCPU 温度変化 • 先程のNo.2 でサーマルスロットリングが発生しているのでは?と考え、 合成中のCPU 温度を取得
• ピークが70℃以下で特に問題なさそうだったが、下記知見を得た ◦ CPU 温度はSub Synth 中に最も高くなる ◦ 水冷ではなく空冷でも十分冷える 48 Implementation Sub Synth
Copyright© Fixstars Group 合成時のクロック周波数の変化 • 先程のNo.2 の合成中のクロック周波数を取得 • ピークのクロックが4.6GHz 程度であることを確認し、下記知見を得た
◦ 各コアのクロックは上がったり下がったりを繰り返している ◦ Sub Synth 中はクロックが一段下がる 49 Implementation Sub Synth
Copyright© Fixstars Group • 最も合成時間の短かったNo.4 についてもクロック周波数を取得 • ピークのクロックが5.0GHz に達することを確認し、下記知見を得た ◦
各コアのクロックは一貫して高いクロックを保っている ◦ やはりSub Synth 中はクロックが一段下がる Sub Synth 合成時のクロック周波数の変化 50 Implementation
Copyright© Fixstars Group • No.4 の合成時間が比較的長い理由は、クロック周波数の頻繁な変化に原因 があるのかもしれない • BIOS の設定等で改善する可能性があるので、継続調査する
◦ クロック周波数がベースクロックの3.0GHz を遥かに下回る1.2GHz 程度まで落ち込んでいる ので、おそらく省電力系の設定が影響していると考えられる 合成時のクロック周波数の変化 51
Copyright© Fixstars Group 今後導入するならこんなマシン • ここまでの調査結果を踏まえ、FPGA 合成マシンとして導入するなら・・・ • CPU: Boost
Clock が大きいもの ◦ 5.5 GHz: Intel Core i9-12900KS ◦ 5.3 GHz: Intel Core i9-11900KF ◦ 5.2 GHz: Intel Core i9-12900KF ◦ 5.0 GHz: Intel Core i9-9900K <- Fixstars での合成最速マシン ◦ 4.9 GHz: AMD Ryzen 9 5950X • メモリ: 合成対象のチップのピーク値 x 同時に合成を走らせるデザイン数 ◦ Alveo U250 x 2デザイン -> 47 GB x 2 = 94 GB 以上 • その他: 予算に合わせて適切に 52
Copyright© Fixstars Group Thank you! お問い合わせ窓口 :
[email protected]