« MicroPythonのツールとしてpyboad.pyを使う | トップページ | CC3200 MicroPython インストール »

2020年2月13日 (木)

MicroPython Performance Test

2020/6/9:
・XIAOのCircuitPythonの数字を追加した。
2020/5/24:
・Feather-M4-ExpressのCircuitPythonの数字を追加した。
・Grand-Central-M4-ExpressのCircuitPythonの数字を追加した。
2020/5/22:
・Nucleo-F767ZIのMicroPythonの数字を追加した。
・Circuit-Playground-ExpressのCircuitPythonの数字を追加した。
・PyPortalのCircuitPythonの数字を追加した。
2020/3/29:
・RaspberryPi4(Rpi4)のpython3/micropythonの数字を追加した。
2020/3/16:
・Teensy4.0の数字を追加した。
2020/3/11:
・Maixduinoの数字を追加した。
2020/2/27:
・CC3200の数字を追加した。
2020/2/20:
・BareMetal-RpiZero-Micropythonの数字を追加した。
2020/2/13:
初版

MicroPython Performance Test

MicroPython Performance Test

概要

手元にMicroPythonが動作するボードが色々あるので、簡単なPerformanceTestをやってみた。以下のリンクを参考にしてESP32/8266用に修正したスクリプトも用意して性能比較を行なった。

micropython/Performance

pyborad/STM32用スクリプト

performanceTest.py

# Peformace Test import pyb def performanceTest(): millis = pyb.millis endTime = millis() + 10000 count = 0 while millis() < endTime: count += 1 print("Count: ", count) performanceTest()

ESP32/ESP8266用スクリプト

performanceTestESP32.py

# Peformace Test for ESP32 from machine import RTC rtc = RTC() rtc.datetime((2020, 2, 9, 1, 12, 48, 0, 0)) # (year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) def performanceTest(): secs = rtc.datetime()[6] endTime = secs + 10 count = 0 while rtc.datetime()[6] < endTime: count += 1 print("Count: ", count) performanceTest()

PC/BareMetal-RpiZeo/Linux-Rpizero/Maixduino用スクリプト

performanceRpiZero.py

# Peformace Test RpiZero import time def performanceTest(): msec = time.ticks_ms endTime = msec() + 10000 count = 0 while msec() < endTime: count += 1 print("Count: ", count) performanceTest()

CC3200用スクリプト

performanceTestCC3200.py

# Peformace Test for CC3200 from machine import RTC rtc = RTC(datetime=(2020, 2, 9, 10, 11, 0, 0, None)) def performanceTest(): secs = rtc.now()[5] endTime = secs + 10 count = 0 while rtc.now()[5] < endTime: count += 1 print("Count: ", count) performanceTest()

CircuitPython(Teensy4.0)/python3用スクリプト

performanceCircuitPython.py

# Peformace Test CircuitPython from time import monotonic_ns def performanceTest(): endTime = monotonic_ns() + 10000000000 # 10 sec count = 0 while monotonic_ns() < endTime: count += 1 print("Count: ", count) performanceTest()

XIAO CircuitPython用スクリプト

performanceCircuitPython_XIAO.py

# Peformace Test XIAO CircuitPython from time import monotonic def performanceTest(): endTime = monotonic() + 10.0 # 10 sec count = 0 while monotonic() < endTime: count += 1 print("Count: ", count) performanceTest()

実行例

# pyboard/STM32の場合 $ ./pyboard.py --device /dev/ttyACM0 performanceTest.py Count: 2825625 # ESP32/ESP866の場合 $ ./pyboard.py --device /dev/ttyUSB0 performanceTestESP32.py Count: 39187

結果

ボード名 Count
F767ZI 5,676,566
F446RE 2,825,625
F4Disco 2,882,769
Maixduino 2,218,879
F401RE 1,362,752
L476RG 1,089,347
PyPortal 474,734
Grand-Central-M4-Express 445,404
Feather-M4-Express 438,444
Teensy4.0 432,413
XIAO 174,388
Circuit-Playground-Express 121,800
ESP8266 64,049
ESP32 39,187
CC3200 5,529
BareMetal-RpiZero 680,525
Linux-RpiZero 6,370,022
PC(linux) 161,265,687
python3-Rpi4 11,359,199
micropython-Rpi4 16,117,283

BareMetal-RpiZeroは、RpiZeroでのBareMetalのmicropython、 Linux-RpiZeroは、linux上でのmicropython、 PC(Linux)は、PCのLinux上でのmicropythonを意味する。 MaixduinoはMaixduinoのmicropythonであるMaixPyを意味する。 Teensy4.0はTeensy4.0のCurcuitPythonを意味する。
python3-Rpi4は「python3 performanceCurcuitPython.py」の数字、 micropython-Rpi4は「micropython performanceCircuitPython.py」の数字を意味する

なお、PC(linux)のCPUは、「Intel® Core™ i7-3520M CPU @ 2.90GHz × 4 )」である。

STM32系(F7xx/F4xx/L4xx)がESP32/ESP8266に比べてダントツに速いようだ。 Linux-RpiZeroとBareMetal-RpiZeroの数字の違いはCPUキャッシュの有効/無効の差と思われる。 CC3200は、他のMicroPythonボードに比べて極端に遅い結果だが、省電優先設計のせいだと思われる。
Teensy4.0のCircuitPythonはmonotonic_ns()のオーバーヘッドが大きい気がする。

XIAOとCircuit-Playground-Expressは、同じプロセッサATSAMD21(Cortex-M0+,48MHz)にもかかわらず、性能差が出ているのは実装の違いで、XIAOのほうは、floatで動いているのに対して、Circuit-Playground-Expressのほうは、long_intで動いていることによる差が出ていると考えている。

参考情報

RaspberryPiのpython3でCircuitPythonのAPIを使用する

XIAOにCircuitPythonをインストールする
Circuit-Playground-ExpressにCircuitPythonをインストールする
Teensy4.0にCurcuitPythonをインストールする

BareMetalのMicropythonをRaspberryPi_Zeroにインストールしてみる

NUCLEO-F767ZIにMicropythonをインストールする(v2)
Nucleo-L476RGにMicroPythonをインストールする
Nucleo-F401REにMicroPythonをインストールする
STM32F4-Discovery」にMicroPythonをインストールする
NUCLEO-F446REにMicropythonをインストールする(v2)
NUCLEO F446RE MicroPython インストール方法

CC3200 MicroPython インストール

ESP32のMicroPythonのインストール方法
ESP-WROOM-02 MicroPython インストール方法

MicroPythonのツールとしてpyboad.pyを使う
The pyboard.py tool

ESP32-DevKitC ESP-WROOM-32開発ボード
MicroPython - Quick reference for the ESP32
ampyを用いたMicroPythonのファイル操作とプログラム実行

以上

|

« MicroPythonのツールとしてpyboad.pyを使う | トップページ | CC3200 MicroPython インストール »

linux」カテゴリの記事

MicroPython」カテゴリの記事

コメント

この記事へのコメントは終了しました。