FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Spike-ISSによるRISC-V向けにコンパイルしたアプリケーション実行(1)

忙しくてずいぶんと放置してしまっていた。RISC-V向けにアプリケーションをコンパイルして、動作させてみるテスト。

いきなり大きなプログラムを実行して、HiFive1を壊してしまったりしたので、今回は慎重に生きたい。まずはISSなどであらかじめプログラムの動作の様子を見て、それからHiFive1にダウンロードするという手順を取ろう。

以前に作ったC言語で記述したMNIST学習プログラム。RISC-V向けにコンパイルしてみた。と言っても、やったことはx86用のgccを渡すべきところを、riscv64-unknown-elf-gccに置き換えただけである。

github.com

CC := riscv64-unknown-elf-gcc

include ../bp/Makefile

printfなどが入っていても、spikeを利用するときにpkオプションを指定すると、proxy kernel付きで実行してくれるようになる。proxy kernelはSyscallの代理を行うもおんで、HTIF(host target interface)の肩代わりをするため、printf()などが使えるようになるというわけだ。

  • Running simulations

Running simulations · lowRISC

以下は、MNISTの学習プログラム。5000回の学習の後に、10000個の画像を判別テストして、正答率を図っている。50000回程度学習させることによって、90%程度の正解率に持って行くシミュレーションが、Spike ISSでも実行できることを確認できた。

$ time spike pk train_twolayernet
2051
60000
28
28
2049
60000
=== TestNetwork ===
Correct = 1597
=== TestNetwork ===
Correct = 3726
=== TestNetwork ===
Correct = 6553
=== TestNetwork ===
Correct = 7882
=== TestNetwork ===
Correct = 8448
=== TestNetwork ===
Correct = 8629
=== TestNetwork ===
Correct = 8713
=== TestNetwork ===
Correct = 8858
=== TestNetwork ===
Correct = 8915
=== TestNetwork ===
Correct = 8908
=== TestNetwork ===
Correct = 8978
=== TestNetwork ===
Correct = 9035

ただし、これめちゃめちゃ遅い。これだけ動作させるのに10分程度かかった。次は、もう少しステップを踏みながら、HiFive1でMNISTが実行できるところまで持って行きたい。

f:id:msyksphinz:20170817010249p:plain