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 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 version of uLisp for each platform:
AVR version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 |
Arduino Uno, Arduino Nano | ATmega328 | 16 MHz | 318 | 256 | * | 0.5 ms | 67.1 s | |
Arduino Mega 2560 | ATmega2560 | 16 MHz | 1214 | 1024 | * | 2.1 ms | 56.1 s | 113.0 s |
Tiny Lisp Computer, Lisp Badge | ATmega1284 | 16 MHz | 2944 | All | 96 | 4.7 ms | 54.6 s | 109.2 s |
Arduino Nano Every | ATmega4809 | 20 MHz | 1066 | 64 | * | 1.4 ms | 53.3 s | 105.4 s |
Curiosity Nano 4809 | ATmega4809 | 20 MHz | 1066 | 64 | * | 1.4 ms | 49 s | 112 s |
Curiosity Nano AVR128DA48 | AVR128DA48 | 24 MHz | 2920 | All | 96 | 2.6 ms | 34.8 s | 68.6 s |
Curiosity Nano AVR128DB48 | AVR128DB48 | 24 MHz | 2920 | All | 96 | 2.6 ms | 34.8 s | 68.6 s |
ARM version
Platform | Processor | Clock | Objects | Image | Code | GC time | Tak | Q2 | FFT |
Arduino Zero | ATSAMD21 | 48 MHz | 2640 | All | 128 | 2.4 ms | 12 s | 51 s | 348 ms |
Arduino MKRZero | ATSAMD21 | 48 MHz | 2640 | All | 128 | 2.4 ms | 18.1 s | 42.8 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 | 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 | 2.4 ms | 14 s | 41 s | 445 ms |
Seeeduino XIAO | ATSAMD21 | 48 MHz | 2816 | 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 | 20480 | All | 256 | 3.3 ms | 4.4 s | 9.8 s | 121 ms |
Adafruit Feather M4 | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 4.4 s | 9.8 s | 121 ms |
Adafruit PyGamer/PyBadge | ATSAMD51 | 120 MHz | 20480 | All | 256 | 3.3 ms | 4.4 s | 9.8 s | 121 ms |
RP2040 boards | RP2040 | 125 MHz | 22912 | All | 256 | 4.0 ms | 5.6 s | 13.0 s | 174 ms |
Adafruit CLUE | nRF52840 | 64 MHz | 20992 | All | 256 | 5.8 ms | 6.7 s | 17 s | 199 ms |
Adafruit ItsyBitsy nRF52840 | nRF52840 | 64 MHz | 20992 | All | 256 | 5.8 ms | 6.7 s | 17 s | 199 ms |
BBC Micro:bit | nRF51822 | 16 MHz | 1280 | * | 64 | 2.1 ms | 35 s | 85 s | |
BBC Micro:bit V2 | nRF52833 | 64 MHz | 12800 | * | 128 | 6.8 ms | 8.9 s | 18.9 s | 246 ms |
Calliope mini | nRF51822 | 16 MHz | 3328 | * | 64 | 5.3 ms | 34 s | 82 s | 1110 ms |
Maxim MAX32620FTHR | MAX32620 | 96 MHz | 24576 | * | 256 | 8.7 ms | 6.7 s | 14.7 s | 179 ms |
Teensy 4.0/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 |
ESP8266 boards | ESP8266 | 160 MHz | 4000 | 512 | * | 0.4 ms | 13.2 s | 209 ms | |
ESP32 boards | ESP32 | 240 MHz | 9216 | All | * | 0.4 ms | 8.0 s | 21.0 s | 242 ms |
ESP32-S2 boards (USB) | ESP32-S2 | 240 MHz | 9216 | All | * | 0.6 ms | 2.7 s | 6.0 s | 90 ms |
ESP32-S2 boards (UART) | ESP32-S2 | 240 MHz | 9216 | All | * | 0.6 ms | 5.7 s | 14.9 s | 169 ms |
ESP32-C3 boards (UART) | ESP32-C3 | 160 MHz | 9216 | All | * | 0.9 ms | 7.8 s | 20.3 s | 235 ms |
ESP32-S3 boards (UART) | 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 | 80000 | * | 512 | 6.5 ms | 1.1 s | 2.3 s | 28 ms |
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.