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 | Current | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Uno | ATmega328 | 16 MHz | 54 mA | 320 | 256 | † | 0.5 ms | 64.6 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 s | |
ATmega4809 Curiosity Nano | ATmega4809 | 20 MHz | 1066 | 64 | † | 1.4 ms | 49 s | 112 s |
AVR version
Platform | Processor | Clock | Current | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Mega 2560 | ATmega2560 | 16 MHz | 90 mA | 1344 | 1024 | † | 2.1 ms | 52.9 s | † |
Lisp Badge | ATmega1284 | 16 MHz | 2944 | All | 96 | 4.7 ms | 54.6 s | 109 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 | 22 mA | 2920 | All | 96 | 2.6 ms | 33.1 s | 69.3 s |
AVR128DB48 Curiosity Nano | AVR128DB48 | 24 MHz | 22 mA | 2920 | All | 96 | 2.6 ms | 33.1 s | 68.0 s |
ARM version
Platform | Processor | Clock | Current | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Zero | ATSAMD21 | 48 MHz | 13 mA | 2500 | All | 128 | 2.1 ms | 11.4 s | 24.3 s |
Arduino MKRZero | ATSAMD21 | 48 MHz | 23 mA | 2640 | All | 128 | 2.2 ms | 14.2 s | 32.8 s |
Adafruit Gemma M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 2.4 ms | 14.9 s | 33.8 s | |
Adafruit QT-Py SAMD21 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | |
Adafruit ItsyBitsy M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | |
Adafruit Feather M0 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 1.3 ms | 14.9 s | 34.3 s | |
Adafruit Neo Trinkey | ATSAMD21 | 48 MHz | 14 mA | 2816 | All | 128 | 1.2 ms | 13.3 s | 29.5 s |
Seeed Studio XIAO SAMD21 | ATSAMD21 | 48 MHz | 2816 | All | 128 | 2.4 ms | 14 s | 41 s | |
Adafruit Grand Central M4 | ATSAMD51 | 120 MHz | 33 mA | 28800 | All | 256 | 4.6 ms | 3.9 s | 8.6 s |
Adafruit Metro M4 | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 4.4 s | 9.8 s | |
Adafruit ItsyBitsy M4 | ATSAMD51 | 120 MHz | 20608 | All | 256 | 3.3 ms | 4.4 s | 9.9 s | |
Adafruit Feather M4 | ATSAMD51 | 120 MHz | 24 mA | 20608 | All | 256 | 3.3 ms | 3.8 s | 8.6 s |
Adafruit PyGamer/PyBadge | ATSAMD51 | 120 MHz | 20608 | All | 256 | 3.3 ms | 4.2 s | 10.2 s | |
Seeed Studio Wio Terminal | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 5.3 s | 13.0 s | |
BBC Micro:bit | nRF51822 | 16 MHz | 21 mA | 1344 | * | 64 | 2.2 ms | 36.8 s | 79.5 s |
Calliope mini | nRF51822 | 16 MHz | 3328 | * | 64 | 5.3 ms | 34 s | 82 s | |
BBC Micro:bit V2 | nRF52833 | 64 MHz | 12927 | * | 128 | 6.7 ms | 8.6 s | 18.9 s | |
Adafruit CLUE | nRF52840 | 64 MHz | 21120 | All | 256 | 7.8 ms | 12.7 s | 31.8 s | |
Adafruit ItsyBitsy nRF52840 | nRF52840 | 64 MHz | 21120 | All | 256 | 6.8 ms | 12.6 s | 31.4 s | |
Seeed Studio XIAO nRF52840 | nRF52840 | 64 MHz | 11 mA | 21120 | All | 256 | 5.9 ms | 10.7 s | 26.3 s |
Circuit Playground Bluefruit | nRF52840 | 64 MHz | 19 mA | 21120 | All | 256 | 5.9 ms | 10.6 s | 26.7 s |
Raspberry Pi Pico | RP2040 | 133 MHz | 24 mA | 23000 | All | 256 | 4.0 ms | 5.9 s | 14.6 s |
Raspberry Pi Pico W | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 4.8 s | 12.9 s | |
Adafruit Feather RP2040 | RP2040 | 133 MHz | 23000 | All | 256 | 4.0 ms | 5.0 s | 13.1 s | |
Feather RP2040 Adalogger | RP2040 | 133 MHz | 33 mA | 23000 | All | 256 | 4.0 ms | 6.1 s | 15.0 s |
Adafruit Qt-Py RP2040 | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 8.9 s | 22.3 s | |
Seed Studio XIAO RP2040 | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 9.2 s | 23.1 s | |
Raspberry Pi Pico 2 ARM Raspberry Pi Pico 2 RISC-V |
RP2350 RP2350 |
150 MHz 150 MHz |
20 mA 19 mA |
47000 42500 |
All All |
256 256 |
5.0 ms 4.3 ms |
5.0 s 3.9 s |
12.3 s 10.4 s |
Pimoroni Tiny 2350 ARM Pimoroni Tiny 2350 RISC-V |
RP2350 RP2350 |
150 MHz 150 MHz |
23 mA 23 mA |
46500 42500 |
All All |
256 256 |
5.0 ms 4.3 ms |
4.5 s 5.0 s |
11.5 s 11.8 s |
Pimoroni Pico Plus 2 ARM Pimoroni Pico Plus 2 RISC-V Pimoroni Pico Plus 2 ARM ¶ Pimoroni Pico Plus 2 RISC-V ¶ |
RP2350 RP2350 RP2350 RP2350 |
150 MHz 150 MHz 150 MHz 150 MHz |
21 mA 20 mA 24 mA 23 mA |
46500 42000 1000000 1000000 |
All All All All |
256 256 256 256 |
5.0 ms 4.3 ms 1.0 s 1.0 s |
3.8 s 3.6 s 7.8 s 7.8 s |
9.2 s 8.3 s 18.7 s 17.2 s |
Maxim MAX32620FTHR | MAX32620 | 96 MHz | 6 mA | 24704 | * | 256 | 5.4 ms | 6.1 s | 13.5 s |
Teensy 4.0 | iMXRT1062 | 600 MHz | 101 mA | 60000 | All | 256 | 1.3 ms | 0.4 s | 0.87 s |
Teensy 4.1 | iMXRT1062 | 600 MHz | 110 mA | 60000 | All | 256 | 1.3 ms | 0.4 s | 0.88 s |
Arduino UNO R4 Minima | RA4M1 | 48 MHz | 34 mA | 2032 | 1024 | 128 | 0.9 ms | 10.1 s | 22.5 s |
Arduino UNO R4 WiFi | RA4M1 | 48 MHz | 1610 | 1024 | 128 | 0.8 ms | 11.0 s | 22.8 s |
ESP version
Platform | Processor | Clock | Current | Objects | Image | Code | GC time | Tak | Q2 |
Adafruit ESP32 Feather | ESP32 | 240 MHz | 9216 | All | † | 0.4 ms | 8.1 s | 22.1 s | |
Adafruit ESP32 Feather V2 Adafruit ESP32 Feather V2 ¶ |
ESP32 ESP32 |
240 MHz 240 MHz |
60 mA 63 mA |
9500 250000 |
All All |
† † |
0.4 ms 156 ms |
10 s 8.9 s |
26.0 s 21.9 s |
Adafruit QT Py ESP32 Pico | ESP32 | 240 MHz | 260000 | All | † | 156 ms | 7.9 s | 20.9 s | |
Muse Lab ESP32 Key | ESP32 | 240 MHz | 59 mA | 9500 | All | † | 0.5 ms | 6.3 s | 16.8 s |
Adafruit ESP32-S2 Feather Adafruit ESP32-S2 Feather ¶ |
ESP32-S2 ESP32-S2 |
240 MHz 240 MHz |
45 mA 47 mA |
6500 250000 |
All All |
† † |
0.4 ms 132 ms |
2.5 s 4.1 s |
5.4 s 8.6 s |
Adafruit ESP32-S2 TFT Feather Adafruit ESP32-S2 TFT Feather ¶ |
ESP32-S2 ESP32-S2 |
240 MHz 240 MHz |
48 mA 54 mA |
6500 250000 |
All All |
† † |
0.4 ms 131 ms |
2.4 s 4.2 s |
5.2 s 9.1 s |
Adafruit ESP32-S2 QT-Py | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 2.7 s | 6.0 s | |
Unexpected Maker Feather S2 | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 2.7 s | 6.0 s | |
ESP32-S2-Soala-1 WROVER | ESP32-S2 | 240 MHz | 260000 | All | † | 137 ms | 5.4 s | 13.6 s | |
ESP32-S2-Soala-1 WROOM | ESP32-S2 | 240 MHz | 8160 | All | † | 0.6 ms | 3.8 s | 10.0 s | |
Muse Lab ESP32-S2 Key | ESP32-S2 | 240 MHz | 50 mA | 8160 | All | † | 0.6 ms | 2.4 s | 5.8 s |
ESP32-C3-DevKitM-1 | ESP32-C3 | 160 MHz | 39 mA | 9216 | All | † | 0.9 ms | 4.8 s | 12.1 s |
ESP32-S3-DevKitM-1 | ESP32-S3 | 240 MHz | 73 mA | 25000 | All | † | 1.1 ms | 5.1 s | 13.5 s |
LilyGo T-Deck LilyGo T-Deck ¶ |
ESP32-S3 ESP32-S3 |
240 MHz 240 MHz |
145 mA 145 mA |
25000 1000000 |
All All |
† † |
1.1 ms 230 ms |
2.1 s 3.3 s |
4.9 s 6.9 s |
M5Stack Cardputer | ESP32-S3 | 240 MHz | 86 mA | 23750 | All | † | 1.0 ms | 2.1 s | 5.3 s |
RISC-V version
Platform | Processor | Clock | Current | Objects | Image | Code | GC time | Tak | Q2 |
Sipeed Maixduino | K210 | 400 MHz | 145 mA | 500000 | * | 512 | 44 ms | 1.5 s | 3.1 s |
Sipeed MAiX BiT | K210 | 400 MHz | 91 mA | 500000 | * | 512 | 44 ms | 1.5 s | 3.0 s |
Key
Current gives the active current consumption at 5V when powered from the USB port and running a benchmark.
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.
¶ shows with PSRAM enabled, where available.
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.