RISC-VプロセッサHiFive1でMNISTを動作させよう。実機デバッグをしていて、やっと動作するようになった。 バッチサイズを増やすとデータセクションが入りきらないのでいろいろ工夫したいが、もうちょっと軽量化できないだろうか。
HiFive1(32bit RISC-V)でのサイクルカウント
過去の記事を引用して、サイクル数をカウントして性能を測定する環境を構築した。
改善前の性能
前回までのMNISTのプログラムで、100個分の画像を解析するのに必要なサイクル数を計測した。
Correct = 91 Time = 5216564625
double演算を削除する
どこか高速化できるところが無いだろうか?とりあえず、doubleの計算をしてしまっている所があり、それを削除して高速化していきたい。
// fix16_in_data[i] = fix16_from_dbl (in_data[i] / 255.0); fix16_in_data[i] = (in_data[i] << 8);
これで少し高速化された。約5%の高速化だ。
Correct = 91 Time = 4961182594
バッチサイズを増やす
L1キャッシュの容量の関係上、とりあえずバッチサイズを2に増やした。この時のサイクル数は以下のようになった。 バッチサイズが1の時に比べて、1画像当たりのサイクル性能は少しだけ悪いなあ。なんでだろう。
あと、そもそもlibfixmathで使っているfix16_t
のデータタイプが、32bitなんだよなあ。これを16bitにしたい。。
せこい技を使うなら、そもそもデータもfix16の形式で入れておきたいんだよなあ。。。