Jaki jest przelicznik prędkości dla takiej samej częstotliwości taktowania?
Jak porównać prędkość AVR-a do
Jun 07, 2004
10 Replies
nie tak łatwo. 8051 dzieli częstotliwość oscylatora 12x ale oprócz tego instrukcje mogą potrzebować do wykonania inną ilość cykli zegarowych. więc nie da się chyba powiedzieć, że jeden jest 10,5 x szybszy od drugiego. ale to będzie ten rząd.
PC
Użytkownik Pablo C napisał:
Czyli tak na "oko" AVR z kwarcem 4MHz będzie równoważny 8051 z kwarcem
40MHz?Mon, 07 Jun 2004 18:54:56 +0200, na pl.misc.elektronika, Maksymilian Dutka napisał(a):
Jeszcze zależy jaki weźmiesz '51. Te podstawowe rzeczywiście /12. Ale jest cała masa nowocześniejszych klonów ( Maxim, Cygnal ), które wykorzystują zegar dużo skuteczniej.
Tylko ze sa drozsze od avr ? :-)
J.
Najprostsze porównanie: przy zegarze 12 MHz procesor '51 wykona w ciągu sekundy 1 milion podstawowych instrukcji (takich jak np. NOP) a AVR 12 milionów.
Porównanie bardziej może trafiające: aby przeprowadzić transmisję sprzętowym UARTem na 115200 bps, '51 potrzebuje taktowania zegarem
22,1184 MHz. AVR to samo zrobi już przy zegarze 1,8432 MHz (niektóre ATmegi przy jeszcze 2x wolniejszym taktowaniu po wybraniu specjalnego trybu UARTu).Inna sprawa to sprawność samego asemblera. Jądro AVR zostało "od urodzenia" przewidziane pod język C - jest wiele rejestrów, na których można wykonywać większość operacji arytmetycznych zamiast wydzielonego jednego akumulatora jak w '51. Dobrym przykładem porównania jest odejmowanie pary liczb oraz liczby i stałej (w szybkim algorytmie nie używającym więcej niż kilkunastu zmiennych):
'51 (razem 6 rozkazów po 12 taktów zegara): ; r0 = r0 - r1 mov a,r0 subb a, r1 mov r0, a ; r2 = r2 - 7 mov a, r2 subb a, #7 mov r2, a
AVR (razem 2 rozkazy po 1 takt zegara): ; r16 = r16 - r17 sub r16, r17 ; r18 = r18 - 7 subi r18, 7
Widać wyraźnie, że chociaż w porównaniu zegarów '51 wypada słabiej tylko
12x to w porównaniu czasu wykonania przeciętnego kodu, będzie o wiele gorzej (w powyższym przykładzie 72 vs 2 takty zegara). W praktyce jeżeli chodzi o język C, '51 jest na straconej pozycji także ze względu na jedynie 8-bitowy wskaźnik stosu (kompilator emuluje 16-bitowy wskaźnik stosu dodatkowymi rozkazami) - AVR ma SP 16-bitowy i bez problemu może stos przechowywać w wewn. lub zewn. pamięci RAM. Drugi problem to rejestry wskaźnikowe 16-bitowe wykorzystywane w wielu operacjach blokowych - standardowa '51 ma tylko jeden DPTR (którego można inkrementować, ale już nie dekrementować ;)) a AVR aż 3 (X, Y, Z). Można wymieniać jeszcze długo: mnożenie 8x8 zajmuje na '51 aż 48 taktów zegara, a w AVRach tylko 2 takty. Pominę rozpisywanie się o predekrementacji i postinkrementacji rejestrów wskaźnikowych czy bezpośrednim niebankowanym dostępie do 128KB pamięci programu, bo z tym '51 się nie może równać.Tyle co do reklamy AVRów. :) BTW: Jeszcze lepsze cechy mają procesory ARM, ale o tym już kiedyś pisałem.
Mon, 07 Jun 2004 23:07:41 +0200, na pl.misc.elektronika, J.F. napisał(a):
Jasne :-) Ale to tak dla informacji.
On Tue, 08 Jun 2004 03:13:37 +0200, Adam Dybkowski snipped-for-privacy@amwaw.edu.pl> wrote: [.....]
Niby Cygnale są jednotaktowe i chodzą do 100MHz, ale to i tak niewiele im pomaga w moich - no bo co mi po kości która potrafi wykonać 100 milionów nop-ów na sekundę, a w rzeczywistej aplikacji, ze względu na kiepską architekturę, może być wolniejsza od nowoczesnego uC napędzanego
4-5 razy wolniejszym zegarem.
IMO to "przewidziane pod język C" to jest po prostu marketingowy buzzword; ostatnio chyba dosyć modny. Jeśli procesor ma dobrą architekturę, to będzie wydajny bez względu na język programowania. A jak ma kiepską/przestarzałą (tak jak '51) to i assembler mu nie pomoże.
A tak poza tym to zgadzam się z Tobą w 100%.
No i jeszcze H8. :-)
Regards, /J.D.
Do pelni szczescia dodaj ze avr najszybsze maja 20MHz, a '51 atmel robi do 66MHz [choc standardem jest raczej 12-24MHz].
To akurat niuans wynikajacy z budowy dzielnika do portu.
Kiepsko sie nadaje. Zobacz jak ladnie C sie kompiluje na rodzinke x86. odpowiedni tryb adresowania to w C potega :-)
J.
On IMHO smierdzial padlina juz w chwili zakonczenia jego projektu. Ciekawe po co to sie jeszcze robi?
No, 3 i 1/3. ;-) Na parze rejestrow r24 i r25 tez mozna wykonywac operacje 16-bitowe i szybko przesylac ich wynik do rejestrow adresowych.
To dopiero na megach, w zwyklych AVR-kach koszt mnozenia 8x8 jest porownywalny z tym na '51, chyba, ze sie ma 256 bajtow pamieci na tablice iloczynow czesciowych 4x4. :-(
Przylaczam sie do niej, to bardzo przyjemne procesorki.
Ale to juz nie ta liga.
Pozdrawiam Piotr Wyderski
Ale co chwila ktoś dosypie garść przypraw (tzn. doda jakies nowe peryferia) i jest git. ;-) Jak świeżutka wędzona polędwiczka domowej produkcji. ;-)
Mimo tego że sprzęt jest mocno przestarzały to ma jednak jedną dosyć istotną zaletę - jest multisourced tj. wielu producentów klepie jakieś '51 i to w długich seriach (w sensie okresu przez jaki dany model uC jest/był produkowany). Ale IMO to ma znaczenie przy dużych (w sensie nakładów finansowych) i długotrwałych projektach. Chociaż AFAIR Atmel swoją polityką szybkiego zmieniania statusu niektórych produktów na "obsolete" nieprzyjemnie zaskoczył również niektórych kolegów z tej grupy. A następną kostką "multisourced" jest chyba dopiero ARM.
Regards, /J.D.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required