▲ | jononor 2 days ago | |||||||
This should not be used to conclude on the viability of using MicroPython for numeric type tasks. For that one should at least take into account the following: Integers are much faster than floats (floats involve a pointer and a heap allocation, integers are stored in a single word/object). array.array is preferred over list for something like sort. Continuous memory representation of numbers versus general purpose list of objects. MicroPython has on-board "JIT" (native/viper emitters), have to explicitly annotate the function. Should give 4-10x improvements for this case. MicroPython has an on-board assembler, so one can write ARM assembly and get that to a function. MicroPython also has support for C modules, which expose a Python API. Including dynamic native modules which can be installed at runtime with the package manager. Bubblesort is O(n*2), which hurts for even a few thousand numbers. Actual sorting on a microcontroller should be done with an O(n log n) algorithm. | ||||||||
▲ | jononor 2 days ago | parent | next [-] | |||||||
Ok, you guys have successfully nerd sniped me this morning... Here some experiments showing the use of code emitter to speed this code up massively. Link to code: https://github.com/jonnor/embeddedml/tree/master/handson/mic... The results on ESP32S3 (M5Stick AtomS3U), running MicroPython 1.24.1. All times in seconds, for the 2000 number sort. bubble.py 19.119 bubble_native.py 9.482 bubble_viper.py 0.904 heapsort_viper.py 0.02 So one can do 100x better without changing the algorithm, and 1000x by changing it :) Microcontrollers are a constrained platform. They can be plenty fast - but it is much more important to use the tools available, compared to on PC. MicroPython has excellent tools available for this. | ||||||||
| ||||||||
▲ | jononor 2 days ago | parent | prev [-] | |||||||
If anyone is interested in fast dynamic native C modules for MicroPython, you can check out emlearn-micropython - a machine learning and digital signal processing library. https://github.com/emlearn/emlearn-micropython Disclaimer: I am the maintainer |