実践的!FPGA開発セミナー vol.12(2022/07/27)

3.8K Views

July 27, 22

スライド概要

フィックスターズならではの「FPGA」に関する高速化手法、 効率的な開発ノウハウ、苦労話などについてお話しいたします。

<講演内容>

1、Ubuntu on Zynq UltraScale+ MPSoC で組込みシステム開発 応用編
実践的!FPGA開発セミナー vol.9で発表した「Ubuntu on Zynq UltraScale+ MPSoC + Vitis で組込みシステム開発」に引き続き、Zynq UltraScale+ MPSoC 評価ボード用の公式 Ubuntu イメージを用いた組み込みシステム開発についての
ノウハウを紹介します。
公式 Ubuntu イメージを用いることで、柔軟な組込みシステム開発を容易に行うことができます。
今回は、Ubuntu の動作する "APU(A53)" と、リアルタイム処理向けの "RPU(R5)" を連携させる方法について紹介する予定です。
これは "libmetal" と "OpenAMP" で実現でき、PetaLinux 向けにはドキュメントや SW パッケージが提供されています。
しかしながら、Ubuntu 向けの情報は無さそうでしたので、今回調査と検証を行いました。

2、クラウドサービスを利用したFPGA 開発の高速化 - 合成時間短縮とコストのバランスを考察する
FPGA の合成時間は開発のTAT に影響を与えます。
特にリソースを大量に持つデバイスを使用する際にはその影響が大きく現れます。
合成時間短縮の単純明快なソリューションは強力なスペックを持つPC を使用することです。
クラウドサービスに用意されている様々なスペックのインスタンスを利用し、同一のデザインを合成した際の合成時間とコストについて調査した結果と得られた知見について共有します。


・当社技術ブログ 記事: https://proc-cpuinfo.fixstars.com/

・フィックスターズグループ/セミナー一覧: https://www.fixstars.com/ja/seminar

・フィックスターズのFPGAシステム開発: https://www.fixstars.com/ja/services/fpga

profile-image

フィックスターズは、コンピュータの性能を最大限に引き出すソフトウェア開発のスペシャリストです。車載、産業機器、金融、医療など、幅広い分野での開発経験があります。また、ディープラーニングや機械学習などの最先端技術にも力を入れています。 並列化や最適化技術を駆使して、マルチコアCPU、GPU、FPGA、量子アニーリングマシンなど、さまざまなハードウェアでソフトウェアを高速化するサービスを提供しています。さらに、長年の経験から培ったハードウェアの知識と最適化ノウハウを活かし、高精度で高性能なアルゴリズムの開発も行っています。       ・開催セミナー一覧:https://www.fixstars.com/ja/seminar   ・技術ブログ :https://proc-cpuinfo.fixstars.com/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

実践的!FPGA開発セミナー vol.12 2022/07/27 18:00~ Copyright© Fixstars Group

2.

Ubuntu on Zynq UltraScale+ MPSoC で組込みシステム開発 応用編 Copyright© Fixstars Group

3.

Who I am 写真 Masayoshi MATSUMURA 松村 将嘉 ソリューション第一事業部 シニアエンジニア Copyright© Fixstars Group

4.

Zynq UltraScale+ MPSoC 評価ボード用 公式Ubuntuイメージ ● イメージ配布/ドキュメント URL ○ https://ubuntu.com/download/xilinx ○ https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/141361 1532/Canonical+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が起動します! Copyright© Fixstars Group 4

5.

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協調の組み込みシステム開発が可能 Copyright© Fixstars Group 5

6.

xlnx-config ツールについて 詳しくは セミナー Vol.9 で紹介しました ● 自作のプラットフォームを簡単にデプロイするための補助ツール ● 下記ファイルを所定のディレクトリにまとめて配置おくと、 自動的に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/ で公開予定 Copyright© Fixstars Group 6

7.

Zynq Ultrascale+ MPSoC のシステム構成 APU : 多機能処理向けCPU - ARM Cortex-A53 x4Cores - Linux など 協調動作させるには? RPU : リアルタイム処理向けCPU - ARM Cortex-R5 x2Cores - LockStep での使用も可 (2Core協調による冗長化) - FreeRTOS など FPGA (PL) ⇒ (https://japan.xilinx.com/content/dam/xilinx/imgs/products/zynq/zynq-eg-block.PNG) Copyright© Fixstars Group ※ 本図は “EG” シリーズの構成図 7

8.

OpenAMP ● 異種のCPU/OS間での協調機能を提供 ● Linux側 をMaster, リアルタイム処理側(FreeRTOS/Baremetal)をRemoteとして扱う ● OpenAMPの主要コンポーネント ○ ○ remoteproc : Master による Remote のLifecycle管理 (LCM) ■ Remote のファームウェアをロード ■ Remote CPUの起動/停止 ■ RPMsg用チャネルの確立 ■ virtio device の生成 RPMsg : 共有メモリを介したプロセッサ間通信 (IPC) ■ ※ (A53) (R5) 通知用にプロセッサ間割り込み(IPI)を用いる AMP: Asymmetric Multi Processing (https://xilinx-wiki.atlassian.net/wiki/spaces/A/pag es/18841718/OpenAMP) Copyright© Fixstars Group 8

9.

OpenAMP OpenAMP は下位層として libmetal 用いている (https://docs.xilinx.com/v/u/ja-JP/ug1186-zynq-openamp-gsg) Copyright© Fixstars Group 9

10.

OpenAMP ● 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 10

11.

想定環境 ● ● ● 評価ボード: ZCU102 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 以降のページに記載するコマンド例は, 特記の無い限り ZCU102上で動作するUbuntu で実行する ものとします Copyright© Fixstars Group 11

12.

手順 ● Ubuntu 側(A53)の設定 ○ 1. デバイスツリーの修正 ○ ● RPU(R5)用ファームウェアの作成 ○ ● 2. ブートファイル(Boot.bin)の作成 今回は FreeRTOS / OpenAMP echo test を使用 (Vitis IDEにデフォルトで用意されている) テストプログラムの実行 ○ Ubuntu からR5にファームウェアを転送して起動 ○ Ubuntu で echo test プログラムを実行 Copyright© Fixstars Group 12

13.

Ubuntu側の設定 - 1.デバイスツリーの修正 ● 今回は、Ubuntuイメージでデフォルトで用いられているものをベースに修正 ○ 記述内容は UG1186 2020.2 の P.34~ のものを参考とした ● 1. Device Tree Compiler (dtc) のインストール $ sudo apt install device-tree-compiler ※ 参考: デバイスツリーはバイナリ形式とテキスト形式があり、本コンパイラはその相互変換を行うもの。 - バイナリ形式(dtb) : 実際のブート時に用いる。 - テキスト形式(dts) : 開発者が編集する際に用いる。ブート時に使うことはできない (dtbに変換が必要)。 ● 2. デフォルトのデバイスツリーをテキスト形式に変換 $ dtc -I dtb -O dts -o ~/zcu102_system.dts /usr/share/xlnx-firmware/zcu102/zcu102_system.dtb (次ページへ続く) Copyright© Fixstars Group 13

14.
[beta]
Ubuntu側の設定 - 1.デバイスツリーの修正
● 3. デバイスツリーの編集
○
(1)

手順2で生成した ~/zcu102_system.dts を編集する

共有メモリ領域, remoteproc, IPI の設定 : ファイル末尾の “}:” の前に下記を追記

reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;

zynqmp-rpu {

compatible = "xlnx,zynqmp-r5-remoteproc-1.0";
#address-cells = <2>;
#size-cells = <2>;
ranges;
core_conf = "split";
reg = <0x0 0xFF9A0000 0x0 0x10000>;

rpu0vdev0vring0: rpu0vdev0vring0@3ed40000 {
no-map;
reg = <0x0 0x3ed40000 0x0 0x4000>;
};

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>;
};

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>;
};

(次ページへ続く)

};

};

tcm_0_b: tcm_0@1 {
reg = <0x0 0xFFE20000 0x0 0x10000>;
pnode-id = <0x10>;
};

Copyright© Fixstars Group

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>;
};

14

15.
[beta]
Ubuntu側の設定 - 1.デバイスツリーの修正
● 3. デバイスツリーの編集 (続き)
(2) UART1 の無効化
UART1をR5の入出力として使用できるようにするために、Linux側は無効化する
“serial@ff010000” セクションの “status” を “disabled” に変更

変更前
serial@ff010000 {

変更後

u-boot,dm-pre-reloc;
compatible = "cdns,uart-r1p12\0xlnx,xuartps";
status = "okay";
interrupt-parent = <0x04>;
interrupts = <0x00 0x16 0x04>;

serial@ff010000 {

u-boot,dm-pre-reloc;
compatible = "cdns,uart-r1p12\0xlnx,xuartps";
status = "disabled";
interrupt-parent = <0x04>;
interrupts = <0x00 0x16 0x04>;

(次ページへ続く)

Copyright© Fixstars Group

15

16.

Ubuntu側の設定 - 1.デバイスツリーの修正 ● 4. 編集済みのデバイスツリーをバイナリ形式に変換 $ dtc -I dts -O dtb -o ~/zcu102_system.dtb ~/zcu102_system.dts Copyright© Fixstars Group 16

17.

Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 ● xlnx-config を用いて、編集済みのデバイスツリーを含むBoot.binを作成 ● 1. xlnx-configのインストール $ sudo snap install xlnx-config --classic --channel=1.x ● 2. Platform Asset Container(PAC) 格納用ディレクトリの作成 $ sudo mkdir -p /usr/local/share/xlnx-config/pac/hwconfig/ ● 3. PAC Config の作成 $ sudo mkdir -p /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/zcu102 (次ページへ続く) Copyright© Fixstars Group 17

18.

Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 ● 4. 必要なファイルの格納 ○ ○ 今回はPL側のデザインは不問なので、PL Bitstreamはデフォルトのもの(Vitis-AI)を用いる デバイスツリー(dtb)のみ、先の手順で作成したものを用いる $ $ $ $ $ $ ○ 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 下記の内容の2つのファイルを新規作成 ■ /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/zcu102/bootgen.bif ■ /usr/local/share/xlnx-config/pac/hwconfig/openamp_try/manifest.yaml 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 } name: openamp_try desscription: An example design for trying OpenAMP revision: 1 assets: zcu102: zcu102 (次ページへ続く) Copyright© Fixstars Group 18

19.

Ubuntu側の設定 - 2. ブートファイル(Boot.bin)の作成 ● 5. PAC Config の有効化 (= Boot.binの作成と配置) $ sudo xlnx-config -a openamp_try ● 6. Reboot $ sudo reboot ● 7. Reboot後、dmesgで以下のようなログがあればOK [ [ 14.770841] zynqmp_r5_remoteproc ff9a0000.zynqmp-rpu: RPU core_conf: split 14.771264] remoteproc remoteproc0: r5@0 is available Copyright© Fixstars Group 19

20.

RPU(R5)用ファームウェアの作成 ● 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 20

21.

RPU(R5)用ファームウェアの作成 ● 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 21

22.

RPU(R5)用ファームウェアの作成 ● 3. Application Projectの作成 ○ ○ ○ ○ File -> New -> Application Project Platformは、手順1で作成したものを選択 Project名は任意に設定 Templates で “OpenAMP echo-test” を選択 ■ ○ 注: 選択時にエラーが表示される場合は、 前ページのPlatformの設定とビルドが 正しく完了していることを確認 Finishをクリック (次ページへ続く) Copyright© Fixstars Group 22

23.
[beta]
RPU(R5)用ファームウェアの作成
● 4. Application プログラムの修正
○

Masterからメッセージを受信したことがわかるよう、受信時にログを出力するように修正
<rpmsg-echo.c>
/*-----------------------------------------------------------------------------*
* 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);

// ←追加

...

○

●

修正後、Application Projectをビルドする

5. elfファイルの転送
○
○

elfファイルは通常 “<workspace>/<Project名>/{Debug | Realease}/<Project名>.elf” に生成
生成されたelfファイルをZCU102のUbuntu環境に転送する
Copyright© Fixstars Group

23

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 24

25.

テストプログラムの実行 ● 2. テストプログラムのビルドと実行 ○ 今回使用するファームに対応するLinux側のテストプログラムは下記にあります ■ ○ https://github.com/Xilinx/meta-openamp/tree/master/recipes-openamp/rpmsg-examples/rpmsg-echo-test これをビルドして実行します # ビルド $ make # 実行 $ sudo ./echo_test A53 (Ubuntu) R5 echo_test Firmware Rpmsg send Rpmsg recv loop back RPMsg Rpmsg recv & verify Rpmsg send (次ページへ続く) Copyright© Fixstars Group 25

26.

テストプログラムの実行 ● 結果 (開発PCにZCU102のUART(USB)を接続して動作確認) UART0 (/dev/ttyUSB0) A53 (Ubuntu) Error count = 0 ⇒ Verify OK! Copyright© Fixstars Group 26

27.

テストプログラムの実行 ● 結果 (開発PCにZCU102のUART(USB)を接続して動作確認) UART1 (/dev/ttyUSB1) R5 メッセージを受信したことが表示されている (改行がおかしいのは改行コードの不一致..?) Copyright© Fixstars Group 27

28.

まとめ ● Ubuntu でも、OpenAMPを用いた A53 - R5 間の通信ができることが確認できた ● Petalinux向けのようなドキュメントやお膳立てがないため、自力で設定が必要 ○ ● デバイスツリーとか. だいたいはPetalinux向けの情報が参考になったが、微妙に異なる箇所はある. 一方、ドライバは既に組み込まれており、追加でのインストールは不要だった ○ これが Xilinx公式のUbuntu のメリットと言える Copyright© Fixstars Group 28

29.

おまけ 2022 Q3 (7~9月?) に、Ubuntu 22.04 のイメージがリリースされるようです ZCU111が対象に 追加されている (https://ubuntu.com/download/amd-xilinx) Copyright© Fixstars Group 29

30.

クラウドサービスを利用した FPGA 開発の高速化 - 合成時間短縮とコストのバランスを 考察する - Copyright© Fixstars Group

31.

Who I am Eisuke MOCHIZUKI 望月 英輔 ソリューション第四事業部 シニアエンジニア Copyright© Fixstars Group

32.

クラウドサービスを開発に利用するモチベーション ● 複数の合成を並行して実行することで、開発の高速化が期待できる ○ ○ ● IP のパラメータを変更したデザインを複数作成する Timing Violation 解消のために複数のストラテジを試す 強力なスペックのマシンを必要に応じて利用可能 ○ 大きなサイズのFPGA になると要求スペックも大きくなりがち 出典: Vivado ML スタンダード - メモリ要件 Copyright© Fixstars Group 32

33.

FPGA 開発に利用可能なクラウドサービス ● 様々なクラウドベンダやサービスが存在 ○ ○ ● FPGA 開発に利用可能なのはヴァーチャルマシンを提供するサービス ○ ○ ● Amazon AWS, Microsoft Azure, Google Cloud, Alibaba Cloud, etc ... 各クラウドベンダ内にも様々サービスが存在 ■ AWS EC2, S3, Lambda, etc … 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 ■ ただし、いろいろクセがあるので注意 (後述) Copyright© Fixstars Group 33

34.

今回のセミナーでの検証内容 ● AWS EC2 のインスタンスタイプを変更しながらVivado で合成を行い、 合成時間の変化を検証する ○ ○ ○ インスタンスタイプはPC で言うところのマシンスペックのようなもの インスタンスタイプ毎にvCPU の種類や数、メモリサイズが異なる 合成対象のデザインや条件については次ページに記載 ● インスタンスタイプと合成時間から、合成時間に影響する要素を検証する ● 合成時間からトータルコストを算出し、コストパフォーマンスを検証する Copyright© Fixstars Group 34

35.

Vivado 合成対象デザイン, 条件 ● Alveo U250 をターゲットに下記デザインを合成 ○ ● PCIe x16 からDMA 経由でAlveo U250 上のDDR4 メモリにアクセスするデザイン Number of jobs は物理コア数(= vCPU 数の半分)に設定 ○ ○ Number of jobs: Vivado 合成時に投入する最大ジョブ数 物理コア数と同じにしておくと速い印象がある Copyright© Fixstars Group 35

36.

Vivado 合成ステップ ● 大きく分けて下記3ステップで合成が進む ● 1. Submodule Synthesis ○ ○ ● 2. Synthesis ○ ○ ● デザイン全体の論理合成 数分で完了することが多い 3. Implementaion ○ ○ ● デザイン内の各モジュールの論理合成 モジュール毎に独立しているため並行して論理合成が可能 デザイン全体の配置配線 最も時間がかかる 各ステップそれぞれの時間を測定し評価対象とした Copyright© Fixstars Group 36

37.

vCPU, メモリを変化させて比較 ● 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 37

38.

vCPU, メモリを変化させたときの合成時間 ● Sub Synth の時間はvCPU やメモリサイズが増えるほど短くなる傾向にある ○ ● 並列処理が可能な処理のためvCPU の数が影響しやすいと考えられる Implementation の時間はメモリ64GB と128GB で大きな変化なし ○ 合成に必要なメモリを用意しておけばそれ以上は合成時間に影響なし? ■ 今回のAlveo U250 はピークで47GB との記載あり Copyright© Fixstars Group 38

39.

vCPU, メモリを変化させたときのコスト ● Total Cost は性能が向上するほどに増えていく ○ ● Cost/hr の上昇率よりも合成時間の削減率が低いため Cost/hr の低いインスタンスタイプがコストパフォーマンスに優れる Copyright© Fixstars Group 39

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 40

41.

インスタンスタイプを変化させたときの合成時間 ● Boost Clock が高くなるほど合成時間が減少する傾向にある ○ ● m5zn についてはvCPU の数が他よりも少ないにも関わらず、全体で合成時間が減少 合成時間の削減にはBoost Clock が大きく影響する Copyright© Fixstars Group 41

42.

インスタンスタイプを変化させたときのコスト ● 合成時間が短いほどTotal Cost が減少 ○ ● Cost/hr が概ね同じなため、合成時間の差がTotal Cost に影響した Cost/hr が同じであれば、Boost Clock の大きいインスタンスタイプが コストパフォーマンス、合成時間共に優れる Copyright© Fixstars Group 42

43.

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. インスタンスを起動し合成スタート Copyright© Fixstars Group 43

44.

AWS EC2 利用時の注意点 ● Vivado がプリインストールされた環境はUS リージョンでのみ(*)利用可能 ○ ○ ● 物理的に遠いためネットワークレイテンシが大きく、GUI の操作に若干難あり デザインの作成は手元のマシンで行い、合成はクラウドで行うという運用を推奨 Vivado の新ver. がリリースされると旧ver. は削除される傾向にある ○ ● * 2022/07/27 現在 以前は2019.1 が存在したことを確認できているが、今は2021.2, 2022.2 のみ ■ https://aws.amazon.com/marketplace/search?searchTerms=Vivado vCPU limit の存在に注意 ○ ○ 同時に実行できるインスタンスの数がvCPU の数で制限されている 制限解除にはAWS とのやりとりが必要とのこと Copyright© Fixstars Group 44

45.

ここまでクラウドの話をしてきましたが・・・ ● ● FPGA 開発者がわざわざクラウドで合成することは少ないのではないか? 強力な合成用マシンを所持していたり、今後導入することを検討している? ○ ● Fixstars で使用している合成マシンの紹介 ○ ● ● ● もう少しだけディープな話をしたいと思います。 それらのマシンで先程のデザインを合成したらどうなるか? 合成時のCPU 温度変化 合成時のクロック周波数の変化 今後導入するならこんなマシン Copyright© Fixstars Group 45

46.

Fixstars で使用している合成マシンの紹介 ● Fixstars では下記マシンが主に合成に使用されている ○ No. 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 ● それぞれのマシンで合成を行い、合成時間を確認 ○ No. 3 は忙しそうだったので競争除外 Copyright© Fixstars Group 46

47.

Fixstars 合成マシンでの合成時間 ● 比較的安価なNo.4 が最も合成時間が短い ○ ● Boost Clock が5.0GHz と高いことが影響? 比較的高価なNo.2 が最も合成時間が長い ○ Boost Clock も4.8GHz と決して低くないにも関わらず、なぜだろうか? Copyright© Fixstars Group 47

48.

合成時のCPU 温度変化 ● 先程のNo.2 でサーマルスロットリングが発生しているのでは?と考え、 合成中のCPU 温度を取得 Sub Synth ● Implementation ピークが70℃以下で特に問題なさそうだったが、下記知見を得た ○ ○ CPU 温度はSub Synth 中に最も高くなる 水冷ではなく空冷でも十分冷える Copyright© Fixstars Group 48

49.

合成時のクロック周波数の変化 ● 先程のNo.2 の合成中のクロック周波数を取得 Sub Synth ● Implementation ピークのクロックが4.6GHz 程度であることを確認し、下記知見を得た ○ ○ 各コアのクロックは上がったり下がったりを繰り返している Sub Synth 中はクロックが一段下がる Copyright© Fixstars Group 49

50.

合成時のクロック周波数の変化 ● 最も合成時間の短かったNo.4 についてもクロック周波数を取得 Sub Synth ● Implementation ピークのクロックが5.0GHz に達することを確認し、下記知見を得た ○ ○ 各コアのクロックは一貫して高いクロックを保っている やはりSub Synth 中はクロックが一段下がる Copyright© Fixstars Group 50

51.

合成時のクロック周波数の変化 ● No.4 の合成時間が比較的長い理由は、クロック周波数の頻繁な変化に原因が あるのかもしれない ● BIOS の設定等で改善する可能性があるので、継続調査する ○ クロック周波数がベースクロックの3.0GHz を遥かに下回る1.2GHz 程度まで落ち込んでいる ので、おそらく省電力系の設定が影響していると考えられる Copyright© Fixstars Group 51

52.

今後導入するならこんなマシン ● ここまでの調査結果を踏まえ、FPGA 合成マシンとして導入するなら・・・ ● CPU: Boost Clock が大きいもの ○ ○ ○ ○ ○ ● <- Fixstars での合成最速マシン メモリ: 合成対象のチップのピーク値 x 同時に合成を走らせるデザイン数 ○ ● 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 4.9 GHz: AMD Ryzen 9 5950X Alveo U250 x 2デザイン -> 47 GB x 2 = 94 GB 以上 その他: 予算に合わせて適切に Copyright© Fixstars Group 52

53.

Thank you! お問い合わせ窓口 : event@fixstars.com Copyright© Fixstars Group