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用に修正したスクリプトも用意して性能比較を行なった。
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 インストール方法
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のファイル操作とプログラム実行
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「MicroPython」カテゴリの記事
- microbit-v2にMicropythonをインストールする(2021.05.06)
- PicoボードのMicroPythonをVS_CodeのextensionのPico-Goでプログラミングする(2021.02.10)
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- MicroPython(F767ZI) Network Samples(2021.01.03)
この記事へのコメントは終了しました。
コメント