2020年1月4日土曜日

TensorFlow lite for micro で RISC-Vターゲットのサンプルをqemuで動かす

目的


前回のブログ「TensorFlow lite for micro で RISC-Vターゲットのサンプルをビルドする」で生成した、Hello worldのバイナリを実行する。
ただ、実機("Hifive1" SiFive FE310 development board)は持っていないため、qemuで動作させる。


qemuでの実行


qemuの準備


RISC-Vターゲットのqemuを準備する。Fedora 31にはパッケージ(qemu-system-riscv 4.1.1)が存在するが、今回はver.4.2をソースビルドする。

ソースビルド


依存関係のインストール。追加で必要になったのは以下(その他はTensorFlowなどのビルドで入っているかも?)。

$ sudo dnf install glib2-devel pixman-devel

ソースファイルをダウンロード。

$ wget https://download.qemu.org/qemu-4.2.0.tar.xz
$ tar xf qemu-4.2.0.tar.xz
$ cd qemu-4.2.0/

configure, makeを行う。ターゲットはriscv32-softmmuのみでよいはず。後のことも考えて、その他のRISC-Vターゲットもビルドする。

$ ./configure --target-list=riscv64-softmmu,riscv32-softmmu,riscv64-linux-user,riscv32-linux-user
$ make -j$(nproc)
$ sudo make install


バイナリのqemuでの実行


前回のブログで作成したTensorFlow lite for microのRISC-Vターゲットのバイナリ(Hello worldのサンプル)を実行する。
オプションの指定は以下。
  • machineオプション: sifive_e
  • kernelオプション: 作成したELFファイル
    tensorflow/tensorflow/lite/micro/tools/make/gen/riscv32_mcu_riscv32_mcu/bin/hello_world

実行。

$ qemu-system-riscv32 -nographic -machine sifive_e -kernel tensorflow/tensorflow/lite/micro/tools/make/gen/riscv32_mcu_riscv32_mcu/bin/hello_worl

コンソールにログが出力される。Hello worldのサンプルは正弦波を出力するモデルである。x_value, y_valueにそれなりの値が永遠と出力される。




0 件のコメント:

コメントを投稿