忙しくてずいぶんと放置してしまっていた。RISC-V向けにアプリケーションをコンパイルして、動作させてみるテスト。
いきなり大きなプログラムを実行して、HiFive1を壊してしまったりしたので、今回は慎重に生きたい。まずはISSなどであらかじめプログラムの動作の様子を見て、それからHiFive1にダウンロードするという手順を取ろう。
以前に作ったC言語で記述したMNIST学習プログラム。RISC-V向けにコンパイルしてみた。と言っても、やったことはx86用のgccを渡すべきところを、riscv64-unknown-elf-gccに置き換えただけである。
CC := riscv64-unknown-elf-gcc include ../bp/Makefile
printfなどが入っていても、spikeを利用するときにpkオプションを指定すると、proxy kernel付きで実行してくれるようになる。proxy kernelはSyscallの代理を行うもおんで、HTIF(host target interface)の肩代わりをするため、printf()
などが使えるようになるというわけだ。
- Running simulations
以下は、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が実行できるところまで持って行きたい。