Arduino_prime_number_benchmark

Dyskusje o programowaniu mikroprocesorów.
Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 7873
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Arduino_prime_number_benchmark

#1

Post napisał: tuxcnc » 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

=================================




Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 2364
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Arduino_prime_number_benchmark

#2

Post napisał: Avalyah » 12 wrz 2021, 19:13

Masz rację. Jak będę chciał obliczyć 30 tysięcy kolejnych liczb pierwszych w czasie poniżej 10 sekund to na pewno wybiorę stma. Dzięki za przeprowadzenie testów.

Myślę, że można z powodzeniem stwierdzić, że takie zastosowanie zostało użyte w całej historii wszechświata tylko dwa razy - przez SuperUserNameMan i Ciebie. Udało Wam się zmarnować trochę czasu, żeby udowodnić dokładnie nic :mrgreen: Brawo.


tristar0
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 2847
Rejestracja: 21 sty 2020, 17:48
Lokalizacja: Toruń miasto Tadeusza R

Re: Arduino_prime_number_benchmark

#3

Post napisał: tristar0 » 12 wrz 2021, 19:36

Avalyah pisze:Udało Wam się zmarnować trochę czasu, żeby udowodnić dokładnie nic
ależ bez przesady udowodnił tylko że procek z szybszym taktowaniem jest szybszy ale tego to już chyba w szkole podstawowej uczą ale ten etap edukacji tux pominął bo był już za mądry w dzieciństwie .
Mam wyrypane na wszelkiej maści proroków ,mędrców i wszystkich którzy stawiają się ponad innymi ,i tak ich zjedzą robaki

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 7873
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Arduino_prime_number_benchmark

#4

Post napisał: tuxcnc » 12 wrz 2021, 19:42

Avalyah pisze:
12 wrz 2021, 19:13
takie zastosowanie zostało użyte w całej historii wszechświata tylko dwa razy
Zupełnie możliwe, bo nikt przy zdrowych zmysłach nie będzie używał mikrokontrolera do wyznaczania liczb pierwszych.
Jednak takie testy dają ogólne pojęcie o możliwościach danego sprzętu, a konieczność przeliczenia danych zanim nadejdą nowe zdarza się dość często.
Myślę że warto było zmarnować trochę czasu na stwierdzenie że procesor droższy o 5 PLN potrafi coś obliczyć dwieście razy szybciej, co zapewne nie jest faktem powszechnie znanym.


tristar0
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 2847
Rejestracja: 21 sty 2020, 17:48
Lokalizacja: Toruń miasto Tadeusza R

Re: Arduino_prime_number_benchmark

#5

Post napisał: tristar0 » 12 wrz 2021, 19:50

tuxcnc pisze:Myślę że warto było zmarnować trochę czasu na stwierdzenie że procesor droższy o 5 PLN potrafi coś obliczyć dwieście razy szybciej, co zapewne nie jest faktem powszechnie znanym
nie trzeba otwierać otwartych drzwi żeby wiedzieć że procek 16Mhz przelicza wolniej niż procek 100Mhz jeśli to jednak jest dla ciebie odkrycie to brawo że to w końcu po paru godzinach zmarnowanych doszedłeś do takiej konkluzji .
Mam wyrypane na wszelkiej maści proroków ,mędrców i wszystkich którzy stawiają się ponad innymi ,i tak ich zjedzą robaki


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 2364
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Arduino_prime_number_benchmark

#6

Post napisał: Avalyah » 12 wrz 2021, 20:43

tuxcnc pisze:Jednak takie testy dają ogólne pojęcie o możliwościach danego sprzętu

Wiesz, to prawda. Tylko popatrz po wynikach z tego testu kolesia. Dla procków 8 bitowych masz w zasadzie liniową zależność od prędkości taktowania (plus minus kilka sekund), procek 32 bitowy, dodatkowo z wyższym taktowaniem liczy znacznie szybciej, bo lepiej radzi sobie z liczeniem na wyższym typie. Nie ma tutaj dla nikogo wielkiego zaskoczenia.
tuxcnc pisze:coś obliczyć

No właśnie liczy coś, do tego bezwartościowe. Mikrokontrolerów nie używa się do wykonywania jak największej illości obliczeń w jak najkrótszym czasie, bo do PCta nie ma to podskoku. 99% zastosowań, komercyjnych i nie, wykorzystuje i tak tylko ułamek możliwości obliczeniowych mikroprocesora. Czasem ważne są ramy czasowe i szybsze taktowanie daje tutaj większy komfort. Ale ja procek oceniam nie po tym, jak szybko liczy, tylko:

1. Jakie ma peryferia? Żadna ilość MHz na rdzeniu nie pomoże, jak potrzebuję np. DAC a jego jakiś procek nie ma. Do tego fajne systemy typu DMA, czy system eventów w xmegach.
2. Jakie mam potrzeby? Mój obecny projekt jest na xmedze właśnie. Tak sobie myślałem - a może by się przesiąść na tego stma? Tylko potem zacząłem się zastanawiać, co by mi to dało. I okazuje się, że nic - moja xmega biega na 24Mhz i z wszystkim sobie radzi, a jakby mi tego brakło zawsze mogę podskoczyć do 32. Także tu mam zapas. Peryferia? DAC, DMA, eventy bardzo fajnie upraszczają program i ograniczają ilość komponentów dodatkowych na płytce.
3. Jaka jest ilość dostępnych w internecie informacji? Sam datasheet czy dokumentacja możliwości to jedno. Ale jak milion osób bawi się na tych starych atmegach to nagle okazuje się, że rozwiązania gotowe leżą niemal wszędzie. Nic, tylko wybierać.

Tego przecież nie da się zastąpić jedną kwalifikacją, który procek "lepszy". Co z tego, że teoretycznie szybszy, jak ta szybkość rzadko kiedy jest realnie potrzebna, oprócz specyficznych przypadków.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Arduino, Raspberry pi i inne systemy mikroprocesorowe”