2021/2/7++
MicroPython CircuitPython Performace Test (v2)
MicroPython/CircuitPython Performance Test この記事は「 MicroPython Performance Test 」を見直して新たな結果を追加した第2版にあたる。
PerformaceTest.py
# Peformace Test
import pyb
def performanceTest():
millis = pyb.millis
endTime = millis() + 10000
count = 0
while millis() < endTime:
count += 1
print("Count: ", count)
performanceTest()
PerformaceTestESP32.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()
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()
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()
performanceTestCPY.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()
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
ボード名 | M/C/P | Count |
---|---|---|
F767ZI | M | 5,676,566 |
F446RE | M | 2,825,625 |
F4Disco | M | 2,882,769 |
Maixduino | M | 2,218,879 |
Pico-MP | M | 1,507,516 |
F401RE | M | 1,362,752 |
L476RG | M | 1,089,347 |
PyPortal | C | 474,734 |
Grand-Central-M4-Express | C | 445,404 |
Feather-M4-Express | C | 438,444 |
Teensy4.0 | C | 432,413 |
Pico-CPY | C | 341,033 |
XIAO | C | 174,388 |
Circuit-Playground-Express | C | 121,800 |
ESP8266 | M | 64,049 |
ESP32 | M | 39,187 |
CC3200 | M | 5,529 |
BareMetal-RpiZero | M | 680,525 |
Linux-RpiZero | P | 6,370,022 |
PC(linux) | P | 161,265,687 |
micropython-Rpi4 | M | 16,117,283 |
python3-Rpi4 | P | 11,359,199 |
M/C/Pは、pythonの種類を表し、
M:MicroPython、
C:CircuitPython、
P:Python3
を表す。
・Pico-MPは、RPI_Picoボードの MicroPython、Pico-CPYは、RPI_PicoボードのCircuitPythonを意味する。
・BareMetal-RpiZeroは、RpiZeroでのBareMetalのmicropython、 Linux-RpiZeroは、linux上でのmicropython、 PC(Linux)は、PCのLinux上でのmicropythonを意味する。
・MaixduinoはMaixduinoのmicropythonであるMaixPyを意味する。
・Teensy4.0はTeensy4.0のCircuitPythonを意味する。
・python3-Rpi4は「python3 performanceCircuitPython.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で動いていることによる差が出ていると考えている。
・Pico-MP,Pico-CPYはCortex-M0であるがクロックが他のM0より高いこと(最大133Mz)と浮動小数点ライブラリが最適化されていることでM4並みの性能が出ているようだ。MP,CPYの性能差は最適化が進んでいるかどうかの差と思われる。
PicoボードにMicropython/CircuitPythonをインストールする
RaspberryPiのpython3でCircuitPythonのAPIを使用する
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のファイル操作とプログラム実行
以上