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
=================================
Arduino_prime_number_benchmark
-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 2437
- Rejestracja: 29 lis 2015, 00:38
- Lokalizacja: Bielsko-Biała
Re: Arduino_prime_number_benchmark
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
Brawo.
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

-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 3052
- Rejestracja: 21 sty 2020, 17:48
- Lokalizacja: Toruń miasto Tadeusza R
Re: Arduino_prime_number_benchmark
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 .Avalyah pisze:Udało Wam się zmarnować trochę czasu, żeby udowodnić dokładnie nic
Mam wyrypane na wszelkiej maści proroków ,mędrców i wszystkich którzy stawiają się ponad innymi ,i tak ich zjedzą robaki
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 9320
- Rejestracja: 26 lut 2011, 23:24
- Lokalizacja: mazowieckie
Re: Arduino_prime_number_benchmark
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.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 3052
- Rejestracja: 21 sty 2020, 17:48
- Lokalizacja: Toruń miasto Tadeusza R
Re: Arduino_prime_number_benchmark
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 .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
Mam wyrypane na wszelkiej maści proroków ,mędrców i wszystkich którzy stawiają się ponad innymi ,i tak ich zjedzą robaki
-
- Lider FORUM (min. 2000)
- Posty w temacie: 2
- Posty: 2437
- Rejestracja: 29 lis 2015, 00:38
- Lokalizacja: Bielsko-Biała
Re: Arduino_prime_number_benchmark
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.