Arduino_prime_number_benchmark
: 12 wrz 2021, 18:37
Fajny benchmark znalazłem: https://github.com/SuperUserNameMan/Ard ... _benchmark
Nie będę ukrywał, że wybrałem go złośliwie i z premedytacją, co nie zmienia faktu że daje prawdziwe wyniki.
Otóż są programy, których prędkość wykonania jest proporcjonalna do częstotliwości zegara, na przykład miganie LED-em, ale są też takie, które wykonują skomplikowane obliczenia i ważne są wtedy inne cechy procesora, jak długość słowa, lista rozkazów, czy obecność koprocesora...
Tutaj mamy taki właśnie przykład, procesor szuka kolejnych liczb pierwszych, czyli dużo liczy.
Oczywiście należy się spodziewać że 32-bitowy procesor będzie kilka razy szybszy od 8-bitowego, ale wyniki mnie zaskoczyły.
Do testu poszły trzy mikroprocesory z najniższej półki, to znaczy takie, z którymi płytki można kupić na Aliexpress poniżej 20 PLN z wliczoną dostawą.
Były to ESP32-WROOM-32D, STM32F401CCU6 i ATMega328p. Mam jeszcze nowość, LGT8F328P, ale sobie odpuściłem, bo to tylko dwa razy szybsza ATMega, więc można sobie prosto przeliczyć.
Na wszystkie procesory program był kompilowany w środowisku ArduinoIDE.
Zwykle przy przenoszeniu na inny sprzęt wychodzą różne jaja, szczególnie niekompatybilność bibliotek, ale ten program okazał się chlubnym wyjątkiem i kompilował się bez oporów.
Wprowadziłem tylko jedną zmianę, zamiast 10 tysięcy kazałem mu szukać 30 tysięcy liczb pierwszych, żeby się nie wykonywał zbyt szybko.
Jak już wspomniałem, wyniki mnie zaskoczyły, bo spodziewałem się dużej różnicy, ale nie przepaści.
Refleksję polecam szczególnie atmegowym sekciarzom, którzy do kropli krwi ostatniej walczyć będą o udowodnienie, że na ATMega328p i Bascomie da się zrobić dowolnie wszystko...
================================
* ESP32-WROOM-32D
F_CPU value: 240000000
Clock cycles per µsecond: 240
Prime calculation starting.
Found 30000 primes in 3 seconds
Highest prime found was: 350377
================================
* STM32F401CCU6
F_CPU value: 84000000
Clock cycles per µsecond: 84
Prime calculation starting.
Found 30000 primes in 7 seconds
Highest prime found was: 350377
================================
* ATMega328p
F_CPU value: 16000000
Clock cycles per µsecond: 16
CLKPR : 0 -> 0
Prime calculation starting.
Found 30000 primes in 641 seconds
Highest prime found was: 350377
=================================
Nie będę ukrywał, że wybrałem go złośliwie i z premedytacją, co nie zmienia faktu że daje prawdziwe wyniki.
Otóż są programy, których prędkość wykonania jest proporcjonalna do częstotliwości zegara, na przykład miganie LED-em, ale są też takie, które wykonują skomplikowane obliczenia i ważne są wtedy inne cechy procesora, jak długość słowa, lista rozkazów, czy obecność koprocesora...
Tutaj mamy taki właśnie przykład, procesor szuka kolejnych liczb pierwszych, czyli dużo liczy.
Oczywiście należy się spodziewać że 32-bitowy procesor będzie kilka razy szybszy od 8-bitowego, ale wyniki mnie zaskoczyły.
Do testu poszły trzy mikroprocesory z najniższej półki, to znaczy takie, z którymi płytki można kupić na Aliexpress poniżej 20 PLN z wliczoną dostawą.
Były to ESP32-WROOM-32D, STM32F401CCU6 i ATMega328p. Mam jeszcze nowość, LGT8F328P, ale sobie odpuściłem, bo to tylko dwa razy szybsza ATMega, więc można sobie prosto przeliczyć.
Na wszystkie procesory program był kompilowany w środowisku ArduinoIDE.
Zwykle przy przenoszeniu na inny sprzęt wychodzą różne jaja, szczególnie niekompatybilność bibliotek, ale ten program okazał się chlubnym wyjątkiem i kompilował się bez oporów.
Wprowadziłem tylko jedną zmianę, zamiast 10 tysięcy kazałem mu szukać 30 tysięcy liczb pierwszych, żeby się nie wykonywał zbyt szybko.
Jak już wspomniałem, wyniki mnie zaskoczyły, bo spodziewałem się dużej różnicy, ale nie przepaści.
Refleksję polecam szczególnie atmegowym sekciarzom, którzy do kropli krwi ostatniej walczyć będą o udowodnienie, że na ATMega328p i Bascomie da się zrobić dowolnie wszystko...
================================
* ESP32-WROOM-32D
F_CPU value: 240000000
Clock cycles per µsecond: 240
Prime calculation starting.
Found 30000 primes in 3 seconds
Highest prime found was: 350377
================================
* STM32F401CCU6
F_CPU value: 84000000
Clock cycles per µsecond: 84
Prime calculation starting.
Found 30000 primes in 7 seconds
Highest prime found was: 350377
================================
* ATMega328p
F_CPU value: 16000000
Clock cycles per µsecond: 16
CLKPR : 0 -> 0
Prime calculation starting.
Found 30000 primes in 641 seconds
Highest prime found was: 350377
=================================