Performance
Overview
Other SAMD21-based ARM M0 boards, such as the MKRZero, Adafruit Gemma M0, Adafruit ItsyBitsy M0, and Adafruit Feather M0 Adalogger are similar in performance to the Arduino Zero.
Other SAMD51-based ARM M4 boards, such as the Adafruit ItsyBitsy M4 and Adafruit Feather M4, are similar in performance to the Adafruit Metro M4.
Other RP2040-based boards, such as the Raspberry Pi Pico W and Adafruit Feather RP2040, are similar in performance to the Raspberry Pi Pico.
Other K210-based RISC-V boards, such as the Sipeed MAiX One Dock and Sipeed MAiX BiT, are similar in performance to the Sipeed Maixduino.
Platforms
The following table gives a summary of the performance of the different boards supported by the latest release of uLisp for each platform:
AVR-Nano version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Uno | ATmega328 | 16 MHz | 319 | 256 | † | 0.5 ms | 63.3 s | |
Arduino Nano | ATmega328 | 16 MHz | 319 | 256 | † | 0.5 ms | 63.3 s | |
Arduino Nano Every | ATmega4809 | 20 MHz | 1066 | 64 | † | 1.4 ms | 53.3 s | 105.4 s |
ATmega4809 Curiosity Nano | ATmega4809 | 20 MHz | 1066 | 64 | † | 1.4 ms | 49 s | 112 s |
AVR version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Mega 2560 | ATmega2560 | 16 MHz | 1344 | 1024 | † | 2.1 ms | 55.6 s | 110.7 s |
Lisp Badge | ATmega1284 | 16 MHz | 2944 | All | 96 | 4.7 ms | 54.6 s | 109.2 s |
Lisp Badge LE | AVR128DB48 | 24 MHz | 2800 | All | 96 | 2.5 ms | 34.9 s | 72.1 s |
AVR128DA48 Curiosity Nano | AVR128DA48 | 24 MHz | 2920 | All | 96 | 2.6 ms | 33.1 s | 66.7 s |
AVR128DB48 Curiosity Nano | AVR128DB48 | 24 MHz | 2920 | All | 96 | 2.6 ms | 33.1 s | 66.7 s |
ARM version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 | FFT |
Arduino Zero | ATSAMD21 | 48 MHz | 2639 | All | 128 | 2.4 ms | 12 s | 51 s | 348 ms |
Arduino MKRZero | ATSAMD21 | 48 MHz | 2639 | All | 128 | 2.2 ms | 18.3 s | 43.6 s | 446 ms |
Adafruit Gemma M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 2.4 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit QT-Py SAMD21 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit ItsyBitsy M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit Feather M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 34.3 s | 445 ms |
Adafruit Neo Trinkey | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 10.5 s | 26.6 s | 445 ms |
Seeed Studio XIAO SAMD21 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 2.4 ms | 14 s | 41 s | 445 ms |
Adafruit Metro M4 Grand Central | ATSAMD51 | 120 MHz | 28800 | All | 256 | 4.6 ms | 4.1 s | 11 s | 122 ms |
Adafruit Metro M4 | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 4.4 s | 9.8 s | 122 ms |
Adafruit ItsyBitsy M4 | ATSAMD51 | 120 MHz | 20608 | All | 256 | 3.3 ms | 4.4 s | 9.9 s | 121 ms |
Adafruit Feather M4 | ATSAMD51 | 120 MHz | 20608 | All | 256 | 3.3 ms | 4.5 s | 10.2 s | 121 ms |
Adafruit PyGamer and PyBadge | ATSAMD51 | 120 MHz | 20608 | All | 256 | 3.3 ms | 4.2 s | 10.2 s | 121 ms |
Seeed Studio Wio Terminal | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 5.3 s | 13.0 s | 121 ms |
BBC Micro:bit | nRF51822 | 16 MHz | 1344 | * | 64 | 2.2 ms | 38.4 s | 77.9 s | N/A |
Calliope mini | nRF51822 | 16 MHz | 3328 | * | 64 | 5.3 ms | 34 s | 82 s | 1110 ms |
BBC Micro:bit V2 | nRF52833 | 64 MHz | 12927 | * | 128 | 6.7 ms | 8.6 s | 18.9 s | 246 ms |
Adafruit CLUE | nRF52840 | 64 MHz | 21120 | All | 256 | 7.8 ms | 12.7 s | 31.8 s | 199 ms |
Adafruit ItsyBitsy nRF52840 | nRF52840 | 64 MHz | 21120 | All | 256 | 6.8 ms | 12.6 s | 31.4 s | 199 ms |
Seeed Studio XIAO nRF52840 | nRF52840 | 64 MHz | 21120 | All | 256 | 5.9 ms | 9.1 s | 24.9 s | 199 ms |
Circuit Playground Bluefruit | nRF52840 | 64 MHz | 21120 | All | 256 | 6.8 ms | 9.0 s | 24.4 s | 199 ms |
Raspberry Pi Pico | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 4.8 s | 12.9 s | 174 ms |
Raspberry Pi Pico W | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 4.8 s | 12.9 s | 174 ms |
Adafruit Feather RP2040 | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 5.0 s | 13.1 s | 174 ms |
Feather RP2040 Adalogger | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 5.0 s | 13.1 s | 163 ms |
Adafruit Qt-Py RP2040 | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 8.9 s | 22.3 s | 174 ms |
Seed Studio XIAO RP2040 | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 9.2 s | 23.1 s | 174 ms |
Raspberry Pi Pico 2 | RP2350 | 150 MHz | 47250 | All | 256 | 5.0 ms | 3.8 s | 10.7 s | 98 ms |
Maxim MAX32620FTHR | MAX32620 | 96 MHz | 24576 | * | 256 | 8.7 ms | 6.7 s | 14.7 s | 179 ms |
Teensy 4.0 and 4.1 | iMXRT1062 | 600 MHz | 60000 | All | 256 | 1.2 ms | 0.4 s | 0.98 s | 12 ms |
Arduino UNO R4 Minima | RA4M1 | 48 MHz | 2032 | 1024 | 128 | 0.9 ms | 10.7 s | 22.6 s | 335 ms |
Arduino UNO R4 WiFi | RA4M1 | 48 MHz | 1610 | 1024 | 128 | 0.8 ms | 11.0 s | 22.8 s | 344 ms |
ESP version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 | FFT |
Adafruit ESP32 Feather | ESP32 | 240 MHz | 9216 | All | † | 0.4 ms | 8.1 s | 22.1 s | 242 ms |
Adafruit ESP32 Feather V2 | ESP32 | 240 MHz | 260000 | All | † | 168 ms | 8.0 s | 21.1 s | 242 ms |
Adafruit QT Py ESP32 Pico | ESP32 | 240 MHz | 260000 | All | † | 156 ms | 7.9 s | 20.9 s | 90 ms |
Adafruit ESP32-S2 Feather | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
Adafruit ESP32-S2 QT-Py | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
Unexpected Maker Feather S2 | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
ESP32-S2-Soala-1 WROVER | ESP32-S2 | 240 MHz | 260000 | All | † | 137 ms | 5.4 s | 13.6 s | 169 ms |
ESP32-S2-Soala-1 WROOM | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 3.8 s | 10.0 s | 169 ms |
ESP32-C3-DevKitM-1 | ESP32-C3 | 160 MHz | 9216 | All | † | 0.9 ms | 7.8 s | 20.3 s | 235 ms |
ESP32-S3-DevKitM-1 | ESP32-S3 | 240 MHz | 22000 | All | † | 0.9 ms | 6.1 s | 16.0 s | 180 ms |
RISC-V version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 | FFT |
Sipeed MAiX RISC-V boards | K210 | 400 MHz | 500000 | * | 512 | 44 ms | 1.0 s | 2.3 s | 28 ms |
Key
Objects gives the number of Lisp objects of storage available, each equivalent to 4 bytes on the 8/16-bit platforms and 8 bytes on the 32-bit platforms.
Image gives the number of objects that can be saved to non-volatile storage using save-image, or All which means that the whole workspace can be saved.
* These platforms don't provide non-volatile storage for saving an image, but you can save images to an SD card with a suitable interface.
Code gives the number of bytes of machine code that can be stored by the assembler, by default, on AVR, ARM, or RISC-V platforms.
† means not available.
GC time gives the time taken for a garbage collection.
Tak gives the time taken to calculate the recursive integer function (tak 18 12 6); see Benchmarks.
Q2 gives the time taken to calculate the recursive integer function (q2 7 8); see Benchmarks.
FFT (32-bit platforms only) gives the time taken to run the floating-point 32-point fft benchmark; see Fast Fourier Transform.