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 ESP8266 or ESP32-based boards are similar in performance to the Adafruit ESP8266 Feather or Adafruit ESP32 Feather respectively.
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 | 1343 | 1024 | † | 2.1 ms | 53.8 s | 110.7 s |
Lisp Badge | ATmega1284 | 16 MHz | 2944 | All | 96 | 4.7 ms | 54.6 s | 109.2 s |
AVR128DA48 Curiosity Nano | AVR128DA48 | 24 MHz | 2919 | All | 96 | 2.6 ms | 33.1 s | 66.7 s |
AVR128DB48 Curiosity Nano | AVR128DB48 | 24 MHz | 2919 | 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 | 2815 | All | 128 | 2.4 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit QT-Py SAMD21 | ATSAMD21 | 48 MHz | 2815 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit ItsyBitsy M0 | ATSAMD21 | 48 MHz | 2815 | All | 128 | 1.3 ms | 14.9 s | 33.8 s | 445 ms |
Adafruit Feather M0 | ATSAMD21 | 48 MHz | 2815 | All | 128 | 1.3 ms | 14.9 s | 34.3 s | 445 ms |
Adafruit Neo Trinkey | ATSAMD21 | 48 MHz | 2815 | All | 128 | 1.2 ms | 15.2 s | 35.6 s | 445 ms |
Seed Studio XIAO SAMD21 | ATSAMD21 | 48 MHz | 2815 | All | 128 | 2.4 ms | 14 s | 41 s | 445 ms |
Adafruit Metro M4 Grand Central | ATSAMD51 | 120 MHz | 28672 | All | 256 | 4.6 ms | 4.2 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 | 20607 | All | 256 | 3.3 ms | 4.4 s | 9.9 s | 121 ms |
Adafruit Feather M4 | ATSAMD51 | 120 MHz | 20607 | All | 256 | 3.3 ms | 4.5 s | 10.2 s | 121 ms |
Adafruit PyGamer and PyBadge | ATSAMD51 | 120 MHz | 20607 | All | 256 | 3.3 ms | 4.4 s | 10.2 s | 121 ms |
Seeed Studio Wio Terminal | ATSAMD51 | 120 MHz | 20479 | All | 256 | 3.3 ms | 5.3 s | 13.0 s | 121 ms |
BBC Micro:bit | nRF51822 | 16 MHz | 1343 | * | 64 | 2.2 ms | 36.7 s | 77.9 s | |
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 | 21119 | All | 256 | 7.8 ms | 12.7 s | 31.8 s | 199 ms |
Adafruit ItsyBitsy nRF52840 | nRF52840 | 64 MHz | 21119 | All | 256 | 6.8 ms | 12.6 s | 31.4 s | 199 ms |
Seeed Studio XIAO nRF52840 | nRF52840 | 64 MHz | 21119 | All | 256 | 6.8 ms | 12.6 s | 31.5 s | 199 ms |
Raspberry Pi Pico | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 7.2 s | 17.7 s | 174 ms |
Raspberry Pi Pico W | RP2040 | 133 MHz | 22911 | All | 256 | 3.7 ms | 7.2 s | 17.7 s | 174 ms |
Adafruit Feather RP2040 | RP2040 | 133 MHz | 22912 | All | 256 | 4.0 ms | 5.6 s | 13.0 s | 174 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 |
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 |
ESP version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 | FFT |
Adafruit Huzzah Feather | ESP8266 | 160 MHz | 3927 | 512 | † | 0.8 ms | 13.3 s | 209 ms | |
Adafruit ESP32 Feather | ESP32 | 240 MHz | 9215 | All | † | 0.4 ms | 8.1 s | 21.2 s | 242 ms |
Adafruit ESP32-S2 Feather | ESP32-S2 | 240 MHz | 9215 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
Adafruit ESP32-S2 QT-Py | ESP32-S2 | 240 MHz | 9215 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
Unexpected Maker Feather S2 | ESP32-S2 | 240 MHz | 9215 | All | † | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
ESP32-S2-Saola-1 | ESP32-S2 | 240 MHz | 9215 | All | † | 0.6 ms | 5.7 s | 14.9 s | 169 ms |
ESP32-C3-DevKitM-1 | ESP32-C3 | 160 MHz | 9215 | All | † | 0.9 ms | 7.8 s | 20.3 s | 235 ms |
ESP32-S3-DevKitM-1 | ESP32-S3 | 240 MHz | 21999 | 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 | 79999 | * | 512 | 6.5 ms | 1.1 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.