Raspberry Pi版MicroPythonのベンチマークテスト

昨日行った、Raspberry Piベアメタル版MicroPythonでのLチカですが、手動でオン・オフができるだけで、「点滅」はできていませんでした。
点滅を行うには、一定時間停止するdelay機能が必要ですが、MicroPythonではutimeモジュールにdelay_ms()があります。
ESP32やSTM32用の実装を参考に、このモジュールをRaspberry Pi用に移植しました

ESP32やSTM32用のモジュールとの差分は、ほぼ現在時刻を取得する部分のみですが、これは以前のC言語版ベアメタルLチカで使ったシステムタイマの機能をそのまま使います。
ただ、Raspberry Piにはバッテリバックアップ付きの時計機能が無いので、電源ONのたびに2000年1月1日0時0分0秒になってしまいます。

とはいえ、delayは実現できましたので、以下のコードでいわゆる「Lチカ」が行えました。

これで経過時間を計測できるようなりましたので、次に以下で紹介されているベンチマークテストを動かしてみました。

Benchmark comparison of MicroPython boards – MicroPython Forum

モジュール名がtimeになっているところはutimeに適宜変更します。
ベンチマークの内容は、
(1)文字列や配列の演算:値が大きいほど高速
(2)一定時間に「1増やす」を行った回数:値が大きいほど高速
(3)内容はよく分かりませんが、ある浮動小数点演算の所要時間:値が小さいほど高速
となっています。

結果ですが、以下のようになりました。

(1)Pystone
Pystone(1.2) time for 500 passes = 818 ms
This machine benchmarks at 611 pystones/second

(2)performanceTest
>>> performanceTest()
Count:  612921

(3)hsquare.py
Doing 50000 calculations...
calculations done after 11717 ms.
Mean time for each inverse h square calculation = 234.3400001525878 us
Sum of inverse h square = 38023.2257843017578
Mean of inverse h square = 0.7604645729065

上記のスレッドにある他のMCUと比較してみましょう。
PyBoard1.1は168MHzのCortex-M4F、Teensy3.6は180MHzのCortex-M4です。

(1)Pystone
* Pyboard v1.1 with MicroPython v1.8.6 : 1,754;
* ESP8266 with MicroPython v1.8.6-7 : 223 (80 MHz) / 415 (160 MHz);
* Teensy 3.6 with MicroPython v1.8.6 : 2212;
* Raspberry Pi Zero W with MicroPython v1.9.3 : 611.

(2)performanceTest
* Pyboard v1.1 with MicroPython v1.8.6 : 2,783,122;
* ESP8266 with MicroPython v1.8.6-7 : 171,145 (80 MHz) / 341,224 (160 MHz);
* Teensy 3.6 with MicroPython v1.8.6 : 3,451,931;
* Raspberry Pi Zero W with MicroPython v1.9.3 : 612,921.

(3)hsquare.py
* Pyboard v1.1 with MicroPython v1.8.6 : 83;
* ESP8266 with MicroPython v1.8.6-7 : 460 (80 MHz) / 239 (160 MHz);
* Teensy 3.6 with MicroPython v1.8.6 : 73;
* Raspberry Pi Zero W with MicroPython v1.9.3 : 234.34.

Raspberry Pi Zero Wのクロックは1GHzのはずなのですが、全然速くないですね。
どこかにボトルネックがあるのかもしれません。

コメント