Zur Kennzeichnung der Rechenleistung der verschiedenen Arduinos habe ich das schon in der Vergangenheit verwendete „Sieve of Erastothenes“ als Benchmark herangezogen.
Das „Sieve of Erastothenes“ ist ein Standard-Benchmark, der verwendet wird, um die relative Geschwindigkeit von verschiedenen Computern zu bestimmen oder das Laufzeitverhalten von Code, der mit unterschiedlichen Compilern erzeugt wurde, zu vergleichen. Siehe hierzu auch https://rosettacode.org/wiki/Sieve_of_Eratosthenes.
Heute verwende ich neben diesem Benchmark vor allem Dhrystone, Wheatstone und CoreMark zum Test.
Das Dhrystone-Benchmark-Programm (http://labs.isee.biz/index.php/Dhrystone_MIPS_2.1) hat sich zu einem beliebten Benchmark für die Messung der CPU-/Compiler-Leistung entwickelt, insbesondere im Bereich Minicomputer, Workstations, PCs und Mikroprozessoren. Es erfüllt offenbar die Notwendigkeit eines einfach zu verwendenden ganzzahligen Benchmarks. Es gibt eine erste Leistungsangabe, die aussagekräftiger ist als MIPS-Zahlen, die in ihrer wörtlichen Bedeutung (Millionen Anweisungen pro Sekunde) nicht für verschiedene Befehlssätze (z. B. RISC vs. CISC) verwendet werden können. Mit der zunehmenden Verwendung des Benchmarks erschien es notwendig, den Benchmark zu überdenken und zu prüfen, ob er diese Funktion noch erfüllen kann. Version 2 von Dhrystone ist das Ergebnis einer solchen Neubewertung.
Whetstone ist ein Benchmark-Test, der versucht, die Geschwindigkeit und Effizienz zu messen, mit der ein Computer Gleitkommaoperationen ausführt. Das Testergebnis wird in Einheiten angegeben, die als KiloWhetstone pro Sekunde oder KWIPS bezeichnet werden.
Der Whetstone ist ein synthetischer Benchmark zur Messung des Verhaltens wissenschaftlicher Programme. Es enthält mehrere Module, die eine Mischung von Operationen darstellen sollen, die typischerweise in wissenschaftlichen Anwendungen ausgeführt werden. Eine Vielzahl von C-Funktionen, einschließlich sin, cos, sqrt, exp und log, werden ebenso verwendet wie mathematische Ganzzahl- und Gleitkommaoperationen, Arrayzugriffe, bedingte Verzweigungen und Prozeduraufrufe. Das Hauptziel dieses Benchmarks ist es, die Leistung sowohl der Ganzzahl- als auch der Gleitkomma-Arithmetik zu messen (http://www.keil.com/benchmarks/whetstone.asp).
IOBench ist ein einfacher Benchmark für Arduinos und kompatible Mikrocontroller. Geschrieben von Gareth Halfacree (freelance@halfacree.co.uk). Durch wiederholte digitale Read- & Write-Instruktionen wird die relative IO-Performance gemessen.
Der CoreMark® von EEMBC (https://www.eembc.org/coremark/) ist ein Benchmark, der die Leistung von Mikrocontrollern (MCUs) und Zentraleinheiten (CPUs) misst, die in eingebetteten Systemen verwendet werden. Coremark ersetzt den veralteten Dhrystone-Benchmark und enthält Implementierungen der folgenden Algorithmen: Listenverarbeitung (Suchen und Sortieren), Matrixmanipulation (allgemeine Matrixoperationen), Zustandsmaschine (Feststellen, ob ein Eingabestream gültige Zahlen enthält) und CRC (zyklische Redundanzprüfung). Es kann auf Geräten von 8-Bit-Mikrocontrollern bis zu 64-Bit-Mikroprozessoren ausgeführt werden.
8-Bit Mikrocontroller
Board | Arduino Uno | Arduino Uno WiFi Rev 2 | LGT8F328P AZ-Delivery |
CPU | ATmega328p | ATmega4809 | LGT8F328P |
Clock | 16 MHz | 16 MHz | 32 MHz |
Sieve Runtime | 14012 ms | 13375 ms | 6100 ms |
Dhrystones/s | 17229.86 | 18306.66 | 47125.88 |
VAX MIPS | 9.81 | 10.42 | 26.82 |
Whetstone | 12961 ms | ||
MIPS | 7.72 | ||
Coremark | 8.2 | ||
CoreMark/MHz | 0.5 | ||
IOBench Read | 256.47 kHz | ||
IOBench Write | 155.9 kHz | ||
IOBench Toggle | 109.4 kHz |
32-Bit Cortex-Mx Mikrocontroller
Board | Seeeduino XIAO | Heltec CubeCell | Raspberry Pi Pico RP2040 | STM32 Bluepill | Arduino Due | Arduino Nano 33 BLE | STM32L412 | Seeeduino Wio Terminal | Arduino Portenta H7 | Teensy 4.0 |
CPU | SAMD21 Cortex-M0+ | PS 4000S Cortex-M0+ | Cortex-M0+ | Cortex M3 | AT91SAM3X8E Cortex-M3 | nRF52840 Cortex-M4 | Cortex-M4 | ATSAMD51P19 Cortex-M4F | STM32H747 Cortex-M7 | NXP iMXRT1062 Cortex-M7 |
Clock | 48 MHz | 48 MHz | 125 MHz | 72 MHz | 84 MHz | 64 MHz | 80 MHz | 120 MHz | 480 MHz | 600 MHz |
Sieve Runtime | – | 4857 ms | 1339 ms | 3867 ms | 220 ms | 104 ms | ||||
Dhrystones/s | 41589.93 | 44982.14 | 134727.80 | 78638.39 | – | |||||
VAX MIPS | 23.67 | 25.6 | 76.68 | 44.76 | – | |||||
Whetstone | – | 45105 ms | 618 ms | 12888 ms | 1999 ms | 59 ms | ||||
MIPS | – | 2.22 | 16.62 | 7.76 | 50.03 | 1694.92 | ||||
Coremark | 56.47 | 54.49 | 136.73 | 89.19 | 94.95 | 106.37 | 143.48 | 211.49 | 1132.57 | 2313.57 |
CoreMark/MHz | 1.2 | 1.135 | 1.09 | 1.239 | 1.1 | 1.662 | 1.793 | 1.762 | 2.36 | 3.9 |
IOBench Read | – | 1241.88 kHz | 650.41 kHz | – | ||||||
IOBench Write | – | 861.87 kHz | 419.51 kHz | – | ||||||
IOBench Toggle | – | – | 227.3 kHz | – |
32-Bit ESP Mikrocontroller
Board | Leduina | ESPduino-32 | ESP32-S2-Saola-1M | ESP32-C3 |
CPU | ESP8266EX | ESP-WROOM-32 | ESP32-S2-WROVER | ESP32-C3-DevKitM-1 RV32IMC |
Clock | 80 MHz | 240 MHz | 240 MHz | 160 MHz |
Sieve Runtime | 2189 ms | 805 ms | 632 ms | 1746 ms |
Dhrystones/s | % | 308997.7 | 388089.23 | 302811.73 |
VAX MIPS | % | 175.87 | 220.88 | 172.35 |
Whetstone | % | 744 ms | 1883 ms | 8662 ms |
MIPS | % | 134.41 | 52.13 | 11.54 |
Coremark | % | 336.36 | 451.57 | 400 *) 253.69 |
CoreMark/MHz | % | 1.4 | 1.88 | 2.5 *) 1.59 |
IOBench Read | % | 5359.1 kHz | % | |
IOBench Write | % | 7468.48 kHz | % | |
IOBench Toggle | 200 kHz | % | % |
*) https://hackaday.com/2021/02/08/hands-on-the-risc-v-esp32-c3-will-be-your-new-esp8266/
RISC-V Mikrocontroller
Board | Maixduino | Longan Nano | ESP32-C3 | |
CPU | K210 RV64IMAFDC | GD32VF103VBT6 RV32IMAC | ESP32-C3-DevKitM-1 RV32IMC | |
Clock | 400 MHz | 108 MHz | 160 MHz | |
Sieve Runtime | 329 ms | 3800 ms | 1746 ms | |
Dhrystones/s | 161193 | 302811.73 | ||
VAX MIPS | 91 | 172.35 | ||
Whetstone | 336 ms | 8662 ms | ||
MIPS | 297.62 | 11.54 | ||
Coremark | 695.5 | 400 *) 253.69 | ||
CoreMark/MHz | 1.7 | 2.5 *) 1.59 | ||
IOBench Read | ||||
IOBench Write | ||||
IOBench Toggle |
2023-02-08/ck